Skip to content

Commit 6144e94

Browse files
committed
Fixed some fips documentation problems
* changed cipher lists * removed hanging sentences * instructions to delete any boringssl jars
1 parent ae4cbb1 commit 6144e94

File tree

1 file changed

+22
-23
lines changed

1 file changed

+22
-23
lines changed

modules/ROOT/pages/security/ssl-fips-compatibility.adoc

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ The Debian based Neo4j Docker image does *not* support FIPS compatible encryptio
4040

4141
To enable the OpenSSL FIPS provider, set the environment variable `NEO4J_OPENSSL_FIPS_ENABLE=true` when starting the container.
4242

43-
[source, shell, subs="attributes"]
43+
[source, console, subs="attributes"]
4444
.Example starting a Neo4j UBI9 container with FIPS enable flag set.
4545
----
4646
docker run -it --rm \
@@ -63,10 +63,8 @@ Skip this section if using Neo4j in Docker.
6363
The secure networking in Neo4j is provided through the Netty library, which supports both the native JDK SSL provider as well as Netty-supported OpenSSL derivatives.
6464
Specifically Netty's "Forked Tomcat Native" library called https://github.com/netty/netty-tcnative[netty-tcnative].
6565

66-
To be FIPS compatible, the dynamically linked version of `netty-tcnative` must be used, alongside a FIPS compatible installation of OpenSSL.
67-
6866
The `netty-tcnative` library is provided in several variants, but
69-
to be FIPS compatible the dynamically linked version of `netty-tcnative` must be used.
67+
to be FIPS compatible the dynamically linked version of `netty-tcnative` must be used, alongside a FIPS compatible installation of OpenSSL.
7068
This dynamically linked library requires that the following dependencies are installedfootnote:[https://netty.io/wiki/forked-tomcat-native.html]:
7169

7270
* Apache Portable Runtime Library
@@ -88,15 +86,15 @@ By using the dynamic `netty-tcnative` library variant combined with a FIPS certi
8886
The simplest way to install https://apr.apache.org[Apache Portable Runtime Library] is to use the operating system's package manager.
8987

9088
In Debian/Ubuntu this package is usually called `libapr1`
91-
[source, shell, subs="attributes"]
89+
[source, console, subs="attributes"]
9290
.Install Apache Portable Runtime Library in Debian or Ubuntu
9391
----
9492
apt install -y libapr1
9593
----
9694

9795
In RedHat Enterprise Linux the package is usually called `apr`:
9896

99-
[source, shell, subs="attributes"]
97+
[source, console, subs="attributes"]
10098
.Install Apache Portable Runtime Library in RedHat
10199
----
102100
dnf install -y apr
@@ -128,39 +126,43 @@ and on the project's Github page:
128126
Since Neo4j 5.23.0, builds of `netty-tcnative` dynamic library are provided in
129127
the Neo4j `lib` directory under their own subfolder called `netty-tcnative`.
130128

131-
Installation is just a case of copying the correct jar for the local machine's operating system and architecture into the
132-
133129
To install the `netty-tcnative` dynamic library:
134130

135131
. Locate the Neo4j `lib` directory.
136132
+
137133
The location of the `lib` directory is different depending on the method used to install Neo4j. Check the xref:configuration/file-locations.adoc#neo4j-lib[file locations] documentation for the correct location.
138134
+
139135
This location will be referred to as _<NEO4J_LIB>_.
136+
. Make sure there are no `netty-tcnative-boringssl` libraries present in the _<NEO4J_LIB>_ folder.
137+
+
138+
[source, console]
139+
----
140+
find <NEO4J_LIB> -name "netty-tcnative-boringssl*.jar" -delete
141+
----
140142
+
141-
. Check which netty-tcnative libraries are available
143+
. Check which netty-tcnative libraries are available:
142144
+
143-
[source, shell]
145+
[source, console]
144146
----
145147
ls -l <NEO4J_LIB>/netty-tcnative
146148
----
147-
There should be linux and fedora linux variants available, compiled for both x86_64 and arm64 architectures.
149+
There are linux and fedora linux variants available, compiled for both x86_64 and ARM 64 architectures.
148150
Select the one matching the local machine's operating system and architecture.
149151
+
150152
. Verify the dependencies are correctly installed using https://www.man7.org/linux/man-pages/man1/ldd.1.html[`ldd`]:
151153
+
152-
[source, shell, subs="attributes"]
154+
[source, console]
153155
.Verify netty-tcnative dependencies are installed
154156
----
155-
unzip -d /tmp /usr/share/neo4j/lib/netty-tcnative/netty-tcnative-*-linux-$(arch).jar
157+
unzip -d /tmp <NEO4J_LIB>/netty-tcnative/netty-tcnative-*-linux-$(arch).jar
156158
ldd /tmp/META-INF/native/libnetty_tcnative_linux_*.so
157159
rm -rf /tmp/META-INF
158160
----
159161
+
160-
[source, shell, subs="attributes"]
162+
[source, console]
161163
.Verify fedora variant of netty-tcnative dependencies are installed
162164
----
163-
unzip -d /tmp /usr/share/neo4j/lib/netty-tcnative/netty-tcnative-*-linux-$(arch)-fedora.jar
165+
unzip -d /tmp <NEO4J_LIB>/netty-tcnative/netty-tcnative-*-linux-$(arch)-fedora.jar
164166
ldd /tmp/META-INF/native/libnetty_tcnative_linux_$(arch).so
165167
rm -rf /tmp/META-INF
166168
----
@@ -192,14 +194,11 @@ Refer to the xref:security/ssl-framework.adoc#ssl-certificates[SSL certificate a
192194

193195
== Configure Neo4j to use SSL encryption
194196

195-
// TODO
196-
197197

198198
SSL configuration is described in detail at xref:security/ssl-framework.adoc#ssl-configuration[SSL framework configuration].
199199

200-
this section describes configuration that must be done *in addition to* standard non-FIPS compliant SSL configuration.
200+
This section describes configuration that must be done *in addition to* standard non-FIPS compliant SSL configuration.
201201

202-
connectors are bolt, https, cluster and backup.
203202

204203
=== Bolt
205204

@@ -213,7 +212,7 @@ connectors are bolt, https, cluster and backup.
213212
dbms.ssl.policy.bolt.trust_all=false
214213
dbms.ssl.policy.bolt.tls_level=REQUIRED
215214
dbms.ssl.policy.bolt.tls_versions=TLSv1.2,TLSv1.3
216-
dbms.ssl.policy.bolt.ciphers=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
215+
dbms.ssl.policy.bolt.ciphers=TLS_CHACHA20_POLY1305_SHA256,TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
217216
----
218217
. Follow the instructions in xref:security/ssl-framework.adoc#ssl-config-private-key[SSL Framework/Using encrypted private key] to configure `dbms.ssl.policy.bolt.private_key_password` to dynamically read the password from an encrypted password file. The password must NOT be set in plain text.
219218

@@ -231,7 +230,7 @@ This section is only applicable if HTTPS is enabled.
231230
dbms.ssl.policy.https.trust_all=false
232231
dbms.ssl.policy.https.tls_level=REQUIRED
233232
dbms.ssl.policy.https.tls_versions=TLSv1.2,TLSv1.3
234-
dbms.ssl.policy.https.ciphers=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CCM,TLS_ECDHE_ECDSA_WITH_AES_128_CCM,TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8,TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
233+
dbms.ssl.policy.https.ciphers=TLS_CHACHA20_POLY1305_SHA256,TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
235234
----
236235
. Follow the instructions in xref:security/ssl-framework.adoc#ssl-config-private-key[SSL Framework/Using encrypted private key] to configure `dbms.ssl.policy.https.private_key_password` to dynamically read the password from an encrypted password file. The password must NOT be set in plain text.
237236

@@ -248,7 +247,7 @@ dbms.ssl.policy.cluster.enabled=true
248247
dbms.ssl.policy.cluster.tls_level=REQUIRED
249248
dbms.ssl.policy.cluster.client_auth=REQUIRED
250249
dbms.ssl.policy.cluster.tls_versions=TLSv1.2,TLSv1.3
251-
dbms.ssl.policy.cluster.ciphers=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
250+
dbms.ssl.policy.cluster.ciphers=TLS_CHACHA20_POLY1305_SHA256,TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
252251
----
253252
. Follow the instructions in xref:security/ssl-framework.adoc#ssl-config-private-key[SSL Framework/Using encrypted private key] to configure `dbms.ssl.policy.cluster.private_key_password` to dynamically read the password from an encrypted password file. The password must NOT be set in plain text.
254253

@@ -266,6 +265,6 @@ dbms.ssl.policy.backup.enabled=true
266265
dbms.ssl.policy.backup.client_auth=REQUIRED
267266
dbms.ssl.policy.backup.trust_all=false
268267
dbms.ssl.policy.backup.tls_versions=TLSv1.2,TLSv1.3
269-
dbms.ssl.policy.backup.ciphers=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
268+
dbms.ssl.policy.backup.ciphers=TLS_CHACHA20_POLY1305_SHA256,TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
270269
----
271270
. Follow the instructions in xref:security/ssl-framework.adoc#ssl-config-private-key[SSL Framework/Using encrypted private key] to configure `dbms.ssl.policy.backup.private_key_password` to dynamically read the password from an encrypted password file. The password must NOT be set in plain text.

0 commit comments

Comments
 (0)