I have a backend where I run a couple of containers as a Docker Compose stack. One of the services is a neo4j server (community edition). I've opened ports 7473 and 7687 in the firewall to our subnet. Our IT organisation has created an "in-house" certificate for this specific server.
These are the TLS-related settings:
- NEO4J_server_bolt_enabled=true
- NEO4J_server_bolt_tls__level=REQUIRED
- NEO4J_server_http_enabled=false
- NEO4J_server_https_enabled=true
- NEO4J_dbms_security_auth__enabled=true
- NEO4J_dbms_ssl_policy_bolt_enabled=true
- NEO4J_dbms_ssl_policy_bolt_client__auth=OPTIONAL
- NEO4J_dbms_ssl_policy_bolt_base__directory=/certs
- NEO4J_dbms_ssl_policy_bolt_private__key=<in-house certificate key here>
- NEO4J_dbms_ssl_policy_bolt_public__certificate=<in-house certificate here>
- NEO4J_dbms_ssl_policy_bolt_verify__hostname=false
- NEO4J_dbms_ssl_policy_bolt_trust__all=false
- NEO4J_dbms_ssl_policy_https_enabled=true
- NEO4J_dbms_ssl_policy_https_client__auth=OPTIONAL
- NEO4J_dbms_ssl_policy_https_base__directory=/certs
- NEO4J_dbms_ssl_policy_https_private__key=<in-house certificate key here>
- NEO4J_dbms_ssl_policy_https_public__certificate=<in-house certificate here>
- NEO4J_dbms_ssl_policy_https_verify__hostname=false
- NEO4J_dbms_ssl_policy_https_trust__all=false
The in-house certificate has been installed as a "personal certificate" on each user's machine. However, when entering https://<servername>:7473/browser
a dialog appears where another certificate pops up. I get a feeling that the browser doesn't allow our in-house certificate to be used with the neo4j-browser. It doesn't matter whether i select neo4j+s://
or bolt+s://
in the connect URL - we're always presented by the dialogbox asking for a valid certificate.
Maybe one or more of the settings above are wrong for our environment but I fail to identify them.
I found the following from the official neo4j documentation with regards to the neo4j browser:
URI schemes ending
+ssc
are not supported by Neo4j Browser since the browser’s OS handles certificate trust. If it is necessary to connect to a Neo4j instance using a self-signed certificate from Neo4j Browser, first visit a web page that uses the self-signed certificate in order to prompt the browser to request that certificate trust be granted. Once that trust has been granted, you can connect with URI schemes ending+s
.
When I try the above I'm not able to select our in-house certificate and issuing an openssl s_client -connect <our server fqdn>:7687
confirms that the server is configured with our certificate. Furthermore, inspecting the (browser) debug log I can see that I get a An error occurred: SSL_ERROR_HANDSHAKE_FAILURE_ALERT
exception. To me it looks like we're indeed having certificate issues here.
This is leaving me clueless as of what is going on here and would appreciate any help I can get
UPDATE
I decided to generate a "p12" file (using openssl) and managed to import the certificate into my Edge browser but the browser fails to identify my certificate although I can verify it is imported and used, among other things, for "server authentication".