1 # Network Security Services
3 Network Security Services (NSS) is a set of libraries designed to support
4 cross-platform development of security-enabled client and server
5 applications. NSS supports TLS 1.2, TLS 1.3, PKCS #5, PKCS#7,
6 PKCS #11, PKCS #12, S/MIME, X.509 v3 certificates, and other security
11 In order to get started create a new directory on that you will be uses as your
12 local work area, and check out NSS and NSPR. (Note that there's no git mirror of
13 NSPR and you require mercurial to get the latest NSPR source.)
15 git clone https://github.com/nss-dev/nss.git
16 hg clone https://hg.mozilla.org/projects/nspr
18 NSS can also be cloned with mercurial
20 hg clone https://hg.mozilla.org/projects/nss
24 **This build system is under development. It does not yet support all the
25 features or platforms that NSS supports. To build on anything other than Mac or
26 Linux please use the legacy build system as described below.**
30 * [gyp](https://gyp.gsrc.io/)
31 * [ninja](https://ninja-build.org/)
33 After changing into the NSS directory a typical build is done as follows
37 Once the build is done the build output is found in the directory
38 `../dist/Debug` for debug builds and `../dist/Release` for opt builds.
39 Exported header files can be found in the `include` directory, library files in
40 directory `lib`, and tools in directory `bin`. In order to run the tools, set
41 your system environment to use the libraries of your build from the "lib"
42 directory, e.g., using the `LD_LIBRARY_PATH` or `DYLD_LIBRARY_PATH`.
44 See [help.txt](https://hg.mozilla.org/projects/nss/raw-file/tip/help.txt) for
45 more information on using build.sh.
47 ## Building NSS (legacy build system)
49 After changing into the NSS directory a typical build of 32-bit NSS is done as
54 The following environment variables might be useful:
56 * `BUILD_OPT=1` to get an optimised build
58 * `USE_64=1` to get a 64-bit build (recommended)
60 The complete list of environment variables can be found
61 [here](https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Reference/NSS_environment_variables).
63 To clean the build directory run:
71 Make sure that the address `$HOST.$DOMSUF` on your computer is available. This
72 is necessary because NSS tests generate certificates and establish TLS
73 connections, which requires a fully qualified domain name.
75 calling `ping $HOST.$DOMSUF`. If this is working, you're all set. If it's not,
81 Note that you might have to add `nss.local` to `/etc/hosts` if it's not
82 there. The entry should look something like `127.0.0.1 nss.local nss`.
86 **Runnning all tests will take a while!**
91 Make sure that all environment variables set for the build are set while running
92 the tests as well. Test results are published in the folder
93 `../../test_results/`.
95 Individual tests can be run with the `NSS_TESTS` environment variable,
96 e.g. `NSS_TESTS=ssl_gtests ./all.sh` or by changing into the according directory
97 and running the bash script there `cd ssl_gtests && ./ssl_gtests.sh`. The
98 following tests are available:
100 cipher lowhash libpkix cert dbtests tools fips sdr crmf smime ssl ocsp merge pkits chains ec gtests ssl_gtests bogo policy
102 To make tests run faster it's recommended to set `NSS_CYCLES=standard` to run
103 only the standard cycle.
107 NSS releases can be found at [Mozilla's download
108 server](https://ftp.mozilla.org/pub/security/nss/releases/). Because NSS depends
109 on the base library NSPR you should download the archive that combines both NSS
114 [Bugzilla](https://bugzilla.mozilla.org/) is used to track NSS development and
115 bugs. File new bugs in the NSS product.
117 A list with good first bugs to start with are [listed
118 here](https://bugzilla.mozilla.org/buglist.cgi?keywords=good-first-bug%2C%20&keywords_type=allwords&list_id=13238861&resolution=---&query_format=advanced&product=NSS).
120 ### NSS Folder Structure
122 The nss directory contains the following important subdirectories:
124 - `coreconf` contains the build logic.
126 - `lib` contains all library code that is used to create the runtime libraries.
128 - `cmd` contains a set of various tool programs that are built with NSS. Several
129 tools are general purpose and can be used to inspect and manipulate the
130 storage files that software using the NSS library creates and modifies. Other
131 tools are only used for testing purposes.
133 - `test` and `gtests` contain the NSS test suite. While `test` contains shell
134 scripts to drive test programs in `cmd`, `gtests` holds a set of
135 [gtests](https://github.com/google/googletest).
137 A more comprehensible overview of the NSS folder structure and API guidelines
139 [here](https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/NSS_API_Guidelines).
141 ## Build mechanisms related to FIPS compliance
143 NSS supports build configurations for FIPS-140 compliance, and alternative build
144 configurations that disable functionality specific to FIPS-140 compliance.
146 This section documents the environment variables and build parameters that
147 control these configurations.
149 ### Build FIPS startup tests
151 The C macro NSS_NO_INIT_SUPPORT controls the FIPS startup self tests.
152 If NSS_NO_INIT_SUPPORT is defined, the startup tests are disabled.
154 The legacy build system (make) by default disables these tests.
155 To enable these tests, set environment variable NSS_FORCE_FIPS=1 at build time.
157 The gyp build system by default disables these tests.
158 To enable these tests, pass parameter --enable-fips to build.sh.
160 ### Building either FIPS compliant or alternative compliant code
162 The C macro NSS_FIPS_DISABLED can be used to disable some FIPS compliant code
163 and enable alternative implementations.
165 The legacy build system (make) never defines NSS_FIPS_DISABLED and always uses
166 the FIPS compliant code.
168 The gyp build system by default defines NSS_FIPS_DISABLED.
169 To use the FIPS compliant code, pass parameter --enable-fips to build.sh.
173 The NSS test suite may contain tests that are included, excluded, or are
174 different based on the FIPS build configuration. To execute the correct tests,
175 it's necessary to determine which build configuration was used.
177 The legacy build system (make) uses environment variables to control all
178 aspects of the build configuration, including FIPS build configuration.
180 Because the gyp build system doesn't use environment variables to control the
181 build configuration, the NSS tests cannot rely on environment variables to
182 determine the build configuration.
184 A helper binary named nss-build-flags is produced as part of the NSS build,
185 which prints the C macro symbols that were defined at build time, and which are
186 relevant to test execution.