CSR' BEGIN'是否有规范?头?

时间:2015-02-20 12:13:39

标签: openssl csr pkcs#10 certreq

我注意到OpenSSL和certreq如何生成PKCS10 CSR的细微差别:

OpenSSL的:

-----BEGIN CERTIFICATE REQUEST-----

CERTREQ

-----BEGIN NEW CERTIFICATE REQUEST-----

(和一个相同的页脚,除了END)

PKCS10 spec没有关于这些页眉/页脚的任何信息,因此我怀疑它们不属于规范。我希望能够处理尽可能多的CSR格式,所以:

是否有针对CSR的规范' BEGIN'标题?

另外:是否存在其他形式的CSR标题?那些没有开放或使用certreq的CSR生成工具是什么?

2 个答案:

答案 0 :(得分:4)

  

是否有针对CSR的规范' BEGIN'标题?

是的,但这取决于您遵循的标准。

正如@jariq指出的那样,RFC 7468就是其中之一。

但它也很像xkcd: Standards


  

我注意到OpenSSL的细微差别......

可以在<openssl dir>/crypto/pem/pem.h>中找到PEM编码OpenSSL识别。使用 显然是一种古老的做法。

以下是清单:

# 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))
--
...

  

我希望能够处理尽可能多的CSR格式

看起来像#34;新证书请求&#34; (旧式)和&#34; CERTIFICATE REQUEST&#34; (新风格)是两位获奖者。


曾经有人要求提供PEM页眉和页脚的列表(它们被称为封装前和封装后的方法或字符串,IIRC)。 IETF的PKIX工作组拒绝了它。请参阅PEM file format rfc draft request

答案 1 :(得分:2)