一、为内网 IP 生成自签名证书(Nginx)

这是最简单快捷的方法,但需要用户在浏览器中手动信任一次证书。

  1. 生成私钥和证书签名请求(CSR)
    创建一个配置文件 san.conf关键是要在 subjectAltName 中指定您的 IP

[req]
default_bits       = 2048
default_keyfile    = localhost.key
distinguished_name = req_distinguished_name
req_extensions     = req_ext
x509_extensions    = v3_ca

[req_distinguished_name]
countryName                 = Country Name (2 letter code)
countryName_default         = CN
stateOrProvinceName         = State or Province Name (full name)
stateOrProvinceName_default = Province
localityName                = Locality Name (eg, city)
localityName_default        = City
organizationName            = Organization Name (eg, company)
organizationName_default    = Company
organizationalUnitName      = OrganizationalUnitName
organizationalUnitName_default = IT
commonName                  = Common Name (e.g. server FQDN or YOUR name)
commonName_max              = 64
commonName_default          = 192.168.1.100 # 你的内网IP

[req_ext]
subjectAltName = @alt_names

[v3_ca]
subjectAltName = @alt_names

[alt_names]
IP.1   = 192.168.1.100 # 你的内网IP
# 如果你有域名,也可以加进去
# DNS.1  = internal.example.com

        2.生成证书
        使用 OpenSSL 命令生成私钥和证书。

# 这个命令会一次性生成私钥和证书
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
  -keyout nginx.key \         # 私钥文件名
  -out nginx.crt \            # 证书文件名
  -config san.conf \          # 使用上面的配置文件
  -extensions v3_ca           # 使用配置文件中的 v3_ca 扩展

        3.配置 Nginx
        将生成的 nginx.crt 和 nginx.key 文件放到 Nginx 服务器上的某个目录(例如 /etc/nginx/ssl/)。
        修改您的 Nginx 站点配置文件:

server {
    listen 443 ssl http2;
    server_name 192.168.1.100; # 你的内网IP

    # SSL 证书配置
    ssl_certificate      /etc/nginx/ssl/nginx.crt;
    ssl_certificate_key  /etc/nginx/ssl/nginx.key;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}

# 强制将HTTP重定向到HTTPS
server {
    listen 80;
    server_name 192.168.1.100;
    return 301 https://$server_name$request_uri;
}

        4.重启 Nginx 并测试

sudo nginx -t # 检查配置是否正确
sudo systemctl restart nginx # 重启Nginx

二、Java 程序作为服务端(使用自签名证书)

  1. 生成 PKCS12 格式的 Keystore
    使用上面为 Nginx 生成的证书和私钥,或者重新生成一个。Java 更喜欢 PKCS12 格式。

# 将之前生成的 .crt 和 .key 文件合并为 .p12 文件
openssl pkcs12 -export -in nginx.crt -inkey nginx.key -out server.p12 -name myserver -CAfile ca.crt -caname root
# 会提示你设置一个密码,比如 ‘changeit’

        2.在 Spring Boot 中配置 application.properties

# 启用HTTPS
server.ssl.enabled=true
# Keystore 格式
server.ssl.key-store-type=PKCS12
# Keystore 文件的路径(放在项目的 src/main/resources/ 下)
server.ssl.key-store=classpath:ssl/server.p12
# Keystore 的密码
server.ssl.key-store-password=changeit
# Key 的别名(可选,如果有问题就加上)
server.ssl.key-alias=myserver

# 如果想同时支持HTTP,可以将HTTP端口重定向到HTTPS
server.http.port=80

本文由AI生成,已测试。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐