记一次CA证书的申请、服务器上的部署过程
1.简介
最近用docker
在liberity
服务器上部署了一个应用。由于安全方面的考虑,服务器管理员需要我们启用https
连接。这就需要我们去给liberity
配置ssl证书。
2.步骤
1.申请CA
证书
- 申请
CA
证书需要证书请求文件,需要在Server
端生成。可以在server
端用openssl
命令生成。
证书请求文件里面包含的是server
的public key
。下面的命令生成了一个glz7plpsc.pok.ibm.com.key
,这个就是服务器的私钥。glz7plpsc.pok.ibm.com.csr
就是证书请求文件,里面包含的是与glz7plpsc.pok.ibm.com.key
配对的公钥。
思考:为什么需要证书请求文件?openssl req -new -sha256 -newkey rsa:2048 -nodes -keyout glz7plpsc.pok.ibm.com.key -out glz7plpsc.pok.ibm.com.csr
CA
机构会用自己的私钥
给证书请求文件签一个名,这样我们就得到了CA
签名的证书,里面包含了server
的公钥。
浏览器在打开我们的网站的时候,server
会将这个经过CA
签名的证书发给浏览器,浏览器或操作系统内置了包含CA
机构的公钥,用公钥将证书解密,得到server
的公钥,用于后面https
协商对称加密的秘钥。 - 将
csr
文件提交到CA
机构。提交一些必要的信息之后,CA
机构会返回给你CA
证书。
我这里使用的是IBM
内网的CA
,它最终提供了三种文件格式的证书(crt,der, pkcs7b
)。
2.将CA
证书和服务器私钥存入p12
秘钥库中
由于liberity
服务器需要p12
秘钥库形式的证书,所以我们需要对证书进行转换。
证书转换的时候,遇到了很多坑。crt
和der
格式的证书在转换的时候都会出错,出现unable to load certificate
的错误。怀疑和CA
网站上下载的证书的格式有关系,后面还需要研究下,这些格式之间有什么区别联系。
最终通过先将pkcs7b
格式证书转换成pem
格式的证书,然后将pem
格式的证书转换成p12
格式的证书,达到了目的。pkcs7b
格式的证书下载下来,文件后缀名是pem
的,但是格式其实不是pem
。需要先转成pem
。
将pkcs7
格式的cert.pem
转成pem
格式的certificate.pem
:
openssl pkcs7 -print_certs -in cert.pem -out certificate.pem
再将pem
格式的certificate.pem
转成p12
格式的certificate.p12
,注意需要将服务器的私钥glz7plpsc.pok.ibm.com.key
一起放在p12
中:
openssl pkcs12 -export -in certificate.pem -inkey glz7plpsc.pok.ibm.com.key -out certificate.p12
3. 配置liberity服务器
liberity
服务器的ssl
配置和tomcat
服务器的配置是很类似的。
参考:https://www.ibm.com/docs/zh/was-liberty/nd?topic=liberty-ssl-configuration-attributes
https://www.openliberty.io/docs/21.0.0.5/reference/feature/transportSecurity-1.0.html
修改server.xml
,加入下面的ssl
配置:p12
文件需要放在/output/resources/security/
文件夹下,这里是liberity
默认的存储key
的位置。
<!-- SSL -->
<sslDefault sslRef="izuSSLConfig" />
<ssl id="izuSSLConfig" keyStoreRef="defaultKeyStore"
clientAuthenticationSupported="false" sslProtocol="TLSv1.2"/>
<keyStore id="defaultKeyStore" location="/output/resources/security/certificate.p12"
type="PKCS12" readOnly="true" password="xxxxxx" />
上一篇: 记一次前后端分离项目的部署过程
下一篇: 记一次项目发布过程报错
推荐阅读