前言
出于安全方面的因素,公司需要将http加固成https,这里就简单总结下在weblogic、apache、nginx、tomcat中间件中https的改造的经历。
生成证书
证书获取有两种方式,一种是向CA机构申请,但价格比较贵。另外一种就是自建证书,缺点是访问时会提示不安全连接。这里介绍自建证书的方法(官方申请的方式可以跳过此步骤)
使用JDK中的keytool工具生成证书
# 生成私钥和证书
keytool -genkeypair -alias serverkey -keypass 123 -storepass 123 -keyalg RSA -keysize 2048 -validity 3650 -keystore server.keystore -dname "CN=姓名,OU=组织单位名,O=组织名,L=城市区域名,ST=省/市/自治区名,C=国家/地区代码"
# 生成jks证书
keytool -genkey -keystore /path/weblogic.jks -alias weblogic -keyalg RSA -keypass pssword -validity 365
# 生成DER编码格式cer证书
keytool -exportcert -keystore server.keystore -file server.cer -alias serverkey -storepass 123
# 生成PEM编码格式cer证书
keytool -exportcert -keystore server.keystore -rfc -file server.cer -alias serverkey -storepass 123
配置证书
- weblogic
- 在weblogic的console后台依次进入【环境】【服务器】【一般信息】页,把【启用 SSL 监听端口】勾选,并在【SSL 监听端口】填写端口
- 进入【密钥库】页,把【密钥库】更改为:定制身份和 Java 标准信任,【定制身份密钥库】填写jks的路径,【定制身份密钥库类型】填写jks,【定制身份密钥库密码短语】【确认定制身份密钥库密码短语】填写证书生成时的密码
- 进入【SSL】页,【身份和信任位置】更改为密钥库,【私有密钥别名】填写证书的alias名,【私有密钥密码短语】【确认私有密钥密码短语】填写证书生成时的密码
- 保存后无需重启就能生效
- Apache
通过修改httpd中的配置:ssl.conf实现https改造,但事先必须安装SSL模块yum install mod_ssl
<VirtualHost *:6666>
#网页文件路径
DocumentRoot /path/xxx
#启用SSL功能
SSLEngine on
#填写证书文件路径
SSLCertificateFile /path/xxx.crt
#填写私钥文件路径
SSLCertificateKeyFile /path/xxx.key
</VirtualHost>
- Nginx
通过修改nginx中的配置:nginx.conf实现https改造,但事先必须安装SSL模块./configure --with-http_ssl_module
http{
server {
# 服务器端口使用443,开启ssl
listen 443 ssl;
# 域名,多个以空格分开
server_name www.xxx.com;
ssl on;
# ssl证书地址
ssl_certificate /usr/local/nginx/cert/xxx.pem; # pem文件的路径
ssl_certificate_key /usr/local/nginx/cert/xxx.key; # key文件的路径
# ssl验证相关配置
ssl_session_timeout 5m; #缓存有效期
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #加密算法
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #安全链接可选的加密协议
ssl_prefer_server_ciphers on; #使用服务器端的首选算法
location / {
root html;
index index.html index.htm;
}
}
# 将 http 重定向 https。
server {
listen 80;
server_name www.xxx.com;
rewrite ^/(.*) https://${server_name}$1 permanent;
}
}
- Tomcat
通过修改tomcat中的配置:server.xml实现https改造
<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" keystoreFile="xxx.jks" keystorePass="xxx" clientAuth="false" sslProtocol="TLS" />
<!--改写重定向端口redirectPort-->
<Connector port="80" protocol="HTTP/1.1" maxThreads="600" connectionTimeout="20000" redirectPort="443" />