//创建根证书密钥文件
openssl genrsa -des3 -out test.key
//创建根证书的申请文件
openssl req -new -key test.key -out test.csr
//创建一个自当前日期起为期十年的根证书
openssl x509 -req -days 3650 -sha1 -extensions v3_ca -signkey test.key -in test.csr -out test.crt
//创建服务器证书密钥
openssl genrsa -des3 -out server.key 2048
//创建服务器证书的申请文件
openssl req -new -key server.key -out server.csr
//创建自当前日期起有效期为期两年的服务器证书
openssl x509 -req -days 730 -sha1 -extensions v3_req -CA test.crt -CAkey test.key -CAserial test.srl -CAcreateserial -in server.csr -out server.crt
//创建客户端证书密钥文件
openssl genrsa -des3 -out client.key 2048
//创建客户端证书的申请文件
openssl req -new -key client.key -out client.csr
//创建一个自当前日期起有效期为两年的客户端证书
openssl x509 -req -days 730 -sha1 -extensions v3_req -CA test.crt -CAkey test.key -CAserial test.srl -CAcreateserial -in client.csr -out client.crt
//将客户端证书文件client.crt和客户端证书密钥文件client.key合并成客户端证书安装包client.pfx
openssl pkcs12 -export -in client.crt -inkey client.key -out client.pfx
//保存生成的文件备用,其中server.crt和server.key是配置单向SSL时需要使用的证书文件,client.crt是配置双向SSL时需要使用的证书文件,client.pfx是配置双向SSL时需要客户端安装的证书文件
//证书合并
cat server.key server.crt > server.pem
cat client.key client.crt > client.pem
//配置到Nginx中:
server {
#添加443监听
listen 443;
#开启SSL
ssl on;
#指定PEM格式的证书文件
ssl_certificate /etc/nginx/conf.d/keys/server.pem;
ssl_client_certificate /etc/nginx/conf.d/keys/client.pem;
ssl_certificate_key /etc/nginx/conf.d/keys/server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
#将所有的http请求通过rewrite重写到https上即可
# rewrite ^(.*)$ https://$host$1 permanent;
}
// 所有的操作完成后需要重启 Nginx 并输入证书密码
service nginx restart
附 nginx.conf:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
upstream backend {
server 127.0.0.1:8080;
}
server {
listen 443;
server_name loyom.com; #填写绑定证书的域名
ssl on;
ssl_certificate /opt/ca/1_loyom.com_bundle.crt;
ssl_certificate_key /opt/ca/2_loyom.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffering off;
proxy_pass http://backend;
}
}
server {
listen 80;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffering off;
proxy_pass http://backend;
}
}
}