4

CentOS7 の Bolt 通信用に TLS を有効にして Neo4j をセットアップしようとしています。サーバーは現在、システム サービスとしてインストールされています。自己署名証明書とキーを生成しました:

sudo openssl genrsa -des3 -out /var/ssl/ca.key 4096``
sudo openssl req -new -x509 -days 365 -key /var/ssl/ca.key -out /var/ssl/ca.crt
sudo openssl genrsa -des3 -out /var/ssl/neo4j/serv.key 1024``
sudo openssl req -new -key /var/ssl/neo4j/serv.key -out /var/ssl/neo4j/server.csr
sudo openssl x509 -req -days 365 -in /var/ssl/neo4j/server.csr -CA /var/ssl/ca.crt -CAkey /var/ssl/ca.key -set_serial 01 -out /var/ssl/neo4j/server.crt
sudo openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in /var/ssl/neo4j/serv.key -out /var/ssl/neo4j/server.key

次に、server.crt ファイルを /var/ssl/trusted/neo4j にコピーし (Neo4j のドキュメントに従って)、neo4j.conf に次の行を追加しました。

dbms.ssl.policy.default.trusted_dir=/var/ssl/trusted/neo4j
dbms.ssl.policy.default.public_certificate=/var/ssl/neo4j/server.crt
dbms.ssl.policy.default.private_key=/var/ssl/neo4j/server.key
dbms.ssl.policy.default.base_directory=/var/ssl/neo4j/
dbms.connector.bolt.enabled=true
dbms.connector.bolt.tls_level=REQUIRED

最後に、システムの信頼できる証明書チェーンに ca.crt ファイルを追加しました。

sudo cp /var/ssl/ca.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust

サーバーを再起動すると、正しく起動します。ただし、Python クライアントでサーバーに接続しようとすると、次のエラーが表示されます。

neo4j.exceptions.SecurityError: Failed to establish secure connection to '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)'

エラーを生成する Python コード:

from neo4j.v1 import GraphDatabase
from neo4j.v1 import TRUST_SYSTEM_CA_SIGNED_CERTIFICATES
uri = "bolt://localhost:7687"
driver = GraphDatabase.driver(uri, auth=("neo4j", "neo4j"), trust=TRUST_SYSTEM_CA_SIGNED_CERTIFICATES)

CA 証明書をシステムの信頼チェーンに追加する必要があり、他のアプリケーションはそれを使用できるように見えますが、Neo4j クライアントはそれを使用してサーバーから返された証明書を検証できないようです。Neo4j はこの CA を HTTPS エンドポイントにのみ使用し、TLS エンドポイントには使用しませんか? その場合、Bolt エンドポイントの CA 証明書をシステムの信頼チェーンに入れるにはどうすればよいですか?

4

3 に答える 3

0

どうやら Neo4j は、Bolt 接続用に証明書がまだ存在しない場合、別の証明書を生成し、HTTPS エンドポイント証明書の構成とは別のものです。

私の証明書は、「neo4j.cert」および「neo4j.key」という名前で /var/lib/neo4j/certificates/ に生成されました。Neo4j サーバーを起動する前に、信頼できる CA によって署名されたサーバー証明書とキーをこれらのフォルダーにコピーすると、Neo4j サーバーはそれらを使用して Bolt エンドポイントを保護し、保護された Python クライアントに接続できました。

于 2018-07-15T17:12:00.680 に答える