You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: modules/ROOT/pages/security/ssl-fips-compatibility.adoc
+52-36Lines changed: 52 additions & 36 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,21 +4,24 @@
4
4
:description: How to configure Neo4j to use FIPS compatible SSL encryption.
5
5
:keywords: ssl, tls, authentication, encryption, encrypted, security, fips, fips 140, fips 140-2, nist, hipaa
6
6
7
-
Federal Information Processing Standards (FIPS) 140 is a U.S. government standard established by the National Institute of Standards and Technology (NIST) which is used to accredit cryptographic modules such as those used in TLS network encryption. While FIPS 140 compliance is primarily required for federal agencies and their contractors, it also is used in the healthcare sector under regulations like the Health Insurance Portability and Accountability Act (HIPAA) to protect patient data.
7
+
Federal Information Processing Standards (FIPS) 140 is a U.S. government standard established by the National Institute of Standards and Technology (NIST) which is used to accredit cryptographic modules such as those used in TLS network encryption.
8
+
While FIPS 140 compliance is primarily required for federal agencies and their contractors, it also is used in the healthcare sector under regulations like the Health Insurance Portability and Accountability Act (HIPAA) to protect patient data.
8
9
9
10
This is a guide to help configure Neo4j to use TLS / SSL encryption in a FIPS-compatible way.
10
11
It is supplementary to the xref:security/ssl-framework.adoc[] documentation, as many of the configuration processes and requirements are the same.
11
12
12
13
14
+
[[ssl-fips-prerequisites]]
13
15
== Prerequisites
14
16
15
17
* Verify that the machine running Neo4j has FIPS-compatible hardware and operating system.
16
18
Only xref:installation/requirements.adoc#deployment-requirements-software[Linux operating systems] are supported for Neo4j FIPS compatibility at this time.
17
-
* Neo4j Enterprise 5.23.0 or later.
19
+
* Use Neo4j Enterprise 5.23.0 or later.
18
20
* Install and configure a non-native authentication provider, for example LDAP or SSO. See xref:authentication-authorization/index.adoc[].
19
21
20
22
21
-
== Enable FIPS SSL Provider (Docker)
23
+
[[fips-ssl-provider-docker]]
24
+
== Enable FIPS SSL provider (Docker)
22
25
23
26
The Neo4j RedHat UBI9 Docker image comes with the SSL provider and dependencies pre-installed, but it is not enabled by default.
24
27
@@ -42,37 +45,39 @@ docker run -it --rm \
42
45
neo4j:{neo4j-version-exact}-enterprise-ubi9
43
46
----
44
47
48
+
[[fips-ssl-provider]]
45
49
== Enable FIPS SSL provider
46
50
47
51
[IMPORTANT]
48
52
====
49
53
Skip this section if using Neo4j in Docker.
50
54
====
51
55
52
-
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.
53
-
Specifically Netty's "Forked Tomcat Native" library called https://github.com/netty/netty-tcnative[netty-tcnative].
56
+
The secure networking in Neo4j is provided through the Netty library, which supports both the native JDK SSL provider and Netty-supported OpenSSL derivatives.
57
+
Specifically Netty's _Forked Tomcat Native_ library called https://github.com/netty/netty-tcnative[netty-tcnative].
54
58
55
-
The `netty-tcnative` library is provided in several variants, but
56
-
to be FIPS compatible the dynamically linked version of `netty-tcnative` must be used, alongside a FIPS compatible installation of OpenSSL.
57
-
This dynamically linked library requires that the following dependencies are installedfootnote:[https://netty.io/wiki/forked-tomcat-native.html]:
59
+
The `netty-tcnative` library is provided in several variants.
60
+
However, to achieve FIPS compliance, you must use the dynamically linked version of `netty-tcnative` alongside a FIPS-compatible installation of OpenSSL.
61
+
62
+
The dynamically linked library requires the following dependencies to be installedfootnote:[https://netty.io/wiki/forked-tomcat-native.html]:
58
63
59
64
* Apache Portable Runtime Library
60
65
* A FIPS certified version of OpenSSL, with a FIPS provider installed and set as default.
61
66
62
-
Refer to https://netty.io/wiki/forked-tomcat-native.html for more information.
67
+
Refer to https://netty.io/wiki/forked-tomcat-native.html/[Forked Tomcat Native] for more information.
63
68
64
69
65
70
[NOTE]
66
71
====
67
-
Netty provide a convenient pre-build, statically linked version of `netty-tcnative` using BoringSSL, but this is not FIPS certifiedfootnote:[https://boringssl.googlesource.com/boringssl/+/master/crypto/fipsmodule/FIPS.md].
72
+
Netty provides a convenient pre-build, statically linked version of `netty-tcnative` using BoringSSL, but this is not FIPS certifiedfootnote:[https://boringssl.googlesource.com/boringssl/+/master/crypto/fipsmodule/FIPS.md].
68
73
69
74
By using the dynamic `netty-tcnative` library variant combined with a FIPS certified OpenSSL installation, Neo4j's cryptographic operations are delegated by `netty-tcnative` to OpenSSL, transitively giving FIPS compatibility.
70
75
====
71
76
72
77
[[install-apr]]
73
78
=== Install Apache portable runtime library
74
79
75
-
The simplest way to install https://apr.apache.org[Apache Portable Runtime Library] is to use the operating system's package manager.
80
+
To install https://apr.apache.org[Apache Portable Runtime Library], use the operating system's package manager.
76
81
77
82
In Debian/Ubuntu this package is usually called `libapr1`
78
83
[source, console, subs="attributes"]
@@ -81,37 +86,38 @@ In Debian/Ubuntu this package is usually called `libapr1`
81
86
apt install -y libapr1
82
87
----
83
88
84
-
In RedHat Enterprise Linux the package is usually called `apr`:
89
+
In RedHat Enterprise Linux, the package is usually called `apr`:
85
90
86
91
[source, console, subs="attributes"]
87
92
.Install Apache Portable Runtime Library in RedHat
88
93
----
89
94
dnf install -y apr
90
95
----
91
96
97
+
[[install-openssl]]
92
98
=== Install OpenSSL
93
99
94
100
Instructions on how to build and install a FIPS-compatible OpenSSL are out of scope for this document. Installation steps can differ depending on operating system, and other security requirements you might have for OpenSSL.
95
101
96
102
In general:
97
103
98
-
* A list of FIPS certified OpenSSL versions can be found at https://openssl-library.org/source/
104
+
* For a list of FIPS certified OpenSSL versions, see https://openssl-library.org/source/[].
99
105
* A FIPS provider must be installed into OpenSSL.
100
106
* OpenSSL must be configured to use the FIPS provider by default.
Since Neo4j 5.23.0, builds of `netty-tcnative` dynamic library are provided in
108
-
the Neo4j `lib` directory under their own subfolder called `netty-tcnative`.
110
+
[[install-netty-tcnative-lib]]
111
+
=== Install the correct `netty-tcnative` library
112
+
113
+
Since Neo4j 5.23.0, builds of `netty-tcnative` dynamic library are provided in the Neo4j `lib` directory under their own subfolder called `netty-tcnative`.
109
114
110
115
To install the `netty-tcnative` dynamic library:
111
116
112
117
. Locate the Neo4j `lib` directory.
113
118
+
114
-
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.
119
+
The location of the `lib` directory is different depending on the method used to install Neo4j.
120
+
Check the xref:configuration/file-locations.adoc#neo4j-lib[file locations] documentation for the correct location.
115
121
+
116
122
This location will be referred to as _<NEO4J_LIB>_.
117
123
. Make sure there are no `netty-tcnative-boringssl` libraries present in the _<NEO4J_LIB>_ folder.
@@ -163,30 +169,33 @@ In case of this error, you will get a message like:
163
169
----
164
170
====
165
171
166
-
172
+
[[generate-ssl-cert-private-key]]
167
173
== Generate SSL certificate and private key
168
174
169
-
Neo4j SSL encryption requires a xref:security/ssl-framework.adoc#term-ssl-certificate[certificate] in the xref:security/ssl-framework.adoc#term-ssl-x509[X.509] standard, encoded in PEM format.
170
-
and a private key in xref:security/ssl-framework.adoc#term-ssl-pkcs8[PKCS #8] format, also PEM encoded.
171
-
*For FIPS compatibility, the private key must be secured with a password*.
175
+
Neo4j SSL encryption requires a xref:security/ssl-framework.adoc#term-ssl-certificate[certificate] in the xref:security/ssl-framework.adoc#term-ssl-x509[X.509] standard and a private key in xref:security/ssl-framework.adoc#term-ssl-pkcs8[PKCS #8] format, both encoded in PEM format.
176
+
177
+
[IMPORTANT]
178
+
====
179
+
For FIPS compatibility, the private key must be secured with a password.
180
+
====
172
181
173
182
Refer to the xref:security/ssl-framework.adoc#ssl-certificates[SSL certificate and key instructions] for more information.
174
183
175
184
185
+
[[configure-neo4j-ssl-encryption]]
176
186
== Configure Neo4j to use SSL encryption
177
187
178
-
179
-
SSL configuration is described in detail at xref:security/ssl-framework.adoc#ssl-configuration[SSL framework configuration].
188
+
SSL configuration is described in detail in xref:security/ssl-framework.adoc#ssl-configuration[SSL framework configuration].
180
189
181
190
This section describes configuration that must be done *in addition to* standard non-FIPS compliant SSL configuration.
182
191
183
-
192
+
[[bolt-ssl-fips]]
184
193
=== Bolt
185
194
186
195
. Set `xref:configuration/configuration-settings.adoc#config_dbms.netty.ssl.provider[dbms.netty.ssl.provider]=OPENSSL`
187
196
. Set `xref:configuration/configuration-settings.adoc#config_server.bolt.tls_level[server.bolt.tls_level]=REQUIRED`
188
-
. Follow instructions to xref:security/ssl-framework.adoc#ssl-bolt-config[Configure SSL over bolt].
189
-
. Set additional bolt configurations:
197
+
. Follow instructions on how to xref:security/ssl-framework.adoc#ssl-bolt-config[Configure SSL over Bolt].
. 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.
207
+
. 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.
208
+
The password must *not* be set in plain text.
199
209
200
210
211
+
[[https-ssl-fips]]
201
212
=== HTTPS
202
213
203
214
This section is only applicable if HTTPS is enabled.
204
215
205
-
. Follow instructions to xref:security/ssl-framework.adoc#ssl-https-config[Configure SSL over HTTPS].
216
+
. Follow instructions on how to xref:security/ssl-framework.adoc#ssl-https-config[Configure SSL over HTTPS].
. 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.
227
+
. 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.
217
228
229
+
[[intra-cluster-encryption-ssl-fips]]
218
230
=== Intra-cluster encryption
219
231
220
232
For FIPS compatbility, intra-cluster encryption must be enabled if you are running a Neo4j cluster.
. 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.
245
+
. 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.
246
+
The password must *not* be set in plain text.
234
247
235
248
249
+
[[backup-ssl-fips]]
236
250
=== Backup
237
251
238
252
This section is applicable on instances or cluster members used for taking backups.
239
253
240
-
. Follow instructions to xref:security/ssl-framework.adoc#ssl-backup-config[configure SSL for backup communication].
254
+
. Follow instructions on how to xref:security/ssl-framework.adoc#ssl-backup-config[Configure SSL for backup communication].
. 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.
265
+
. 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.
0 commit comments