【203】SSL证书常见格式转换

2024-05-26 23:48
文章标签 常见 转换 格式 证书 ssl 203

本文主要是介绍【203】SSL证书常见格式转换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

4dc334e3addef01f8fb0fd2ff472b900.gif

内容目录(原文见公众号python宝)

一、常见证书格式二、SSL证书常见格式转换三、证书格式要求四、单双向认证
www.xmmup.com

一、常见证书格式

公钥解密,私钥加密

私钥签名,公钥验签

常见SSL证书主要的文件类型和协议有: PEM、DER、PFX、JKS、KDB、CER、KEY、CSR、CRT、CRL、OCSP、SCEP等。

.p12 二进制编码秘钥

.cer 二进制编码证书、公钥

签名前需要对信息哈希,一般用的是SHA1

SSL证书格式主要有公钥证书格式标准X.509中定义的PEM和DER、公钥密码标准PKCS中定义的PKCS#7和PKCS#12、Java环境专用的JKS。

PEM是基于Base64编码的证书格式,扩展名包括pem、crt和cer。Linux系统使用crt,Windows系统使用cer。PEM证书通常将根证书、中间证书和用户证书分开存放,主要用于Apache和Nginx。

            证书扩展名后缀是 .crt。

  • .crt是用于存放证书,它是2进制形式存放的。

  • Ngnix服务器和Apache服务器使用.crt格式的证书文件。

DER是基于二进制编码的证书格式,扩展名包括der、crt和cer。DER证书相当于PEM证书的二进制版本,主要用于Java平台。

PKCS#7是基于Base64编码的证书格式,扩展名包括p7b和p7c。PKCS#7证书通常将根证书和中间证书合并存放,将用户证书单独存放。PKCS#7证书不包含私钥,主要用于Tomcat和Windows Server。

PKCS#12是基于二进制编码的证书格式,扩展名包括pfx和p12。PKCS#12证书通常将根证书、中间证书、用户证书和私钥合并存放并设置密码,主要用于Windows Server。

JKS是是基于二进制编码的证书格式,扩展名是jks。JKS证书通常将根证书、中间证书、用户证书和私钥合并存放并设置密码,主要用于Java Web Server。

            证书扩展名后缀是 .PKCS12。

  • 同时包含证书和私钥,通常有密码保护,2进制方式。

  • IIS服务器使用PFX(即PKCS12或P12)格式的证书文件。

  • JKS格式:Tomcat服务器使用JKS格式的证书文件。

证书颁发机构CA签发的证书通常是PEM格式或PKCS#7格式,而PKCS#12格式和JKS格式的证书需要进行证书格式转换才能得到。我们可以通过OpenSSL、Keytool或在线证书转换工具等方式将PEM格式或PKCS#7格式的证书转换为我们需要的其他格式。

二、SSL证书常见格式转换

一、 OpenSSL 生成合成 PFX 文件

是将Apache/OpenSSL使用的“KEY文件 + CRT文件”转换为标准的PFX文件,可以将PFX文件格式导入到微软IIS 5/6/7、微软ISA、微软Exchange Server等软件。

openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt

(server.key是私钥文件 server.crt文件包含两段内容,请不要删除任何一段内容,生成的server.pfx用于导入IIS)

二 、openssl从PFX导出私钥、公钥

1、提取密钥对(如果pfx证书已加密,会提示输入密码。)

openssl pkcs12 -in server.pfx -nocerts -nodes -out 1.key

2、从密钥对提取私钥(一般apache和nginx配置需要)

openssl rsa -in 1.key -out 1_pri.key

3、从密钥对提取公钥

openssl rsa -in 1.key -pubout -out 1_pub.key

三、 openssl从PFX导出服务器证书

服务器客户端证书取得:

openssl pkcs12 -in server.pfx -clcerts -nokeys -out server.cer

四 、PFX格式证书转换为JKS格式证书

keytool -importkeystore -srckeystore domains_ssl.pfx -destkeystore domains.jks -srcstoretype PKCS12 -deststoretype JKS

五、将JKS转换成PFX

可以使用Keytool工具,将JKS格式转换为PFX格式。

keytool -importkeystore -srckeystore D:\server.jks -destkeystore D:\server.pfx -srcstoretype JKS -deststoretype PKCS12

六、将PEM/KEY/CRT转换为PFX

使用OpenSSL工具,可以将密钥文件KEY和公钥文件CRT转化为PFX文件。

将密钥文件KEY和公钥文件CRT放到OpenSSL目录下,打开OpenSSL执行以下命令:

openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt

七、将PFX转换为PEM/KEY/CRT

使用OpenSSL工具,可以将PFX文件转化为密钥文件KEY和公钥文件CRT。

将PFX文件放到OpenSSL目录下,打开OpenSSL执行以下命令:

openssl pkcs12 -in server.pfx -nodes -out server.pem

openssl rsa -in server.pem -out server.key 

七、crt格式转pem

openssl x509 -in www.x.com.crt -out www.x.com.pem openssl x509 -in mycert.crt -out mycert.pem -outform PEM openssl x509 -inform DER -in yourdownloaded.crt -out outcert.pem -textopenssl x509 -in mycert.crt -out mycert.pem -outform PE

我们可以直接把fullchain.pem重命名为“fullchain.crt
把privkey.pem重命名为privkey.key

三、证书格式要求

  1. root CA 机构颁发的证书:证书格式为 Linux 环境下 PEM 格式。样例如下:
    bd7272ce3bfb4b9823d70e0ac7c1bbf5.png
    证书规则为:

  • [——-BEGIN CERTIFICATE——-, ——-END CERTIFICATE——-] 开头和结尾;请将这些内容一并上传。

  • 每行64字符,最后一行不超过64字符。

中级机构颁发的证书链:
——-BEGIN CERTIFICATE——-
——-END CERTIFICATE——-
——-BEGIN CERTIFICATE——-
——-END CERTIFICATE——-
——-BEGIN CERTIFICATE——-
——-END CERTIFICATE——-

证书链规则为:

  • 证书之间不能有空行。

  • 每一份证书遵循上文的证书格式要求。

RSA 私钥格式要求

样例如下:
ff0f937afc306db455519a5d16877019.png
RSA 私钥可以包括所有私钥(RSA 和 DSA)、公钥(RSA 和 DSA)和 (x509) 证书。它存储用 Base64 编码的 DER 格式数据,用 ASCII 报头包围,因此适合系统之间的文本模式传输。

RSA 私钥规则:

  • [——-BEGIN RSA PRIVATE KEY——-, ——-END RSA PRIVATE KEY——-] 开头结尾,请将这些内容一并上传。

  • 每行64字符,最后一行长度可以不足64字符。

如果您不是按照上述方案生成 [——-BEGIN PRIVATE KEY——-, ——-END PRIVATE KEY——-] 这种格式的可用私钥,您可以按照如下方式转换成可用私钥:

openssl rsa -in old_server_key.pem -out new_server_key.pem

然后将 new_server_key.pem 的内容与证书一起上传。

证书转换为 PEM 格式说明

目前负载均衡只支持 PEM 格式的证书,其他格式的证书需要转换成 PEM 格式后才能上传到负载均衡中,建议通过 openssl 工具进行转换。下面是几种比较流行的证书格式转换为 PEM 格式的方法。

  • DER 转换为 PEM

DER 格式一般出现在 Java 平台中。
证书转换:

openssl x509 -inform der -in certificate.cer -out certificate.pem


私钥转换:

openssl rsa -inform DER -outform PEM -in privatekey.der -out privatekey.pem
  • P7B 转换为 PEM

P7B 格式一般出现在 Windows Server 和 tomcat 中。
证书转换:

openssl pkcs7 -print_certs -in incertificat.p7b -out outcertificate.cer

获取 outcertificat.cer 里面

[——-BEGIN CERTIFICATE——-, ——-END CERTIFICATE——-] 的内容作为证书上传。
私钥转换:私钥一般在 IIS 服务器里可导出。

  • PFX 转换为 PEM

PFX 格式一般出现在 Windows Server 中。
证书转换:

openssl pkcs12 -in certname.pfx -nokeys -out cert.pem

私钥转换:

openssl pkcs12 -in certname.pfx -nocerts -out key.pem -nodes
  • CER/CRT 转换为 PEM

对于 CER/CRT 格式的证书,您可通过直接修改证书文件扩展名的方式进行转换。例如,将 “servertest.crt” 证书文件直接重命名为 “servertest.pem” 即可。

可查看:https://cloud.tencent.com/document/product/214/6155

四、证书单双向认证

SSL 单向认证只需要验证服务端的身份,无需验证客户端的身份。SSL 单向认证的流程如下图所示。

c7c4c10f88761b423b139994e472229d.png

  1. 客户端发起 HTTPS 建立连接请求,将客户端支持的 SSL 协议版本号、加密算法种类、生成的随机数等信息发送给服务端。

  2. 服务端向客户端返回 SSL 协议版本号、加密算法种类、生成的随机数等信息,以及服务端的证书(server.crt)。

  3. 客户端验证证书(server.crt)是否合法,并从此证书中获取服务端的公钥:

  • 检查证书是否过期。

  • 检查证书是否已经被吊销。

  • 检查证书是否可信。

  • 检查收到的证书中的域名与请求的域名是否一致。

证书验证通过后,客户端生成一个随机数(密钥 K),作为通信过程中对称加密的密钥,并用服务端证书的公钥进行加密,然后发送给服务端。

服务端收到客户端发送的加密信息后,使用私钥(server.key)进行解密,获取对称加密密钥(密钥 K)。
在接下来的会话中,客户端和服务端将会使用该对称加密密钥(密钥 K)进行通信,保证通信过程中信息的安全。

SSL 双向认证

SSL 双向认证需要验证客户端和服务端的身份。SSL 双向认证的流程如下图所示。
3bbea058e42c7c5c70d85b352598a32c.png

  1. 客户端发起 HTTPS 建立连接请求,将客户端支持的 SSL 协议版本号、加密算法种类、生成的随机数等信息发送给服务端。

  2. 服务端向客户端返回 SSL 协议版本号、加密算法种类、生成的随机数等信息,以及服务端的证书(server.crt)。

  3. 客户端验证证书(server.crt)是否合法,并从此证书中获取服务端的公钥:

  • 检查证书是否过期。

  • 检查证书是否已经被吊销。

  • 检查证书是否可信。

  • 检查收到的证书中的域名与请求的域名是否一致。

服务端要求客户端发送客户端的证书(client.crt),客户端将自己的证书发送至服务端。

服务端验证客户端的证书(client.crt),验证通过后,服务端使用根证书(root.crt)解密客户端证书,然后获取客户端的公钥。

客户端向服务端发送自己所支持的对称加密方案。

服务端从客户端发送过来的对称加密方案中,选择加密程度最高的加密方式,并使用客户端公钥加密后,返回给客户端。

客户端使用客户端的私钥(client.key)解密加密方案,并生成一个随机数(密钥 K),作为通信过程中对称加密的密钥,然后使用服务端证书的公钥进行加密后再发送给服务端。

服务端收到客户端发送的加密信息后,使用服务端的私钥(server.key)进行解密,获取对称加密密钥(密钥 K)。
在接下来的会话中,客户端和服务端将会使用该对称加密密钥(密钥 K)进行通信,保证通信过程中信息的安全。

0fa928b6fd360b14f8046a644a96df71.png

About Me:小麦粒

● 本文作者:小麦粒,专注于python、数据分析、数据挖掘、机器学习相关技术,也注重技术的运用

● 作者博客地址:https://blog.csdn.net/u010986753

● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

● 个人微信号:pythonbao 联系我加微信群

●个人 QQ:87605025

● QQ交流群pythonbao :483766429

● 公众号:python宝 或 DB宝

● 提供OCP、OCM和高可用最实用的技能培训

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

6b7b5c92a484b108710c7362f6ee02d0.gif

欢迎赞赏哦!有您的支持,小麦粒一定会越来越好!

这篇关于【203】SSL证书常见格式转换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1005935

相关文章

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同

easyui同时验证账户格式和ajax是否存在

accountName: {validator: function (value, param) {if (!/^[a-zA-Z][a-zA-Z0-9_]{3,15}$/i.test(value)) {$.fn.validatebox.defaults.rules.accountName.message = '账户名称不合法(字母开头,允许4-16字节,允许字母数字下划线)';return fal

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法   消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法 [转载]原地址:http://blog.csdn.net/x605940745/article/details/17911115 消除SDK更新时的“

Jenkins 插件 地址证书报错问题解决思路

问题提示摘要: SunCertPathBuilderException: unable to find valid certification path to requested target...... 网上很多的解决方式是更新站点的地址,我这里修改了一个日本的地址(清华镜像也好),其实发现是解决不了上述的报错问题的,其实,最终拉去插件的时候,会提示证书的问题,几经周折找到了其中一遍博文

JVM 常见异常及内存诊断

栈内存溢出 栈内存大小设置:-Xss size 默认除了window以外的所有操作系统默认情况大小为 1MB,window 的默认大小依赖于虚拟机内存。 栈帧过多导致栈内存溢出 下述示例代码,由于递归深度没有限制且没有设置出口,每次方法的调用都会产生一个栈帧导致了创建的栈帧过多,而导致内存溢出(StackOverflowError)。 示例代码: 运行结果: 栈帧过大导致栈内存

PDF 软件如何帮助您编辑、转换和保护文件。

如何找到最好的 PDF 编辑器。 无论您是在为您的企业寻找更高效的 PDF 解决方案,还是尝试组织和编辑主文档,PDF 编辑器都可以在一个地方提供您需要的所有工具。市面上有很多 PDF 编辑器 — 在决定哪个最适合您时,请考虑这些因素。 1. 确定您的 PDF 文档软件需求。 不同的 PDF 文档软件程序可以具有不同的功能,因此在决定哪个是最适合您的 PDF 软件之前,请花点时间评估您的

C# double[] 和Matlab数组MWArray[]转换

C# double[] 转换成MWArray[], 直接赋值就行             MWNumericArray[] ma = new MWNumericArray[4];             double[] dT = new double[] { 0 };             double[] dT1 = new double[] { 0,2 };

Android逆向(反调,脱壳,过ssl证书脚本)

文章目录 总结 基础Android基础工具 定位关键代码页面activity定位数据包参数定位堆栈追踪 编写反调脱壳好用的脚本过ssl证书校验抓包反调的脚本打印堆栈bilibili反调的脚本 总结 暑假做了两个月的Android逆向,记录一下自己学到的东西。对于app渗透有了一些思路。 这两个月主要做的是代码分析,对于分析完后的持久化等没有学习。主要是如何反编译源码,如何找到

模拟实现vector中的常见接口

insert void insert(iterator pos, const T& x){if (_finish == _endofstorage){int n = pos - _start;size_t newcapacity = capacity() == 0 ? 2 : capacity() * 2;reserve(newcapacity);pos = _start + n;//防止迭代

[数据集][目标检测]血细胞检测数据集VOC+YOLO格式2757张4类别

数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2757 标注数量(xml文件个数):2757 标注数量(txt文件个数):2757 标注类别数:4 标注类别名称:["Platelets","RBC","WBC","sickle cell"] 每个类别标注的框数: