【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

相关文章

Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

《Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码》:本文主要介绍Java中日期时间转换的多种方法,包括将Date转换为LocalD... 目录一、Date转LocalDateTime二、Date转LocalDate三、LocalDateTim

C++ vector的常见用法超详细讲解

《C++vector的常见用法超详细讲解》:本文主要介绍C++vector的常见用法,包括C++中vector容器的定义、初始化方法、访问元素、常用函数及其时间复杂度,通过代码介绍的非常详细,... 目录1、vector的定义2、vector常用初始化方法1、使编程用花括号直接赋值2、使用圆括号赋值3、ve

Pytest多环境切换的常见方法介绍

《Pytest多环境切换的常见方法介绍》Pytest作为自动化测试的主力框架,如何实现本地、测试、预发、生产环境的灵活切换,本文总结了通过pytest框架实现自由环境切换的几种方法,大家可以根据需要进... 目录1.pytest-base-url2.hooks函数3.yml和fixture结论你是否也遇到过

Python实现AVIF图片与其他图片格式间的批量转换

《Python实现AVIF图片与其他图片格式间的批量转换》这篇文章主要为大家详细介绍了如何使用Pillow库实现AVIF与其他格式的相互转换,即将AVIF转换为常见的格式,比如JPG或PNG,需要的小... 目录环境配置1.将单个 AVIF 图片转换为 JPG 和 PNG2.批量转换目录下所有 AVIF 图

详解如何通过Python批量转换图片为PDF

《详解如何通过Python批量转换图片为PDF》:本文主要介绍如何基于Python+Tkinter开发的图片批量转PDF工具,可以支持批量添加图片,拖拽等操作,感兴趣的小伙伴可以参考一下... 目录1. 概述2. 功能亮点2.1 主要功能2.2 界面设计3. 使用指南3.1 运行环境3.2 使用步骤4. 核

C/C++错误信息处理的常见方法及函数

《C/C++错误信息处理的常见方法及函数》C/C++是两种广泛使用的编程语言,特别是在系统编程、嵌入式开发以及高性能计算领域,:本文主要介绍C/C++错误信息处理的常见方法及函数,文中通过代码介绍... 目录前言1. errno 和 perror()示例:2. strerror()示例:3. perror(

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义