在本地局域网搭建Https服务

Https

    利用局域网环境搭建https服务,模拟系统上线正式环境,提前发现可能存在的问题,确保项目平稳上线。

一、环境准备

  • 服务器系统:CentOS 6 (Red Hat Enterprise Linux Server release 6.3 (Santiago))
  • web服务器: Nginx、Tomcat9
  • Java环境:Java 8

二、Https服务搭建

2.1 https证书获取

    获取https证书主要有两种方式,第一种,使用工具生成ssl证书,例如:openssl工具、 JDK自带的keytool工具;第二种,在线向第三方机构申请的免费或付费的SSL证书,例如:阿里云SSL证书服务百度云SSL证书服务华为云SSL证书管理SCM腾讯云SSL证书服务等。本次采用第一种方式,使用工具生成ssl证书。之前写《基于TrueLicense实现web应用的License验证》时,有详细讲到使用keytool生成ssl证书文件。

2.2 使用Tomcat配置Https

2.2.1 生成ssl证书

1
2
# 为服务器生成证书  目录下面生成tomcat.keystore的文件
D:\develop\Java\jdk1.8.0_152\bin\keytool -genkey -alias tomcat -keypass 123456 -keyalg RSA -keysize 1024 -validity 365 -keystore tomcat.keystore -storepass 123456

2.2.2 配置Tomcat的Https服务

    将生成的tomcat.keystore密钥库文件拷贝到Tomcat服务器的conf目录下。修改Tomcat配置server.xml,注释掉http连接器,释放https连接器,启用https,并配置证书路径及密码:

1
2
3
4
5
6
7
8
9
10

<!-- <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> -->

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/tomcat.keystore"
type="RSA" certificateKeystorePassword="123456" />
</SSLHostConfig>
</Connector>

启动Tomcat,访问8443端口验证服务。

2.3 使用Tomcat+Nginx配置https

2.3.1 keytool生成证书

1
2
3
4
5
6
7
8
# 生成密钥对
D:\develop\Java\jdk1.8.0_152\bin\keytool -genkeypair -alias server -keyalg RSA -keysize 2048 -validity 3650 -keypass 123456 -storepass 123456 -keystore server.keystore
# 查看详情
D:\develop\Java\jdk1.8.0_152\bin\keytool -list -keystore -storepass 123456 server.keystore
# 把jks证书转换为p12格式证书
D:\develop\Java\jdk1.8.0_152\bin\keytool -importkeystore -srckeystore server.keystore -destkeystore server.p12 -srcstoretype JKS -deststoretype PKCS12
# 导出 cer证书
D:\develop\Java\jdk1.8.0_152\bin\keytool -exportcert -file server.cer -alias server -keystore server.keystore -storepass 123456

安装openssl,将cer格式证书转pem格式。windows下载链接

1
2
3
4
# 将cer格式证书转pem格式
openssl x509 -inform der -in server.cer -out server.pem
# 提取私钥
openssl pkcs12 -nocerts -nodes -in server.p12 -out server.key

2.3.2 openssl生成证书

1
2
3
4
5
6
7
8
9
10
# 生成私钥文件
openssl genrsa -des3 -out server.key 1024
# 为了不需要在每次重启nginx的时候都输入密码,删掉密码
mv server.key servertemp.key
openssl rsa -in servertemp.key -out server.key
rm servertemp.key
# 私钥文件生成csr证书文件
openssl req -new -key server.key -out server.csr
# 生成crt证书文件
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

2.3.3 配置nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
server {
listen 443 ssl;
server_name baidu.com;
keepalive_timeout 70;

ssl_certificate /home/server.crt;
ssl_certificate_key /home/server.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

location / {
proxy_pass http://localhost:8080;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Real-IP $remote_addr;
}
}

重启nginx

1
/usr/local/nginx/sbin/nginx -s reload

    Nginx的安装和配置可参考《Nginx的安装和配置》。