mik*_*ana 7 openssl csr pkcs#10 certreq
我注意到OpenSSL和certreq生成PKCS10 CSR的方式有细微的差别:
OpenSSL:
-----BEGIN CERTIFICATE REQUEST-----
Run Code Online (Sandbox Code Playgroud)微软certreq:
-----BEGIN NEW CERTIFICATE REQUEST-----
Run Code Online (Sandbox Code Playgroud)(以及相同的页脚,但END除外)
该PKCS10规范并没有对这些页眉/页脚的任何信息,所以我怀疑他们是不是规范的一部分。我希望能够处理尽可能多的CSR格式,因此:
CSR的“ BEGIN”标头有规范吗?
另外:是否存在其他形式的CSR标头?不是opensl或certreq的CSR生成工具使用什么?
CSR的“ BEGIN”标头有规范吗?
是的,但这取决于您遵循的标准。
正如@jariq指出的那样,RFC 7468就是其中之一。
但是它也很像xkcd:Standards。
我注意到OpenSSL在方式上有细微的差别...
OpenSSL可识别的PEM编码可在中找到<openssl dir>/crypto/pem/pem.h>。使用NEW显然是一种旧方法。
这是清单:
# define PEM_STRING_X509_OLD "X509 CERTIFICATE"
# define PEM_STRING_X509 "CERTIFICATE"
# define PEM_STRING_X509_PAIR "CERTIFICATE PAIR"
# define PEM_STRING_X509_TRUSTED "TRUSTED CERTIFICATE"
# define PEM_STRING_X509_REQ_OLD "NEW CERTIFICATE REQUEST"
# define PEM_STRING_X509_REQ "CERTIFICATE REQUEST"
# define PEM_STRING_X509_CRL "X509 CRL"
# define PEM_STRING_EVP_PKEY "ANY PRIVATE KEY"
# define PEM_STRING_PUBLIC "PUBLIC KEY"
# define PEM_STRING_RSA "RSA PRIVATE KEY"
# define PEM_STRING_RSA_PUBLIC "RSA PUBLIC KEY"
# define PEM_STRING_DSA "DSA PRIVATE KEY"
# define PEM_STRING_DSA_PUBLIC "DSA PUBLIC KEY"
# define PEM_STRING_PKCS7 "PKCS7"
# define PEM_STRING_PKCS7_SIGNED "PKCS #7 SIGNED DATA"
# define PEM_STRING_PKCS8 "ENCRYPTED PRIVATE KEY"
# define PEM_STRING_PKCS8INF "PRIVATE KEY"
# define PEM_STRING_DHPARAMS "DH PARAMETERS"
# define PEM_STRING_DHXPARAMS "X9.42 DH PARAMETERS"
# define PEM_STRING_SSL_SESSION "SSL SESSION PARAMETERS"
# define PEM_STRING_DSAPARAMS "DSA PARAMETERS"
# define PEM_STRING_ECDSA_PUBLIC "ECDSA PUBLIC KEY"
# define PEM_STRING_ECPARAMETERS "EC PARAMETERS"
# define PEM_STRING_ECPRIVATEKEY "EC PRIVATE KEY"
# define PEM_STRING_PARAMETERS "PARAMETERS"
# define PEM_STRING_CMS "CMS"
Run Code Online (Sandbox Code Playgroud)
快速的grep显示:
$ grep -R -B 3 PEM_STRING_X509_OLD *
...
--
crypto/pem/pem_lib.c-
crypto/pem/pem_lib.c- /* Permit older strings */
crypto/pem/pem_lib.c-
crypto/pem/pem_lib.c: if (!strcmp(nm, PEM_STRING_X509_OLD) && !strcmp(name, PEM_STRING_X509))
--
...
Run Code Online (Sandbox Code Playgroud)
我希望能够处理尽可能多的CSR格式
看起来“ NEW CERTIFICATE REQUEST”(旧样式)和“ CERTIFICATE REQUEST”(新样式)是两个获胜者。
曾经有人要求提供PEM标头和页脚的列表(它们被称为封装前和封装后方法或字符串IIRC)。IETF的PKIX工作组拒绝了它。请参阅PEM文件格式rfc草稿请求。