【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

相关文章

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

SQL 中多表查询的常见连接方式详解

《SQL中多表查询的常见连接方式详解》本文介绍SQL中多表查询的常见连接方式,包括内连接(INNERJOIN)、左连接(LEFTJOIN)、右连接(RIGHTJOIN)、全外连接(FULLOUTER... 目录一、连接类型图表(ASCII 形式)二、前置代码(创建示例表)三、连接方式代码示例1. 内连接(I

Python安装时常见报错以及解决方案

《Python安装时常见报错以及解决方案》:本文主要介绍在安装Python、配置环境变量、使用pip以及运行Python脚本时常见的错误及其解决方案,文中介绍的非常详细,需要的朋友可以参考下... 目录一、安装 python 时常见报错及解决方案(一)安装包下载失败(二)权限不足二、配置环境变量时常见报错及

Java数字转换工具类NumberUtil的使用

《Java数字转换工具类NumberUtil的使用》NumberUtil是一个功能强大的Java工具类,用于处理数字的各种操作,包括数值运算、格式化、随机数生成和数值判断,下面就来介绍一下Number... 目录一、NumberUtil类概述二、主要功能介绍1. 数值运算2. 格式化3. 数值判断4. 随机

使用C++将处理后的信号保存为PNG和TIFF格式

《使用C++将处理后的信号保存为PNG和TIFF格式》在信号处理领域,我们常常需要将处理结果以图像的形式保存下来,方便后续分析和展示,C++提供了多种库来处理图像数据,本文将介绍如何使用stb_ima... 目录1. PNG格式保存使用stb_imagephp_write库1.1 安装和包含库1.2 代码解

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

python实现简易SSL的项目实践

《python实现简易SSL的项目实践》本文主要介绍了python实现简易SSL的项目实践,包括CA.py、server.py和client.py三个模块,文中通过示例代码介绍的非常详细,对大家的学习... 目录运行环境运行前准备程序实现与流程说明运行截图代码CA.pyclient.pyserver.py参

Python实现视频转换为音频的方法详解

《Python实现视频转换为音频的方法详解》这篇文章主要为大家详细Python如何将视频转换为音频并将音频文件保存到特定文件夹下,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果5. 注意事项

使用Python实现图片和base64转换工具

《使用Python实现图片和base64转换工具》这篇文章主要为大家详细介绍了如何使用Python中的base64模块编写一个工具,可以实现图片和Base64编码之间的转换,感兴趣的小伙伴可以了解下... 简介使用python的base64模块来实现图片和Base64编码之间的转换。可以将图片转换为Bas

Go语言利用泛型封装常见的Map操作

《Go语言利用泛型封装常见的Map操作》Go语言在1.18版本中引入了泛型,这是Go语言发展的一个重要里程碑,它极大地增强了语言的表达能力和灵活性,本文将通过泛型实现封装常见的Map操作,感... 目录什么是泛型泛型解决了什么问题Go泛型基于泛型的常见Map操作代码合集总结什么是泛型泛型是一种编程范式,允