Java 生成证书:使用 OpenSSL

Windows 安装 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 密钥库格式。以下是每个命令的详细解析:

  1. 生成 RSA 私钥和自签名证书

    openssl req -newkey rsa:2048 -nodes -keyout vpp.key -x509 -days 36500 -subj "/C=CN/CN=test.com" -out vpp.crt
    
    • openssl 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 文件。
  2. 将私钥和证书导出为 PKCS#12 格式

    openssl pkcs12 -export -out vpp.p12 -inkey vpp.key -in vpp.crt -certfile vpp.crt -passout pass:123456
    
    • openssl 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
  3. 将 PKCS#12 转换为 Java 密钥库格式

    keytool -importkeystore -srckeystore vpp.p12 -srcstoretype PKCS12 -srcstorepass 123456 -destkeystore vpp.keystore -deststorepass 123456 -destkeypass 123456
    
    • keytool: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
posted @ 2024-10-09 17:37  ioufev  阅读(166)  评论(0)    收藏  举报