SpringBoot 与 Nginx 集成 Https

***        使用方法一集成

1 生成证书

1.1 利用OpenSSL生成证书(已测试)

生成证书需要使用openssl工具,包括根证书和用户证书。在生成证书的具体步骤之前,我们需要知道几个与证书相关的文件格式,所有这些格式都属于PKCS(The Public-Key Cryptography Standards)标准:

  • .key文件:私钥文件,通常使用rsa算法,私钥需要自己保存,无需提交给CA机构
  • .csr文件:证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写。生成该文件时需要用到自己的私钥。
  • .crt文件:CA认证后的证书文件,certificate的缩写。
  • .crl文件:证书吊销列表,Certificate Revocation List的缩写
  • .pem文件:用于导出,导入证书时候的证书的格式。该文件实际上是.crt文件和.key文件的合体,与windows下使用.pfx类似,不同的是.pem使用base64字符存储,而.pfx使用二进制存储。

生成CA根证书的步骤:生成CA私钥(.key)-->生成CA证书请求(.csr)-->自签名得到根证书(.crt

生成用户证书的步骤:生成私钥(.key)-->生成证书请求(.csr)-->用CA根证书签名得到证书(.crt

通常情况,我们部署在内网的服务会采用自签名的证书,只有部署公网服务时才会向CA机构申请证书。

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 生成证书(已测试,只集成SpringBoot是可以的)

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;#方法一生成的crt文件
         ssl_certificate_key  /nginx/cert/server.key;#方法一生成的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;
         }
   }
}

*** 注意 ***

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

你可能感兴趣的:(#,HTTPS集成,spring,spring,boot,web安全)