1. 程式人生 > >自建無域名https服務端和客戶端證書,nginx和spring boot應用使用同一個證書 ,並解決chrome安全警告的問題

自建無域名https服務端和客戶端證書,nginx和spring boot應用使用同一個證書 ,並解決chrome安全警告的問題

參考連結: 自簽發ssl證書 【spring boot】配置ssl證書實現https

一、生成nginx的證書與配置chrome安全告警的問題

  • 1.安裝openssl
  • 2.生成根證書
openssl req -x509 -nodes -days 1461 -newkey rsa:2048 -subj "/C=CN/ST=MyProvince/L=MyCity/O=MyOrganization" -keyout CA-private.key -out CA-certificate.crt -reqexts v3_req -extensions v3_ca
  • 3.生成私鑰
openssl genrsa -out private.key 2048
  • openssl req -new -key private.key -subj "/C=CN/ST=MyProvince/L=MyCity/O=MyOrganization/CN=123.123.123.123" -sha256 -out private.csr

     

  • .4.生成證書(解決chrome安全告警)。在預設情況下生成的證書一旦選擇信任,在 Edge, Firefox 等瀏覽器都顯示為安全,但是Chrome仍然會標記為不安全並警告攔截,這是因為 Chrome 需要證書支援擴充套件 Subject Alternative Name, 因此生成時需要特別指定 SAN 擴充套件並新增相關引數。
[ req ]
default_bits        = 2048
distinguished_name  = req_distinguished_name
req_extensions      = san
extensions          = san
[ req_distinguished_name ]
countryName         = CN
stateOrProvinceName = MyProvince
localityName        = MyCity
organizationName    = MyOrganization
[SAN]
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = IP:123.123.123.123

5.將上述內容放到一個檔案中,命名為private.ext.執行命令,生成證書

openssl x509 -req -days 1461 -in private.csr -CA CA-certificate.crt -CAkey CA-private.key -CAcreateserial -sha256 -out private.crt -extfile private.ext -extensions SAN
  • nginx中配置如下:
server {
    listen       168.130.1.31:4443;
    server_name  localhost;
    ssl                  on;
    ssl_certificate      /usr/local/nginx/ssl/private.crt;
    ssl_certificate_key  /usr/local/nginx/ssl/private.key;
    error_page 497  https://$host$uri?$args;

     location / {
        root   html;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html;
    }
}

在window或者mac上安裝private.crt檔案後,nginx上頁面或者介面就可以正常訪問了。

二、為spring boot應用配置https證書,用上面生成的證書配置spring boot的證書

  • 注意我們是在Java環境中,常用的證書形式有p12格式的,jks格式的,所以需要做轉換,以p12為例:
openssl pkcs12 -export -clcerts -in private.crt -inkey private.key -out server.p12

這樣生成了spring boot上可以用的私鑰格式檔案server.p12在這個轉換的過程中要求輸入一個密碼,請記住這個密碼

  • 使用keytool檢視別名
keytool -list -keystore server.p12

輸入金鑰庫口令:

金鑰庫型別: JKS
金鑰庫提供方: SUN

您的金鑰庫包含 1 個條目

1, 2018-7-17, PrivateKeyEntry,
證書指紋 (SHA1): *********************************
注意這個1這是我們執行這個命令的目的,也就是我們的別名
  • 將server.p12拷貝到resources目錄下面,並配置yml如下
server:
    ssl:
      key-store: classpath:server.p12
      key-store-password: 123456
      protocol: TLS
      keyAlias: 1
      keyStoreType: PKCS12

至此我們的nginx和spring boot應用就配置了同一個https證書,只需要在windows或者mac上配置我們的CA-certificate.crt檔案就可以成功達到效果了。