【WAF】【配置管理】证书格式转换

谢卓励发表于:2020年11月09日 12:43:31

适配版本


产品:WAF
版本:WAF6.x
平台:Windows/Linux/其他XXX/平台无关
部署模式:反向代理模式

 

原因:


由于服务器种类的不同,证书存在多种格式,waf在配置https服务器和https代理服务器时,需要导入.crt后缀格式的证书及匹配的.key后缀格式私钥,会遇到客户无法提供对应格式的证书或者导入证书后报错等问题,以下对证书格式进行介绍并提供证书转换的方式

 

内容:


证书和私钥:

        证书中包含了公钥,公钥和私钥是非对称加密过程中使用到的一对密钥

常见证书格式:

  • .DER,文件通常是二进制格式,只保存证书,不保存私钥。

  • .PEM,文件通常是文本格式,可保存证书,可保存私钥。

  • .CRT .CER,可以是二进制格式,也可以是文本格式,与 .DER 格式相同,不保存私钥。

  • .PFX .P12,二进制格式,同时包含证书和私钥,一般有密码保护。

  • .JKS,二进制格式,同时包含证书和私钥,一般有密码保护。

证书编码格式:

主要有两种:二进制编码格式(DER)和文本编码格式(PEM)。文本编码格式使用文本编辑器可以查看,二进制编码格式使用文本编辑器打开则显示乱码。证书的编码格式与私钥的编码格式相同才能匹配。

注:此处所说的DER与PEM为编码格式,与windows系统中的文件名后缀并非相同的东西,但通常.der后缀的编码格式也是DER,.pem后缀的编码格式通常也是PEM。

证书和私钥区分(针对文本编码格式):

        证书格式如下:
-----BEGIN CERTIFICATE-----
         ……BASE64……
-----END CERTIFICATE-----

 0015fa8c87b4ab76943b77bf0a7bcba

        私钥格式如下:
-----BEGIN RSA PRIVATE KEY-----
         ……key……

-----END RSA PRIVATE KEY-----

0015fa8c7e2b9a46d9ab8062273a9f7

CA认证:

公钥经过认证签名后才是证书,只有经过权威CA机构签名认证的证书才会被浏览器信任,小型机构认证或自签名的证书导入后访问会提示证书不可信。

 

证书链:

 权威CA机构较少,因此由中间机构来给服务器证书进行签名,中间机构签名所用的中间证书是经过CA机构签名认证的,因此可被浏览器信任

        0015fa8c8aa09f387515286bff264d9

格式转换方法(使用openssl进行转换,在linux下输入命令):

  • .cer格式转换 :

 1.文本格式的.cer转换为二进制格式的.crt

openssl x509 -inform PEM -outform DER -in test.cer -out test.crt

2.二进制格式的.cer转换为文本格式的.crt

openssl x509 -inform DER -outform PEM -in test.cer -out test.crt

3.编码格式不变直接修改后缀即可

注:-inform和-outform参数不添加时默认为PEM编码格式(文本格式)

  • .pem格式转换:

1.转换为二进制编码格式的.crt

openssl x509 -outform DER -in server.pem -out your-cert.crt

2.转换为文本格式的.crt直接修改后缀即可

  • .pfx格式提取.crt和.key

1.提取证书

openssl pkcs12 -in server.pfx -nokeys -out server.crt

2.提取私钥

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

  • .p12格式提取.crt和.key

1.提取证书

openssl pkcs12 -in server.p12 -nokeys -out server.crt

2.提取私钥

openssl pkcs12 -in server.p12 -nocerts -nodes -out server.key

  • .jks格式提取.crt和.key

1.在有jkd环境下设备下使用keytool转换为p12格式再进行转换:

keytool -importkeystore -srckeystore /crt/server.jks -destkeystore /crt/server.p12 -srcstoretype jks -deststoretype pkcs12

2.输入目标密钥库口令(自定义,后面转换时会用到,建议与源密码相同,避免忘记): 

3.再次输入新口令(自定义,与上面的密码相同):

4.输入源密钥库口令(.jks文件附带的源密码):

5.使用openssl将.p12转换为.crt和.key

  • .der格式转换

1.将der编码格式转换为pem编码格式的.crt

openssl x509 -in server.der -inform der -outform pem -out server.crt

2.将der编码格式转换为der编码格式的.crt直接修改后缀。       

常见问题:

  • 导入crt格式的证书失败

waf导入证书时存在校验机制,会校验格式是否正确,证书和私钥是否匹配,由于crt格式的证书支持两种编码格式,该问题多为修改证书格式时选择的编码格式导出后无法与私钥匹配。

  • 导入证书后访问显示不安全

1、提供的证书错误,与站点不匹配。

2、自签名根证书(非CA机构认证),需要在pc和浏览器中导入根证书。

3、PC和浏览器中已导入根证书,访问仍显示不安全,原因为waf上添加的为服务器证书,不包含中间证书,导致无法验证中间证书而提示不安全。

解决方法:将证书组合成导入

组合方式:将文本编码格式的三个证书打开,从上到下以服务器证书、中间证书、根证书的顺序复制到一个文本文档里(顺序不可出错),并修改文件名后缀为.crt,私钥使用服务器证书对应的私钥.key即可,如图。
                      0015fa8c8be3c54ffe746a7d70c6702