新闻详情

新闻详情

首页 / 资讯中心 / 详情

【2018-06-24】使用openssl实现私钥和证书的转换

发布时间:2026/9/30 8:59:39来源:尧图网络
【2018-06-24】使用openssl实现私钥和证书的转换
[历史归档]本文原发布于 cstriker1407.info 个人博客内容为历史存档仅供参考。发布时间2018-06-24 标题使用openssl实现私钥和证书的转换分类编程 标签tlsOpenSSL证书格式转换简单笔记参考链接《 http://blog.52sox.com/use-openssl-for-key-and-certificate-conversion/ 》二进制的DER证书,包含X.509证书为原始格式,使用DER ASN.1编码。ASCII的PEM证书,包含1个base64编码的DER证书,以-----BEGIN CERTIFICATE-----开头而以-----END CERTIFICATE-----结束。PKCS#7证书,1个复杂格式的设计用于传输签名或加密数据,定义在RFC 2315中。通常以.p7b和.p7c作为后缀且可以包含整个证书链。这种格式被Java的keytool工具支持。PKCS#12(PFX)的证书和私钥,1个复杂的格式它可以存储和保护1个服务器的私钥并和1个完整的证书链一起。它通常以.p12和.pfx为后缀。这种格式常用于微软的产品,不过也可以用于客户端证书。然后是对应的私钥的格式:**二进制的DER私钥,包含1个私钥以原始形式,使用DER ASN.1编码。**OpenSSL以它传统的SSLeay格式创建私钥,不过也可以使用另外1种称为PKCS#8,但不广泛使用的格式(定义在RFC 5208)。在OpenSSL中可以使用pkcs8命令来进行PKCS#8格式的处理操作。ASCII格式的私钥,包含1个base64编码的DER私钥,有些时候有一些额外的元信息,例如密码保护采用的算法。PEM和DER转换PEM和DER格式证书的转换可以通过OpenSSL提供的x509工具来完成。下面我们转换1个DER格式的证书为PEM:skysky-pc:~$ openssl x509 -inform DER -in private_key.der -outform PEM -out private_key.pem在这里,我们通过-inform参数指定输入的格式为DER,通过-in参数指定输入的文件名称,而后对应的-outform和-out用于指定输出的格式及文件名称。同样的,我们也可以将PEM格式的整数转换为DER格式:skysky-pc:~$ openssl x509 -inform PEM -in private_key.pem -outform DER -out private_key.der下面我们来看下如何从PKCS#12格式中提取出私钥和证书。PKCS#12转换我们可以使用OpenSSL提供的pkcs12命令来实现PKCS#12格式的操作,首先我们将证书和私钥导出为PEM格式:skysky-pc:~$ openssl pkcs12 -in key.p12 -out key.pem -nodesEnter Import Password:MAC verified OK在这里,我们通过-in参数指定传入的文件名称,而-out文件指定输出的文件名称,而-nodes参数表示不对私钥进行加密。在这个过程中,我们需要输入签名时的密码。如果我们不添加-nodes参数,将是如下的结果:skysky-pc:~$ openssl pkcs12 -in key.p12 -out key.pemEnter Import Password:MAC verified OKEnter PEM pass phrase:Verifying - Enter PEM pass phrase:可以看到,验证签名成功后还需要我们重新输入新的加密口令。而在导出的文件中可以看到此时文件的内容为:…-----BEGIN ENCRYPTED PRIVATE KEY-----MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIPdUUocbjDXUCAggA…-----END ENCRYPTED PRIVATE KEY-----而添加-nodes后的结果为:…-----BEGIN PRIVATE KEY-----MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCQDKKakQ0fcvH…-----END PRIVATE KEY-----之后,我们就可以使用编辑器打开输出的key.pem文件,手动的拆分它们为独立的私钥、证书和中间证书文件。作为程序猿,一般人都是懒惰的,这个繁琐的操作能不能简便些呢,让机器自己去完成呢?其实是可以做到的,在OpenSSL中提供这样的操作,我们先来看看不导出证书的操作,这样我们就可以得到私钥了:skysky-pc:~$ openssl pkcs12 -in key.p12 -nocerts -out private_key.pem -nodesEnter Import Password:MAC verified OK可以看到,在这里我们多添加了1个-nocerts的参数就做到了不导出证书的操作。那么不导出私钥的操作应该如下:skysky-pc:~$ openssl pkcs12 -in key.p12 -nokeys -out cert.pem -nodesEnter Import Password:MAC verified OK接下来,我们该如何将PEM格式的证书和私钥导出为PKCS#12格式呢,我们可以这样来操作:skysky-pc:~$ openssl pkcs12 -name “My Certificate” -export -out fd.p12 -inkey key.pem -in cert.pem -certfile fd-chain.crtEnter Export Password:Verifying - Enter Export Password:其中,-name选项指定了证书中的friendlyName,而-certfile指定信任链的文件名称。最后,我们还可以通过-clcerts和-cacerts选项指定是否只导出客户端及CA证书。PKCS#7转换为了转换PEM为PKCS#7,我们可以使用crl2pkcs7命令。skysky-pc:~$ openssl crl2pkcs7 -nocrl -out key.p7b -certfile cert.pem -certfile fd-chain.crt那么,生成的文件头部将以-----BEGIN PKCS7-----开始。最后,为了转换PKCS#7为PEM,我们可以使用pkcs7命令:skysky-pc:~$ openssl pkcs7 -in key.p7b -print_certs -out key1.pem在这里,我们使用-print_certs参数将输入的证书输出。PKCS#8与SSLeay转换如果我们想将PKCS#8格式的私钥转换为SSLeay格式,我们可以这样来操作:skysky-pc:~$ openssl rsa -in key.pem -out ssleay.pemwriting RSA key而此时文件的内容将如下所示:-----BEGIN RSA PRIVATE KEY-----MIIEpQIBAAKCAQEAvkAyimpENH3Lx4d8VH96XCYfKfCZ7qVtNuVseAvkSTC0q5dw…-----END RSA PRIVATE KEY-----可以看到头部和尾部多追加了RSA的字样。而如果要将传统的SSLeay私钥转换为PKCS#格式,我们需要使用pkcs8命令:skysky-pc:~$ openssl pkcs8 -topk8 -in ssleay.pem -out pkcs8_key.pemEnter Encryption Password:Verifying - Enter Encryption Password:默认情况下,会为该格式进行1个加密的处理,但是我们可以通过-nocrypt参数让其不进行加密处理:skysky-pc:~$ openssl pkcs8 -topk8 -nocrypt -in ssleay.pem -out pkcs8_key.pem可以我们便实现了将传统的SSLeay格式转换为PKCS#8格式了。APNs中证书的生成下面我们来生成APNs推送时需要的证书。skysky-pc:~$ openssl pkcs12 -in cer.p12 -clcerts -nokeys -out cert.pem -nodesEnter Import Password:MAC verified OKskysky-pc:~$ openssl pkcs12 -in cer.p12 -nocerts -out key.pem -nodesEnter Import Password:MAC verified OKskysky-pc:~$ cat cert.pem key.pem certs.pem我们先只导出客户端的证书,然后是私钥,最后我们将2个文件的内容合并在1个文件中即可。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【三个月 AI Agent 实战学习】Day 23 详细展开:LangChain 的 Tool 定义 —— 让模型看懂你的函数 2026/9/30 9:51:41

【三个月 AI Agent 实战学习】Day 23 详细展开:LangChain 的 Tool 定义 —— 让模型看懂你的函数

Day 23 详细展开:LangChain 的 Tool 定义 —— 让模型看懂你的函数 欢迎来到第二十三天!昨天我们从理论层面深入理解了 ReAct 范式,今天开始进入 LangChain 的 Agent 实战。在构建 Agent 时,工具(Tool) 是模…

阅读更多 →
Unity异步加载原理深度解析:破除三大幻觉与四把手术刀 2026/9/30 9:51:31

Unity异步加载原理深度解析:破除三大幻觉与四把手术刀

1. 这不是“加个await”就完事的性能课:为什么Unity里异步加载必须从原理开始重学你有没有遇到过这样的场景:游戏刚进主城,UI卡顿半秒,角色模型突然“弹”出来,技能特效延迟半拍才亮起;打包后AB包体积暴涨&…

阅读更多 →
WeKnora:打通飞书、Notion、语雀的多源RAG基础设施 2026/9/30 9:51:31

WeKnora:打通飞书、Notion、语雀的多源RAG基础设施

1. 项目概述:为什么“文档散在飞书 Notion 语雀”成了RAG落地的第一道坎?你有没有过这种体验:团队用飞书写会议纪要、用Notion搭产品原型文档、用语雀存技术规范,三套系统里各有一份“用户权限管理流程”,但版本不一致…

阅读更多 →
彩虹瓶:工业视觉色彩校准的物理基准与ISO 15739-2.1实践 2026/9/30 9:51:31

彩虹瓶:工业视觉色彩校准的物理基准与ISO 15739-2.1实践

1. “彩虹瓶”不是网红摆拍道具,而是工程级色彩校准验证系统 你刷到过那种短视频吗?一个透明玻璃瓶里,从底到顶分层堆叠着红橙黄绿青蓝紫七种颜色的液体,像打翻的调色盘被施了定格魔法——评论区清一色问“怎么做的”,…

阅读更多 →
buzz游戏全攻略:从聚会暖场到程序员面试的经典数字玩法 2026/9/30 9:51:23

buzz游戏全攻略:从聚会暖场到程序员面试的经典数字玩法

最近“buzz”这个词的出镜率高得有点反常,热搜里挂着,短视频评论区也在刷,不少朋友私信问我是不是什么新出的黑话。说实话,我第一次看到这阵仗也有点懵,但点进去之后发现,这不就是那个从读书时候一直玩到现…

阅读更多 →
目标检测模型结构化剪枝实战:从稀疏化训练到微调恢复 2026/9/30 9:51:22

目标检测模型结构化剪枝实战:从稀疏化训练到微调恢复

说剪枝,检测模型的压缩,我心里一直觉得是比分类网络压缩更“坑”的一件事。分类网络剪枝,通道掉了精度掉了,还能靠微调慢慢拉回来,但检测模型不一样,它一个分支是RPN(区域提议网络)和…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉