Security 指定的PEM文件格式在哪里?
我需要解析.PEM文件。Security 指定的PEM文件格式在哪里?,security,openssl,cryptography,certificate,Security,Openssl,Cryptography,Certificate,我需要解析.PEM文件。 我知道RFCs 1421-24中定义了“增强隐私的电子邮件”的标准。但他们似乎没有提到我在OpenSSL.pem文件中找到的一些文本(如“密钥属性”、“开始证书”等) 这是一种特定于OpenSSL的格式吗?我不确定它是否特定于OpenSSL,但它的文档可能是您正在寻找的内容。让您开始吧:据我所知,如果有一个部分是人类可读的(有文字和其他内容),这意味着人类操作员可以知道有问题的证书是什么,有效期等,用于快速手动验证。所以你可以忽略这一点 您将需要解析开始和结束块之间的内
我知道RFCs 1421-24中定义了“增强隐私的电子邮件”的标准。但他们似乎没有提到我在OpenSSL.pem文件中找到的一些文本(如“密钥属性”、“开始证书”等)
这是一种特定于OpenSSL的格式吗?我不确定它是否特定于OpenSSL,但它的文档可能是您正在寻找的内容。让您开始吧:据我所知,如果有一个部分是人类可读的(有文字和其他内容),这意味着人类操作员可以知道有问题的证书是什么,有效期等,用于快速手动验证。所以你可以忽略这一点 您将需要解析开始和结束块之间的内容 在里面,您将找到一个Base64编码的实体,需要将其解码为字节。这些字节表示DER编码的证书/密钥等。我不确定您可以使用哪些好的库来解析DER数据 作为了解每个块内数据的测试,您可以将开始和结束块之间的数据粘贴到此网站,该网站使用JavaScript进行ASN.1解码: 尽管我不会将任何生产环境私钥粘贴到任何站点(尽管这似乎只是一个javascript) Base64: 德:
ASN.1:很长一段时间以来,PEM格式没有关于信息加密交换的正式规范。PEM是文本编码,但实际编码的内容取决于上下文。2015年4月,IETF批准了该协议,最终记录了各种实现如何使用PEM文本编码交换数据。以下列表直接取自RFC,描述了用于以下场景的PEM格式:
- 证书
- X509 CRL
- 证书请求
- PKCS7
- CMS
- 私钥
- 加密私钥
- 属性证书
- 公钥
# define PEM_STRING_X509_OLD "X509 CERTIFICATE"
# define PEM_STRING_X509 "CERTIFICATE"
# 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"
例如,OpenSSL在中定义了这些开始和结束标记。下面是头文件的摘录,其中包含了头文件支持的所有开始和结束标签
# define PEM_STRING_X509_OLD "X509 CERTIFICATE"
# define PEM_STRING_X509 "CERTIFICATE"
# 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"
这些标签只是一个开始,但是您仍然需要研究实现如何在标签之间对数据进行编码。没有一个对所有问题都正确的答案。我找到了一个关于这个问题的答案。封装边界似乎没有“官方”标准格式,确定这一点的最佳方法是根据BEGIN
语句中的已知关键字猜测内容
如indiv所回答的,有关关键字的完整列表,请参阅OpenSSL crypto/pem/pem.h头文件
指定的PEM文件格式在哪里
没有一个地方。这取决于标准。您甚至可以创建自己的封装边界,并在自己的软件中使用它们
正如@indiv所述,OpenSSL在/crypto/pem/pem.h
上有一个相当全面的列表
有人要求PKIX工作组提供一份清单,就像你在2006年要求的那样。工作组拒绝了。请参阅。2015年更新答案:由于用户已经回答了两次,在主持人@royhowie删除答案之前:现在有了。下面的引用只是一小部分,您应该阅读实际的规范,它在互联网上的停留时间可能比StackOverflow长得多 但是@royhowie会删除所有指向RFC的“仅链接”答案,除非它有一些文本。下面是一些文字: 7。PKCS#10认证请求语法的文本编码 PKCS#10认证请求使用 “证书申请”标签。编码的数据必须是( 强烈推荐;参见)编码ASN.1 如[]所述的CertificationRequest结构 图9:PKCS#10示例 “新证书申请”标签也被广泛使用。发电机 符合本文件要求必须生成“证书申请” 标签。解析器可以将“新证书请求”等同于 “证书申请”
谢谢,但我正在寻找关于正在使用的其他BEGIN-END语句的更全面的信息,如“BEGIN证书”和“BEGIN私钥”。仅供参考,链接已关闭。我可能稍微误解了问题的重点:)谢谢您的回答。那很好。这些信息对任何正在寻找的人都很有用