是否有 CSR 'BEGIN' headers 的规范?
Is there a spec for CSR 'BEGIN' headers?
我注意到 OpenSSL 和 certreq 生成 PKCS10 CSR 的方式存在细微差别:
OpenSSL:
-----BEGIN CERTIFICATE REQUEST-----
微软certreq
:
-----BEGIN NEW CERTIFICATE REQUEST-----
(和页脚一样,除了END)
PKCS10 spec 没有关于这些 header 的任何信息/页脚,所以我怀疑它们不是规范的一部分。我希望能够处理尽可能多的 CSR 格式,所以:
是否有 CSR 'BEGIN' headers 的规范?
另外:是否存在其他形式的 CSR header? 非 openssl 或 certreq 的 CSR 生成工具使用什么?
Is there a spec for CSRs 'BEGIN' headers?
是的,但这取决于您遵循的标准。
正如@jariq 指出的那样,RFC 7468 就是其中之一。
但它也很像 xkcd: Standards。
I've noticed a subtle difference in how 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"
快速 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))
--
...
I would like to be able to handle as many formats of CSRs as possible
看起来"NEW CERTIFICATE REQUEST"(旧式)和"CERTIFICATE REQUEST"(新式)是两个获胜者。
有人曾经要求提供 PEM 页眉和页脚列表(它们被称为预封装方法和 post- 封装方法或字符串,IIRC)。 IETF 的 PKIX 工作组拒绝了它。参见 PEM file format rfc draft request。
我注意到 OpenSSL 和 certreq 生成 PKCS10 CSR 的方式存在细微差别:
OpenSSL:
-----BEGIN CERTIFICATE REQUEST-----
微软
certreq
:-----BEGIN NEW CERTIFICATE REQUEST-----
(和页脚一样,除了END)
PKCS10 spec 没有关于这些 header 的任何信息/页脚,所以我怀疑它们不是规范的一部分。我希望能够处理尽可能多的 CSR 格式,所以:
是否有 CSR 'BEGIN' headers 的规范?
另外:是否存在其他形式的 CSR header? 非 openssl 或 certreq 的 CSR 生成工具使用什么?
Is there a spec for CSRs 'BEGIN' headers?
是的,但这取决于您遵循的标准。
正如@jariq 指出的那样,RFC 7468 就是其中之一。
但它也很像 xkcd: Standards。
I've noticed a subtle difference in how 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"
快速 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))
--
...
I would like to be able to handle as many formats of CSRs as possible
看起来"NEW CERTIFICATE REQUEST"(旧式)和"CERTIFICATE REQUEST"(新式)是两个获胜者。
有人曾经要求提供 PEM 页眉和页脚列表(它们被称为预封装方法和 post- 封装方法或字符串,IIRC)。 IETF 的 PKIX 工作组拒绝了它。参见 PEM file format rfc draft request。