内网IP,http改为https,Nginx 的解决方法
一、为内网 IP 生成自签名证书(Nginx)
这是最简单快捷的方法,但需要用户在浏览器中手动信任一次证书。
-
生成私钥和证书签名请求(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 程序作为服务端(使用自签名证书)
-
生成 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生成,已测试。
更多推荐
所有评论(0)