【问题标题】:Is there a spec for CSR 'BEGIN' headers?是否有 CSR 'BEGIN' 标头的规范?
【发布时间】:2015-04-22 02:50:02
【问题描述】:

我注意到 OpenSSL 和 certreq 生成 PKCS10 CSR 的方式存在细微差别:

  • OpenSSL:

      -----BEGIN CERTIFICATE REQUEST-----
    
  • 微软certreq:

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

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

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

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

另外:是否存在其他形式的 CSR 标头?非 openssl 或 certreq 的 CSR 生成工具使用什么?

【问题讨论】:

标签: openssl csr pkcs#10 certreq


【解决方案1】:

【讨论】:

  • 由于您最初发布了此内容,并且已被过度热切的版主删除,我请求将其恢复,这似乎已经成功。我已经删除了我自己的答案,因为你应该得到这里的积分和功劳。
  • 以上链接如何回答问题?有什么有用的摘录吗?
  • Section 7,我相信。 RFC 文档并没有真正改变,所以我猜链接它们通常是安全的。
【解决方案2】:

是否有针对 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"

快速 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 格式

看起来“NEW CERTIFICATE REQUEST”(旧式)和“CERTIFICATE REQUEST”(新式)是两个获胜者。


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

【讨论】:

    猜你喜欢
    • 2011-05-19
    • 2020-10-14
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多