openssl - 是否有 CSR 'BEGIN' header 的规范?

标签 openssl csr pkcs#10 certreq

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

  • OpenSSL:

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

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

(以及具有相同内容的页脚,除了 END)

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

CSR“BEGIN” header 有规范吗?

另外:是否存在其他形式的 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 页眉和页脚的列表(它们称为封装前和封装后方法或字符串,IIRC)。 IETF 的 PKIX 工作组拒绝了这一请求。请参阅PEM file format rfc draft request .

关于openssl - 是否有 CSR 'BEGIN' header 的规范?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28628744/

相关文章:

android - Twilio Android SDK OpenSSL 漏洞

ubuntu - OpenSSL SSL_ERROR_SYSCALL 连接到 raw.githubusercontent.com :443

go - 从客户端获取 TLS 信息

x509 - 如何通过命令行将 CSR 回复导入回我的 key 对?

ios - Swift - 带有所有权证明的证书请求

java - 如何在 Android 上使用 KeyStore 创建证书签名请求?

r - 使用 SSL/TLS 启动 Rserve 实例?

ios - CSR 请求钥匙串(keychain) iOS 分发证书

java - sun.security.x509.CertAndKeyGen 和 sun.security.pkcs.PKCS10 - 在 JDK8 中缺失。实现建议

openssl - 使用 OpenSSL 创建 .pfx 文件