我正在尝试使用以下 openssl 语句生成过去几个小时的 CSR:
openssl req -new \
-sha256 \
-subj "/C=YY/ST=Anywhere/L=downtown/O=test/OU=Test Inc./CN=test.io" \
-addext "subjectKeyIdentifier = hash" \
-addext "authorityKeyIdentifier = keyid,issuer" \
-addext "basicConstraints = critical, CA:true" \
-addext "keyUsage = critical, digitalSignature, cRLSign, keyCertSign" \
-key key.pem \
-out csr.pem
不幸的是,它抱怨:
Error Loading command line extensions
8686967616:error:22FFF079:X509 V3 routines:func(4095):reason(121):/AppleInternal/Library/BuildRoots/97f6331a-ba75-11ed-a4bc-863efbbaf80d/Library/Caches/com.apple.xbs/Sources/libressl/libressl-3.3/crypto/x509/x509_akey.c:184:
8686967616:error:22FFF080:X509 V3 routines:func(4095):reason(128):/AppleInternal/Library/BuildRoots/97f6331a-ba75-11ed-a4bc-863efbbaf80d/Library/Caches/com.apple.xbs/Sources/libressl/libressl-3.3/crypto/x509/x509_conf.c:100:name=authorityKeyIdentifier, value=keyid,issuer
我究竟做错了什么?
答案1
指定issuer
要求 OpenSSL 从颁发证书复制 DN...并且没有颁发证书然而如果您只是生成 CSR – 它只会在将来的某个时候才会被知道,当 CSR 被交给 CA 进行签名时。
如果你正在创建根 CA,那么生成 CSR 根本没有意义(没有其他 CA 可以将其提供给);你想使用-x509
直接输出自签名证书的选项。
同时,如果您要创建下属 CA(中间 CA),则只需跳过扩展名。通常,CA 本身会根据其配置文件决定添加哪些扩展名,并且无论如何都会忽略来自您的 CSR 的大多数扩展名。
(此外,大多数 CA 不会将颁发者目录名称放入 authorityKeyIdentifier 中,因为没有全局目录可以查找 DN;只需将其设置为 就足够了keyid:always
。)