续接上一篇 https 以及内网如何使用 的理论知识,这次来做个实践,用 openssl
和 keytool
为 weblogic 生成自签证书,并让浏览器信任。
如果使用了负载均衡(nginx或apache),则更为简单,只需要在负载均衡中配置证书就完成了,不需要以下步骤,使用 apache 作为负载均衡可参考 apache 配置 https
背景知识
- 什么是单向认证:只需要客户端认证服务端是否正确;
- 什么是双向认证:需要客户端和服务器端互相认证,在单向认证的基础上,服务器也需要认证客户端。在生成证书这一步也需要为客户端生成证书。
因为大部分情况下(除比较安全的应用如涉及到支付、银行U盾等)不需要双向认证,所以这里只做单向认证就可以了。
说明
- 实践中我使用的是
cygwin
自带的 openssl,如果没有可自行下载 OpenSSL,解压后用cmd
进入该目录; - 在当前目录下创建
ca
文件夹,用来存储生成的 CA 证书; - 操作过程中涉及到的密码均为
123456
,证书名称为example
,可自行替换; - 示例签证的时间是3650天,即10年;
- 示例中用到的 ip 自行替换。
制作CA根证书
- 创建私钥
openssl genrsa -out ca/ca-key.pem 1024
- 创建证书请求
openssl req -new -out ca/ca-req.csr -key ca/ca-key.pem -config openssl.cnf
- 生成CA自签名证书
openssl x509 -req -in ca/ca-req.csr -out ca/ca-cert.pem -signkey ca/ca-key.pem -days 3650
制作服务器证书
- 用 java 自带的 keytool工具生成密钥
keytool -genkey -alias example -validity 365 -keyalg RSA -keysize 1024 -keypass 123456 -storepass 123456 -keystore example.jks
- 用keytool工具生成证书请求
keytool -certreq -alias example -sigalg MD5withRSA -file example.csr -keypass 123456 -keystore example.jks -storepass 123456
- 根据证书请求,用CA签证,生成服务器证书
openssl x509 -req -in example.csr -out example.pem -CA ca/ca-cert.pem -CAkey ca/ca-key.pem -days 365 -set_serial 1
向 keystore 密钥库中导入证书
- 导入CA证书
keytool -import -v -trustcacerts -keypass 123456 -storepass 123456 -alias root -file ca/ca-cert.pem -keystore example.jks
- 导入服务器证书
keytool -import -v -trustcacerts -storepass 123456 -alias example -file example.pem -keystore example.jks
- 单独导出 CA 作为信任证书
keytool -import -alias example-ca -trustcacerts -file ca/ca-cert.pem -keystore exampletrust.jks
至此会生成 example.jks 和 exampletrust.jks
两个文件,将其复制到 webloigc 域的根目录下,启用 weblogic 的 ssl 功能并引用证书配置。
客户端安装CA证书(解决浏览器端无法识别证书的问题)
- 生成浏览器证书
openssl pkcs12 -export -clcerts -in ca/ca-cert.pem -inkey ca/ca-key.pem -out ca/ca.p12
- 双击ca.p12安装证书为
受信任的根证书颁发机构
- 打开ie浏览器,在
internet 选项``内容
中清除ssl状态
,重启浏览器再重新访问,就不会再有不信任的提示。