SpringBoot 与 Nginx 集成 Https

SpringBoot 与 Nginx 集成 Https,第1张

1 生成证书 1.1 利用OpenSSL生成证书(已测试) 1.1.1 安装openssl
yum install openssl openssl-devel -y
1.1.2 生成一个RSA密钥 (私钥)
openssl genrsa -out server.key 2048
1.1.3 生成一个证书请求
openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=iie Inc./OU=Web Security/CN=test.com"

C字段:Country,单位所在国家,为两位数的国家缩写,如:CN 表示中国;
ST 字段:State/Province,单位所在州或省;
L 字段:Locality,单位所在城市/或县区;
O 字段:Organization,此网站的单位名称;
OU 字段:Organization Unit,下属部门名称,也常常用于显示其他证书相关信息,如证书类型,证书产品名称或身份验证类型或验证内容等;
CN 字段:Common Name,网站的域名;

1.1.4 自己签发证书
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
1.1.5 转换格式
openssl pkcs12 -export -clcerts -in server.crt -inkey server.key -out server.pkcs12

利用keytool将生成的证书转换为Java使用的格式

keytool -importkeystore -srckeystore server.pkcs12 -destkeystore server.jks -srcstoretype pkcs12 -deststoretype jks

最后生成五个文件,分别是

server.crt

server.csr

server.key

server.pkcs12

server.jks

1.2 利用 keytool 生成证书(已测试)
keytool -genkeypair -alias "test" -keyalg "RSA" -keystore "/test.jks" -keysize 1024 -validity 3650  -dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN" -keypass "123456" -storepass "123456"

-alias 别名
-keypass 指定生成密钥的密码
-keyalg 指定密钥使用的加密算法(如 RSA)
-keysize 密钥大小
-validity 过期时间,单位天
-keystore 指定存储密钥的密钥库的生成路径、名称
-storepass 指定访问密钥库的密码

1.3 格式转换(未测试) 1.3.1 jks转换为keystore

keytool -importkeystore -srckeystore e:/keystore/app.jks -srcstoretype JKS -deststoretype PKCS12 -destkeystore e:/keystore/app.p12

keytool -v -importkeystore -srckeystore e:/keystore/app.p12 -srcstoretype PKCS12 -deststoretype JKS -destkeystore e:/keystore/app.keystore

1.3.2  keystore转换为jks

keytool -importkeystore -srckeystore e:/keystore/app.keystore -srcstoretype JKS -deststoretype PKCS12 -destkeystore e:/keystore/app.p12


keytool -v -importkeystore -srckeystore e:/keystore/app.p12 -srcstoretype PKCS12 -destkeystore -deststoretype JKS e:/keystore/app.jks

2 与SpringBoot 集成

(1)将keytool生成的证书保存到SpringBoot项目中的resources目录中
(2)配置application.porperties文件

server.ssl.protocol=TLS
server.ssl.key-alias=test  #如果使用openssl则该配置不添加,如果使用keytool则可以添加
server.ssl.enabled=true
server.ssl.key-store=classpath:test.keystore 或者 test.jks 
server.ssl.key-store-password=123456
server.ssl.key-store-type=jks

(3)如果出现找不到指定密钥文件的问题,解决思路有两个。

         一是路径是否正确。放到resources目录下,application.properties中的配置路径是否正确。

         二是资源是否放行。


    
        
            src/main/resources
            
                **/*.properties
                **/*.keystore
                **/*.jks
            
            false
        
3 与Nginx集成(已测试)

安装Nginx,配置nginx.conf

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
         listen       8443 ssl;
         server_name  localhost;
         ssl_certificate   /nginx/cert/server.crt;
         ssl_certificate_key  /nginx/cert/server.key;
         ssl_verify_client off;
         ssl_session_cache    shared:SSL:1m;
         ssl_session_timeout  10m;

         ssl_ciphers  HIGH:!aNULL:!MD5;
         ssl_prefer_server_ciphers  on;

         location / {
             #root   html;
             #index  index.html index.htm;
             proxy_pass https://ip:port;  
             proxy_set_header X-Forwarded-For $remote_addr;
             proxy_set_header Host $host;   
             proxy_set_header Destination $fixed_destination;
         }
   }
}

*** 注意 ***

该内容是网络资源的整合并结合自己的实践,尚未清楚机理。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/720166.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存