SecurityError: 无法建立到“违反协议 (_ssl.c:841)”的 EOF 的安全连接

Sam*_*Sam 8 python neo4j python-3.x

我正在尝试连接到 Neo4j,但我不断收到此错误。我试过

from neo4j.v1 import GraphDatabase
driver = GraphDatabase.driver(uri="bolt://localhost:7687", auth=("neo4j", "12345"))
Run Code Online (Sandbox Code Playgroud)

但是当我尝试连接时出现此错误

SecurityError: 无法建立到“违反协议 (_ssl.c:841)”的 EOF 的安全连接

当我输入http://localhost:7474/browser/时,我可以连接到浏览

这是完整的错误日志:

-------------------------------------------------- ------------------------- SSLEOFError Traceback(最近一次调用最后一次)~\AppData\Roaming\Python\Python36\site-packages\neobolt\direct .py in _secure(s, host, ssl_context, **config) 853 try: --> 854 s = ssl_context.wrap_socket(s, server_hostname=host if HAS_SNI and host else None) 855 除了 SSLError 作为原因:

c:\program files\python36\lib\ssl.py in wrap_socket(self, sock, server_side, do_handshake_on_connect, suppress_ragged_eofs, server_hostname, session) 406 server_hostname=server_hostname, --> 407 _context=self, _session=session) 408

c:\program files\python36\lib\ssl.py in init(self、sock、keyfile、certfile、server_side、cert_reqs、ssl_version、ca_certs、do_handshake_on_connect、family、type、proto、fileno、suppress_ragged_eofs、npn_protocols、hostname_ciphers、 _context,_session)813 引发 ValueError(“不应为非阻塞套接字指定 do_handshake_on_connect”)--> 814 self.do_handshake() 815

c:\program files\python36\lib\ssl.py in do_handshake(self, block)
1067 self.settimeout(None) -> 1068 self._sslobj.do_handshake() 1069 最后:

c:\program files\python36\lib\ssl.py in do_handshake(self) 688 """开始 SSL/TLS 握手。""" --> 689 self._sslobj.do_handshake() 690 if self.context.check_hostname :

SSLEOFError:EOF 发生违反协议 (_ssl.c:841)

上述异常是以下异常的直接原因:

1 ----> 2 driver = GraphDatabase.driver(uri="bolt://localhost:7687", auth=("neo4j", "12345")) 中的SecurityError Traceback(最近一次调用最后一次)

~\AppData\Roaming\Python\Python36\site-packages\neo4j__init__.py in driver(cls, uri, **config) 118 :class:.Driver直接子类实例。119 """ --> 120 返回驱动程序(uri, **config) 121 122

~\AppData\Roaming\Python\Python36\site-packages\neo4j__init__.py in new (cls, uri, **config) 159 for subclass of Driver. subclasses (): 160 如果 parsed_scheme in subclass.uri_schemes: --> 161 return subclass(uri, **config) 162 raise ValueError("URI scheme %r not supported" % parsed.scheme) 163

~\AppData\Roaming\Python\Python36\site-packages\neo4j__init__.py in new (cls, uri, **config) 233 234 pool = ConnectionPool(connector, instance.address, **config) --> 235 pool。释放(pool.acquire())236 instance._pool = pool 237 instance._max_retry_time = config.get(“max_retry_time”,default_config[“max_retry_time”])

~\AppData\Roaming\Python\Python36\site-packages\neobolt\direct.py inacquire(self, access_mode) 713 714 defacquire(self, access_mode=None): --> 715 return self.acquire_direct(self.address) ) 716 717

~\AppData\Roaming\Python\Python36\site-packages\neobolt\direct.py inacquire_direct(self, address) 606 if can_create_new_connection: 607 try: --> 608 connection = self.connector(address, error_handler=self.connection_error_handler ) 609 除了 ServiceUnavailable: 610 self.remove(address)

~\AppData\Roaming\Python\Python36\site-packages\neo4j__init__.py in connector(address, **kwargs) 230 231 def connector(address, **kwargs): --> 232 return connect(address, **dict (config, **kwargs)) 233 234 pool = ConnectionPool(connector, instance.address, **config)

~\AppData\Roaming\Python\Python36\site-packages\neobolt\direct.py in connect(address, **config) 970 raise ServiceUnavailable("Failed to resolve address for %s" % address) 971 else: -->第972话

~\AppData\Roaming\Python\Python36\site-packages\neobolt\direct.py in connect(address, **config) 961 host = address[0] 962 s = _connect(resolved_address, **config) --> 963 s, der_encoded_server_certificate = _secure(s, host, security_plan.ssl_context, **config) 964 connection = _handshake(s, address, der_encoded_server_certificate, **config) 965 除了作为错误的异常:

~\AppData\Roaming\Python\Python36\site-packages\neobolt\direct.py in _secure(s, host, ssl_context, **config) 857 error = SecurityError(“无法建立到 {!r} 的安全连接”。格式(cause.args[1])) 858 错误。原因= 原因 --> 859 raise error 860 else: 861 # 检查服务器是否提供了证书

SecurityError: 无法建立到“违反协议 (_ssl.c:841)”的 EOF 的安全连接

Sam*_*Sam 7

我为可能有同样问题的人找到了解决方案。您需要添加encrypted=False.

代替

from neo4j.v1 import GraphDatabase
driver = GraphDatabase.driver(uri="bolt://localhost:7687", auth=("neo4j", "12345"))
Run Code Online (Sandbox Code Playgroud)

它应该是:

driver = GraphDatabase.driver(uri="bolt://localhost:7687", auth=("neo4j", "12345"), encrypted=False)
Run Code Online (Sandbox Code Playgroud)

希望这会帮助某人


小智 6

我在使用对象图映射器 Neomodel(连接到 neo4j v4)时遇到了同样的问题。添加第二行解决了这个问题:

config.DATABASE_URL = 'bolt://neo4j:password123@localhost:7687'
config.ENCRYPTED_CONNECTION = False
Run Code Online (Sandbox Code Playgroud)