2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 【203】SSL证书常见格式转换

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

时间:2019-05-29 04:00:08

相关推荐

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

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

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

一、常见证书格式

公钥解密,私钥加密

私钥签名,公钥验签

常见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 .crt -out .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

三、证书格式要求

root CA 机构颁发的证书:证书格式为 Linux 环境下 PEM 格式。样例如下:

证书规则为:

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

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

中级机构颁发的证书链:

——-BEGIN CERTIFICATE——-

——-END CERTIFICATE——-

——-BEGIN CERTIFICATE——-

——-END CERTIFICATE——-

——-BEGIN CERTIFICATE——-

——-END CERTIFICATE——-

证书链规则为:

证书之间不能有空行。

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

RSA 私钥格式要求

样例如下:

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

私钥转换:

opensslrsa-informDER-outformPEM-inprivatekey.der-outprivatekey.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” 即可。

可查看:/document/product/214/6155

四、证书单双向认证

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

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

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

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

检查证书是否过期。

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

检查证书是否可信。

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

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

服务端收到客户端发送的加密信息后,使用私钥(server.key)进行解密,获取对称加密密钥(密钥 K)。

在接下来的会话中,客户端和服务端将会使用该对称加密密钥(密钥 K)进行通信,保证通信过程中信息的安全。

SSL 双向认证

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

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

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

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

检查证书是否过期。

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

检查证书是否可信。

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

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

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

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

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

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

服务端收到客户端发送的加密信息后,使用服务端的私钥(server.key)进行解密,获取对称加密密钥(密钥 K)。

在接下来的会话中,客户端和服务端将会使用该对称加密密钥(密钥 K)进行通信,保证通信过程中信息的安全。

About Me:小麦粒

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

● 作者博客地址:/u010986753

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

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

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

●个人QQ:87605025

●QQ交流群pythonbao:483766429

●公众号:python宝 或 DB宝

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

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。