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 証明書をシステムの信頼チェーンに入れるにはどうすればよいですか?