目录
1、检查nginx是否包含http_ssl_module 模块
如果出现 --with-http_ssl_module
就是已经安装了
#通过查看nginx版本,确认是否包含http_ssl_module 模块
nginx -V
2、生成证书文件
证书存放目录: /home/java/nginx/sslfiles
2.1 直接生成的方式
# 使用 OpenSSL 命令生成证书文件
mkdir /home/java/nginx/sslfiles
cd /home/java/nginx/sslfiles
#生成文件,使用自定义域名,密码根据需要修改;这里不能用IP地址,否则应用程序会警告
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -sha256 -keyout HostDomain.key -out HostDomain.cer -subj "/CN=gov.bizpro.cn"
参数说明
-
-days
:证书的有效时长,单位是day -
-x509
:说明生成自签名证书 -
-nodes
:如果指定-newkey
自动生成秘钥,那么-nodes
选项说明生成的秘钥不需要加密,即不需要输入passphase
-
-key
:指定已有的秘钥文件生成秘钥请求,只与生成证书请求选项-new配合 -
-newkey
:-newkey
是与-key
互斥的,-newkey
是指在生成证书请求或者自签名证书的时候自动生成密钥,然后生成的密钥名称由-keyout
参数指定。当指定newkey
选项时,后面指定rsa:bits
说明产生rsa
密钥,位数由bits
指定。 如果没有指定选项-key
和-newkey
,默认自动生成秘钥 -
rsa:2048
:rsa表示创建rsa私钥,2048表示私钥的长度。 -
-keyout
:指定私钥保存位置。 -
-out
:新的证书请求文件位置。 -
-config
:指定req的配置文件,指定后将忽略所有的其他配置文件。如果不指定则默认使用/etc/pki/tls/openssl.cnf
中req段落的值
2.2、使用配置文件生产的方式
创建配置文件 req.cnf
# 定义输入用户信息选项的"特征名称"字段名,该扩展字段定义了多项用户信息。
distinguished_name = req_distinguished_name
# 生成自签名证书时要使用的证书扩展项字段名,该扩展字段定义了要加入到证书中的一系列扩展项。
x509_extensions = v3_req
# 如果设为no,那么 req 指令将直接从配置文件中读取证书字段的信息,而不提示用户输入。
prompt = no
[req_distinguished_name]
#国家代码,一般都是CN(大写)
C = CN
#省份
ST = gd
#城市
L = gz
#企业/单位名称, 组织 (O)
O = bizpro
#企业部门, 组织单位 (OU)
#OU = bizpro
#证书的主域名, 公用名 (CN)
CN = gov.bizpro.cn
##### 要加入到证书请求中的一系列扩展项 #####
[v3_req]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[ alt_names ]
IP.1 = 192.168.11.55
# IP.2 = 192.168.11.50
在放置该文件的目录下执行以下命令
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout server.key -out server.crt -config req.cnf -sha256
3、修改 nginx.conf 配置文件
找到 nginx.conf
,在对应的配置文件加上两处配置
# 1、端口后端增加ssl配置,表示该端口是https协议
listen 8443 ssl;
# 2、在server中配置证书地址, 生成 cer 和 crt 证书文件都可以
ssl_certificate /home/java/nginx/sslfiles/server.crt;
ssl_certificate_key /home/java/nginx/sslfiles/server.key;
#ssl_certificate /home/java/nginx/sslfiles/HostDomain.cer;
#ssl_certificate_key /home/java/nginx/sslfiles/HostDomain.key;
重载nginx。
4、示例说明(8080为http协议;8443为https协议)
server {
#按实际情况修改; 监听端口 建议80
listen 8080;
#按实际情况修改; nginx服务器(本机)地址或域名
server_name 192.168.11.55;
#请求体内容最大 大小
client_max_body_size 20m;
#请求体缓存 大小
client_body_buffer_size 3m;
location /license-admin {
proxy_pass http://admin-hosts;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 800s;
proxy_send_timeout 800s;
proxy_read_timeout 800s;
error_log /usr/local/nginx/logs/admin_error.log warn;
access_log /usr/local/nginx/logs/admin_access.log main;
}
}
server {
#按实际情况修改; 监听端口 建议443
listen 8443 ssl;
#按实际情况修改; nginx服务器(本机)地址或域名
server_name 192.168.11.55;
ssl_certificate /home/java/nginx/sslfiles/server.crt;
ssl_certificate_key /home/java/nginx/sslfiles/server.key;
#请求体内容最大 大小
client_max_body_size 20m;
#请求体缓存 大小
client_body_buffer_size 3m;
#https代理http服务(适用tomcat未配https)
location /license-admin/ {
proxy_pass http://admin-hosts;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
#https代理http(特性配置)
proxy_redirect http:// $scheme://;
#https代理http(特性配置)
port_in_redirect on;
#https代理http(特性配置)
proxy_set_header X-Forwarded-Proto http;
proxy_connect_timeout 800s;
proxy_send_timeout 800s;
proxy_read_timeout 800s;
error_log /usr/local/nginx/logs/admin_ssl_error.log warn;
access_log /usr/local/nginx/logs/admin_ssl_ccess.log main;
}
#https代理https服务(适用tomcat配有https)
location /license-admin-xxx/ {
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_redirect off;
proxy_pass https://admin-hosts;
proxy_connect_timeout 800s;
proxy_send_timeout 800s;
proxy_read_timeout 800s;
error_log /usr/local/nginx/logs/admin_https_error.log warn;
access_log /usr/local/nginx/logs/admin_https_ccess.log main;
}
}
ok nginx 配置 https 到这就结束了
(拓展说明1)应用服务器处理证书
将生成好的证书文件 HostDomain.cer
上传到每一部应用服务器中, 进行修改,然后导入到jdk的可信任证书列表,避免报错。
# 密码自改
keytool -keystore cacerts -importcert -alias bizpro -file HostDomain.cer -storepass ******
# 拷贝cacerts 文件到jdk目录中
cp cacerts $JAVA_HOME/jre/lib/security/
(拓展说明2)修改应用服务器的hosts
修改应用服务器中的hosts文件,将证书中的域名和IP地址配置进去。例如 vi /etc/hosts
# 代理服务器的IP地址, 证书中的域名地址
192.168.11.55 gov.bizpro.cn
(拓展说明3)修改应用服务器api中的配置项
修改完重启
#修改每一个api的配置文件中,配置了代理服务器地址的配置项,例如:
auth-api.rootUrl=http://192.168.11.55:8443/auth-api
#要改成:
auth-api.rootUrl=https://gov.bizpro.cn:8443/auth-api