Java 生成证书:使用 OpenSSL
假设生成的自签名项目的名字是 vpp
openssl req -newkey rsa:2048 -nodes -keyout vpp.key -x509 -days 36500 -subj "/C=CN/CN=test.com" -out vpp.crt
openssl pkcs12 -export -out vpp.p12 -inkey vpp.key -in vpp.crt -certfile vpp.crt -passout pass:123456
keytool -importkeystore -srckeystore vpp.p12 -srcstoretype PKCS12 -srcstorepass 123456 -destkeystore vpp.keystore -deststorepass 123456 -destkeypass 123456
解释
您提供的命令用于生成自签名证书并将其导出为 Java 密钥库格式。以下是每个命令的详细解析:
-
生成 RSA 私钥和自签名证书:
openssl req -newkey rsa:2048 -nodes -keyout vpp.key -x509 -days 36500 -subj "/C=CN/CN=test.com" -out vpp.crtopenssl req:用于生成证书签名请求(CSR)或自签名证书。-newkey rsa:2048:生成新的 RSA 私钥,长度为 2048 位。-nodes:不对私钥进行加密(不需要密码)。-keyout vpp.key:将生成的私钥保存为vpp.key文件。-x509:生成自签名证书。-days 36500:证书有效期为 36500 天(约 100 年)。-subj "/C=CN/CN=test.com":设置证书的主题,包含国家(C=CN)和通用名称(CN=test.com)。-out vpp.crt:将生成的证书保存为vpp.crt文件。
-
将私钥和证书导出为 PKCS#12 格式:
openssl pkcs12 -export -out vpp.p12 -inkey vpp.key -in vpp.crt -certfile vpp.crt -passout pass:123456openssl pkcs12:用于处理 PKCS#12 文件。-export:导出密钥和证书。-out vpp.p12:将导出的 PKCS#12 文件保存为vpp.p12。-inkey vpp.key:使用之前生成的私钥vpp.key。-in vpp.crt:使用之前生成的证书vpp.crt。-certfile vpp.crt:在 PKCS#12 文件中包含证书。-passout pass:123456:为导出的文件设置密码123456。
-
将 PKCS#12 转换为 Java 密钥库格式:
keytool -importkeystore -srckeystore vpp.p12 -srcstoretype PKCS12 -srcstorepass 123456 -destkeystore vpp.keystore -deststorepass 123456 -destkeypass 123456keytool:Java 提供的工具,用于管理密钥和证书。-importkeystore:导入一个密钥库。-srckeystore vpp.p12:源密钥库,即之前生成的 PKCS#12 文件vpp.p12。-srcstoretype PKCS12:源密钥库类型为 PKCS#12。-srcstorepass 123456:源密钥库的密码。-destkeystore vpp.keystore:目标密钥库的名称,即vpp.keystore。-deststorepass 123456:目标密钥库的密码。-destkeypass 123456:目标密钥库中私钥的密码。
执行完这些命令后,您将得到一个 Java 密钥库文件 vpp.keystore,其中包含您生成的自签名证书和私钥。
nginx 启动
[root@bogon nginx_16002]# tree ./
./
|-- cert
| |-- vpp.crt
| |-- vpp.key
| |-- vpp.keystore
| `-- vpp.p12
|-- conf.d
| `-- vas_ws.conf
|-- log
`-- startup.sh
vas_ws.conf 内容
server {
listen 16002 ssl;
server_name test.com;
ssl_certificate /etc/nginx/cert/vpp.crt;
ssl_certificate_key /etc/nginx/cert/vpp.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://192.168.10.40:26002/; # 代理到 Spring Boot 应用
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_set_header X-Forwarded-Proto $scheme;
}
}
startup.sh 文件内容
docker run -d \
-p 16002:16002 \
--restart=unless-stopped \
--name nginx_vas_ws_16002 \
-v /app/vas/vas_ws/nginx_16002/conf.d/vas_ws.conf:/etc/nginx/conf.d/default.conf \
-v /app/vas/vas_ws/nginx_16002/cert/:/etc/nginx/cert/ \
-v /app/vas/vas_ws/nginx_16002/log/:/var/log/nginx \
nginx:1.26.1

浙公网安备 33010602011771号