summaryrefslogtreecommitdiff
path: root/doc/guides/updating-root-certs.md
blob: 41c83e5898bd1073729e6ebb07e43517c8d841a0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# Updating the Root Certificates

Node.js contains a compiled-in set of root certificates used as trust anchors
for TLS certificate validation.

The certificates come from Mozilla, specifically NSS's `certdata.txt` file.

The PEM encodings of the certificates are converted to C strings, and committed
in `src/node_root_certs.h`.

## When to update

Root certificates should be updated sometime after Mozilla makes an NSS release,
check the [NSS release schedule][].

## Process

Commands assume that the current working directory is the root of a checkout of
the nodejs/node repository.

1. Find NSS metadata for update.

    The latest released NSS version, release date, Firefox version, and Firefox
    release date can be found in the [NSS release schedule][].

    The tag to fetch `certdata.txt` from is found by looking for the release
    version in the [tag list][].

2. Update `certdata.txt` from the NSS release tag.

    Update the tag in the commands below, and run:

    ```shell
    cd tools/
    ./mk-ca-bundle.pl -v 2>_before
    curl -O https://hg.mozilla.org/projects/nss/raw-file/NSS_3_41_RTM/lib/ckfw/builtins/certdata.txt
    ```

    The `_before` file will be used later. Verify that running `mk-ca-bundle`
    made no changes to `src/node_root_certs.h`. If it did, something went wrong
    with the previous update. Seek help!

    Update metadata in the message below, and commit `certdata.txt`:

    ```text
    tools: update certdata.txt

    This is the certdata.txt[0] from NSS 3.41, released on 2018-12-03.

    This is the version of NSS that will ship in Firefox 65 on
    2018-12-11.

    [0] https://hg.mozilla.org/projects/nss/raw-file/NSS_3_41_RTM/lib/ckfw/builtins/certdata.txt
    ```

3. Update `node_root_certs.h` from `certdata.txt`.

    Run the command below:

    ```shell
    ./mk-ca-bundle.pl -v 2>_after
    ```

    Confirm that `../src/node_root_certs.h` was updated.

    Determine what changes were made by diffing the before and after files:

    ```shell
    % diff _before _after
    11d10
    < Parsing: Visa eCommerce Root
    106d104
    < Parsing: TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H5
    113,117d110
    < Parsing: Certplus Root CA G1
    < Parsing: Certplus Root CA G2
    < Parsing: OpenTrust Root CA G1
    < Parsing: OpenTrust Root CA G2
    < Parsing: OpenTrust Root CA G3
    134c127,136
    < Done (133 CA certs processed, 20 skipped).
    ---
    > Parsing: GlobalSign Root CA - R6
    > Parsing: OISTE WISeKey Global Root GC CA
    > Parsing: GTS Root R1
    > Parsing: GTS Root R2
    > Parsing: GTS Root R3
    > Parsing: GTS Root R4
    > Parsing: UCA Global G2 Root
    > Parsing: UCA Extended Validation Root
    > Parsing: Certigna Root CA
    > Done (135 CA certs processed, 16 skipped).
    ```

    Use the diff to update the message below, and commit `src/node_root_certs.h`:

    ```text
    crypto: update root certificates

    Update the list of root certificates in src/node_root_certs.h with
    tools/mk-ca-bundle.pl.

    Certificates added:
    - GlobalSign Root CA - R6
    - OISTE WISeKey Global Root GC CA
    - GTS Root R1
    - GTS Root R2
    - GTS Root R3
    - GTS Root R4
    - UCA Global G2 Root
    - UCA Extended Validation Root
    - Certigna Root CA

    Certificates removed:
    - Visa eCommerce Root
    - TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H5
    - Certplus Root CA G1
    - Certplus Root CA G2
    - OpenTrust Root CA G1
    - OpenTrust Root CA G2
    - OpenTrust Root CA G3
    ```

[NSS release schedule]: https://wiki.mozilla.org/NSS:Release_Versions
[tag list]: https://hg.mozilla.org/projects/nss/tags