内容目录(原文见公众号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和高可用最实用的技能培训
●题目解答若有不当之处,还望各位朋友批评指正,共同进步
欢迎赞赏哦!有您的支持,小麦粒一定会越来越好!