Python-连接到数据库时出现 Neo4j 安全错误无法建立与“[SSL:UNKNOWN_PROTCOL(_ssl.c:600) 的安全连接
Python-Neo4j Security error while connecting to database Failed to establish secure connection to '[SSL:UNKNOWN_PROTCOL(_ssl.c:600)
我正在尝试使用 neo4j-driver 将 Django 连接到 Neo4j,但出现安全错误。
错误是 :- neo4j.exceptions.SecurityError: Failed to establish secure connection to '[SSL: UNKNOWN_PROTOCOL] unknown protocol (_ssl.c:600)'
Python MACOSX 版本 3.4.3
我的依赖关系
django1.9
neo4j-driver==1.4.0
代码
Views.py
from django.shortcuts import render
# Create your views here.
from neo4j.v1 import GraphDatabase,basic_auth
from django.conf import settings
from django.db import IntegrityError
from django.views.decorators.cache import cache_page
from django.http import HttpResponse
from django.contrib import messages
from django.http import HttpResponse, HttpResponseRedirect, JsonResponse,Http404
from django.http import StreamingHttpResponse
from django.shortcuts import render_to_response
from django.shortcuts import render
from django.template import RequestContext
from django.views.decorators.csrf import csrf_exempt
from django import template
uri = "bolt://localhost:7474"
driver = GraphDatabase.driver(uri, auth=("neo4j", "password"))
def friends(request):
name = "Cameron Crowe"
with driver.session() as session:
with session.begin_transaction() as tx:
for record in tx.run("MATCH (a:Person)-[:PRODUCED]->(f) "
"WHERE a.name = {name} "
"RETURN f.title", name=name):
print(record["f.title"])
return render(request, "friends.html")
错误
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/Users/sskadit/Desktop/graphdb/src/lib/python3.4/site-packages/django/utils/autoreload.py", line 226, in wrapper
fn(*args, **kwargs)
File "/Users/sskadit/Desktop/graphdb/src/lib/python3.4/site-packages/django/core/management/commands/runserver.py", line 116, in inner_run
self.check(display_num_errors=True)
File "/Users/sskadit/Desktop/graphdb/src/lib/python3.4/site-packages/django/core/management/base.py", line 426, in check
include_deployment_checks=include_deployment_checks,
File "/Users/sskadit/Desktop/graphdb/src/lib/python3.4/site-packages/django/core/checks/registry.py", line 75, in run_checks
new_errors = check(app_configs=app_configs)
File "/Users/sskadit/Desktop/graphdb/src/lib/python3.4/site-packages/django/core/checks/urls.py", line 10, in check_url_config
return check_resolver(resolver)
File "/Users/sskadit/Desktop/graphdb/src/lib/python3.4/site-packages/django/core/checks/urls.py", line 19, in check_resolver
for pattern in resolver.url_patterns:
File "/Users/sskadit/Desktop/graphdb/src/lib/python3.4/site-packages/django/utils/functional.py", line 33, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/Users/sskadit/Desktop/graphdb/src/lib/python3.4/site-packages/django/core/urlresolvers.py", line 417, in url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/Users/sskadit/Desktop/graphdb/src/lib/python3.4/site-packages/django/utils/functional.py", line 33, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/Users/sskadit/Desktop/graphdb/src/lib/python3.4/site-packages/django/core/urlresolvers.py", line 410, in urlconf_module
return import_module(self.urlconf_name)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/importlib/__init__.py", line 109, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 2254, in _gcd_import
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked
File "<frozen importlib._bootstrap>", line 1129, in _exec
File "<frozen importlib._bootstrap>", line 1471, in exec_module
File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
File "/Users/sskadit/Desktop/graphdb/src/neo4/neo4/urls.py", line 19, in <module>
from graphdb.views import friends
File "/Users/sskadit/Desktop/graphdb/src/neo4/graphdb/views.py", line 20, in <module>
driver = GraphDatabase.driver("bolt://127.0.0.1:7474", auth= basic_auth("neo4j", "aditya369")).session()
File "/Users/sskadit/Desktop/graphdb/src/lib/python3.4/site-packages/neo4j/v1/api.py", line 124, in driver
return driver_class(uri, **config)
File "/Users/sskadit/Desktop/graphdb/src/lib/python3.4/site-packages/neo4j/v1/direct.py", line 65, in __init__
pool.release(pool.acquire())
File "/Users/sskadit/Desktop/graphdb/src/lib/python3.4/site-packages/neo4j/v1/direct.py", line 39, in acquire
connection = self.acquire_direct(address) # should always be a resolved address
File "/Users/sskadit/Desktop/graphdb/src/lib/python3.4/site-packages/neo4j/bolt/connection.py", line 398, in acquire_direct
connection = self.connector(address)
File "/Users/sskadit/Desktop/graphdb/src/lib/python3.4/site-packages/neo4j/v1/direct.py", line 64, in <lambda>
pool = DirectConnectionPool(lambda a: connect(a, security_plan.ssl_context, **config), self.address)
File "/Users/sskadit/Desktop/graphdb/src/lib/python3.4/site-packages/neo4j/bolt/connection.py", line 501, in connect
raise error
neo4j.exceptions.SecurityError: Failed to establish secure connection to '[SSL: UNKNOWN_PROTOCOL] unknown protocol (_ssl.c:600)'
这是在 Github issue here 中报告的。以下对您有用吗?
- 使用
pip uninstall neo4j-driver
卸载neo4j驱动
- 运行终端中的命令
echo "deb http://httpredir.debian.org/debian/ jessie-backports main" >> /etc/apt/sources.list && apt update && apt install -y -t jessie-backports openssl
- 重新安装 neo4j-driver
pip install neo4j-driver
感谢 Rishabh 编写问题的解决方案。
后来才知道,端口号7474是用于http协议的,供ssl使用。
我已将 URL 形式 uri = "bolt://localhost:7474"
更改为 uri = "bolt://localhost:7687"
工作很有魅力!!
浏览器显示端口 9987,我在使用此端口时遇到异常。当我将 python 中的端口更改为 7687
时它起作用了
我正在尝试使用 neo4j-driver 将 Django 连接到 Neo4j,但出现安全错误。
错误是 :- neo4j.exceptions.SecurityError: Failed to establish secure connection to '[SSL: UNKNOWN_PROTOCOL] unknown protocol (_ssl.c:600)'
Python MACOSX 版本 3.4.3
我的依赖关系
django1.9
neo4j-driver==1.4.0
代码 Views.py
from django.shortcuts import render
# Create your views here.
from neo4j.v1 import GraphDatabase,basic_auth
from django.conf import settings
from django.db import IntegrityError
from django.views.decorators.cache import cache_page
from django.http import HttpResponse
from django.contrib import messages
from django.http import HttpResponse, HttpResponseRedirect, JsonResponse,Http404
from django.http import StreamingHttpResponse
from django.shortcuts import render_to_response
from django.shortcuts import render
from django.template import RequestContext
from django.views.decorators.csrf import csrf_exempt
from django import template
uri = "bolt://localhost:7474"
driver = GraphDatabase.driver(uri, auth=("neo4j", "password"))
def friends(request):
name = "Cameron Crowe"
with driver.session() as session:
with session.begin_transaction() as tx:
for record in tx.run("MATCH (a:Person)-[:PRODUCED]->(f) "
"WHERE a.name = {name} "
"RETURN f.title", name=name):
print(record["f.title"])
return render(request, "friends.html")
错误
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/Users/sskadit/Desktop/graphdb/src/lib/python3.4/site-packages/django/utils/autoreload.py", line 226, in wrapper
fn(*args, **kwargs)
File "/Users/sskadit/Desktop/graphdb/src/lib/python3.4/site-packages/django/core/management/commands/runserver.py", line 116, in inner_run
self.check(display_num_errors=True)
File "/Users/sskadit/Desktop/graphdb/src/lib/python3.4/site-packages/django/core/management/base.py", line 426, in check
include_deployment_checks=include_deployment_checks,
File "/Users/sskadit/Desktop/graphdb/src/lib/python3.4/site-packages/django/core/checks/registry.py", line 75, in run_checks
new_errors = check(app_configs=app_configs)
File "/Users/sskadit/Desktop/graphdb/src/lib/python3.4/site-packages/django/core/checks/urls.py", line 10, in check_url_config
return check_resolver(resolver)
File "/Users/sskadit/Desktop/graphdb/src/lib/python3.4/site-packages/django/core/checks/urls.py", line 19, in check_resolver
for pattern in resolver.url_patterns:
File "/Users/sskadit/Desktop/graphdb/src/lib/python3.4/site-packages/django/utils/functional.py", line 33, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/Users/sskadit/Desktop/graphdb/src/lib/python3.4/site-packages/django/core/urlresolvers.py", line 417, in url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/Users/sskadit/Desktop/graphdb/src/lib/python3.4/site-packages/django/utils/functional.py", line 33, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/Users/sskadit/Desktop/graphdb/src/lib/python3.4/site-packages/django/core/urlresolvers.py", line 410, in urlconf_module
return import_module(self.urlconf_name)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/importlib/__init__.py", line 109, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 2254, in _gcd_import
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked
File "<frozen importlib._bootstrap>", line 1129, in _exec
File "<frozen importlib._bootstrap>", line 1471, in exec_module
File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
File "/Users/sskadit/Desktop/graphdb/src/neo4/neo4/urls.py", line 19, in <module>
from graphdb.views import friends
File "/Users/sskadit/Desktop/graphdb/src/neo4/graphdb/views.py", line 20, in <module>
driver = GraphDatabase.driver("bolt://127.0.0.1:7474", auth= basic_auth("neo4j", "aditya369")).session()
File "/Users/sskadit/Desktop/graphdb/src/lib/python3.4/site-packages/neo4j/v1/api.py", line 124, in driver
return driver_class(uri, **config)
File "/Users/sskadit/Desktop/graphdb/src/lib/python3.4/site-packages/neo4j/v1/direct.py", line 65, in __init__
pool.release(pool.acquire())
File "/Users/sskadit/Desktop/graphdb/src/lib/python3.4/site-packages/neo4j/v1/direct.py", line 39, in acquire
connection = self.acquire_direct(address) # should always be a resolved address
File "/Users/sskadit/Desktop/graphdb/src/lib/python3.4/site-packages/neo4j/bolt/connection.py", line 398, in acquire_direct
connection = self.connector(address)
File "/Users/sskadit/Desktop/graphdb/src/lib/python3.4/site-packages/neo4j/v1/direct.py", line 64, in <lambda>
pool = DirectConnectionPool(lambda a: connect(a, security_plan.ssl_context, **config), self.address)
File "/Users/sskadit/Desktop/graphdb/src/lib/python3.4/site-packages/neo4j/bolt/connection.py", line 501, in connect
raise error
neo4j.exceptions.SecurityError: Failed to establish secure connection to '[SSL: UNKNOWN_PROTOCOL] unknown protocol (_ssl.c:600)'
这是在 Github issue here 中报告的。以下对您有用吗?
- 使用
pip uninstall neo4j-driver
卸载neo4j驱动
- 运行终端中的命令
echo "deb http://httpredir.debian.org/debian/ jessie-backports main" >> /etc/apt/sources.list && apt update && apt install -y -t jessie-backports openssl
- 重新安装 neo4j-driver
pip install neo4j-driver
感谢 Rishabh 编写问题的解决方案。
后来才知道,端口号7474是用于http协议的,供ssl使用。
我已将 URL 形式 uri = "bolt://localhost:7474"
更改为 uri = "bolt://localhost:7687"
工作很有魅力!!
浏览器显示端口 9987,我在使用此端口时遇到异常。当我将 python 中的端口更改为 7687
时它起作用了