记录一次Nginx证书配置,我这个过程可能有些繁琐,如果大牛有更好的办法,欢迎评论指正环境
windows系统
nginx 1.14.2
步骤
1.利用JDK的keytool工具生成密钥库和证书(以下代码片段是一个bat脚本)
@echo on
rem 1. 生成密钥库
rem 生成密钥对 加密算法RSA 证书拥有者信息 server条目 server.jks密钥库 条目密码 密钥库密码
keytool -genkeypair -keyalg RSA -dname "CN=HanLuo" -alias server -keystore server.jks -keypass 123456 -storepass 123456
rem 2. 导出条目为自签名证书
rem 导出到server.cer文件中 server条目 server.jks密钥库 密钥库密码
keytool -exportcert -file server.cer -alias server -keystore server.jks -storepass 123456
rem 3. 将自签名证书导入信任库
rem 导入证书 server.cer server条目 导入client_trusk.jks信任库 密钥库密码 条目密码
keytool -importcert -file server.cer -alias server -keyalg client_trusk.jks -storepass 123456 -keypass 123456
1.1 查看jks文件中的entry
keytool -list -keystore server.jks
2.将.jks文件转为.p12(PKCS12格式证书库)
keytool -importkeystore -srckeysotre server.jks -destkeystore server-pkcs12.p12 -deststoretype PKCS12
2.2 查看新格式(pkcs12)证书库
keytool -deststoretype PKCS12 -keystore server-pkcs12.p12 -list
3.将cer格式证书转pem格式
openssl x509 -inform der -in server.cer -out server-pem.pem
4. 提取私钥
openssl pkcs12 -nocerts -nodes -in server-pkcs12.p12 -out server.key
5. nginx服务器配置
server {
#监听端口和域名
listen 443 ssl;
server_name localhost;
#以下两个为证书文件
ssl_certificate D:/java/nginx-1.14.2/cert/server-p.pem;
ssl_certificate_key D:/java/nginx-1.14.2/cert/server.key;
ssl_session_timeout 1m;
ssl_protocols SSLv2 SSLv3 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256:AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
ssl_prefer_server_ciphers on;
location / {
root D:/nginx/portal;
index index.html;
}
}
# 访问80端口时转发到443端口,转为https访问
server {
listen 80;
server_name localhost;
return 301 https://$host$request_uri;
}