为什么签署证书需要“-CAcreateserial”参数?

V.7*_*V.7 3 openssl ssl-certificate

例如,

openssl x509 \
    -req -sha256 \
    -days "365" \
    -CAcreateserial \
    -CA "ca.crt" -CAkey "ca.key" -passin "pass:abcd" \
    -in "csr.csr" -extfile "ext.ext" \
    -out "c.crt"`
Run Code Online (Sandbox Code Playgroud)

它还创建一个ca.srl包含签名证书序列号的文件。

如果-CAcreateserial参数不存在并输出错误,则上述方法将不起作用:

/test/ca.srl: No such file or directory
140413509251520:error:06067099:digital envelope routines:EVP_PKEY_copy_parameters:different parameters:../crypto/evp/p_lib.c:93:
140413509251520:error:02001002:system library:fopen:No such file or directory:../crypto/bio/bss_file.c:72:fopen('/test/ca.srl','r')
140413509251520:error:2006D080:BIO routines:BIO_new_file:no such file:../crypto/bio/bss_file.c:79:
Run Code Online (Sandbox Code Playgroud)

该参数不是用于输出带有序列号的文件,无论如何都可以通过下面的命令获得该文件吗?

/test/ca.srl: No such file or directory
140413509251520:error:06067099:digital envelope routines:EVP_PKEY_copy_parameters:different parameters:../crypto/evp/p_lib.c:93:
140413509251520:error:02001002:system library:fopen:No such file or directory:../crypto/bio/bss_file.c:72:fopen('/test/ca.srl','r')
140413509251520:error:2006D080:BIO routines:BIO_new_file:no such file:../crypto/bio/bss_file.c:79:
Run Code Online (Sandbox Code Playgroud)

那有什么意义呢?如果需要,为什么不在内部创建文件,而是将其保存在存储中?

Cro*_*man 6

-serial第二个命令的选项仅输出现有证书的序列号。但是,当您签署证书时,CA 需要为每个证书生成一个唯一的序列号,在此之前,还没有序列号可供-serial输出。

由于每个证书的序列号对于每个颁发者都需要是唯一的,因此颁发者需要跟踪它以前使用过哪些序列号,以确保它不会重复使用任何序列号。OpenSSL 为您提供了一种使用序列号文件进行跟踪的简单方法。当您指定 时-CAcreateserial,它会将序列号分配给01签名证书,然后创建此序列号文件,其中包含下一个序列号 ( 02)。在将来的签名操作中,您应该使用-CAserial该文件的名称,而不是-CAcreateserial,并且 OpenSSL 将为每个签名的证书增加该文件中的值。这样,你可以用一个颁发者证书签署一堆证书,并且它们的所有序列号都是唯一的。

如果您使用多个颁发者证书,则可以为每个证书使用单独的序列号文件。

请注意,虽然这种方法有效,但它不适合生产使用,因为使用严格按顺序增加的证书序列号存在一些问题

  • 可能值得注意的是,如果串行文件存在,则忽略“-CAcreateserial”。 (6认同)
  • @F8ER:如果您每秒生成 1,000,000,000 个证书,并且在大爆炸时开始生成它们,那么现在您将拥有大约 2^88 个证书。您引用的数字是 2^160 - 1。如果您从 1 开始,则不必担心这样的数字溢出。 (2认同)