1. 程式人生 > >Springboot專案使用Nginx 並配置 HTTPS

Springboot專案使用Nginx 並配置 HTTPS

Springboot的配置

參考部落格1
參考部落格2

簽發證書:

 keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650

gradle或者Maven專案:直接將生成的keystore.p12放在resources下

application.yml

server:
#  context-path: /myth
  ssl:
    key-store: classpath:keystore.p12
    key
-store-password: demo1429336 key-store-type: PKCS12 key-alias: tomcat port: 8888 session: timeout: 3000

任意的一個@Configuration註解類裡新增

    @Bean
    public TomcatEmbeddedServletContainerFactory servletContainerFactory() {
        TomcatEmbeddedServletContainerFactory factory =
                new
TomcatEmbeddedServletContainerFactory() { @Override protected void postProcessContext(Context context) { //SecurityConstraint必須存在,可以通過其為不同的URL設定不同的重定向策略。 SecurityConstraint securityConstraint = new SecurityConstraint(); securityConstraint.setUserConstraint("CONFIDENTIAL"
); SecurityCollection collection = new SecurityCollection(); collection.addPattern("/*"); securityConstraint.addCollection(collection); context.addConstraint(securityConstraint); } }; factory.addAdditionalTomcatConnectors(createHttpConnector()); return factory; } // HTTP自動轉發到HTTPS private Connector createHttpConnector() { Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); connector.setScheme("http"); connector.setSecure(false); connector.setPort(8887);//http埠(這是要新增加的一個埠) connector.setRedirectPort(8888);// https 埠配置檔案中tomcat啟動的預設埠 return connector; }

Nginx的配置

  • 先簽發證書
############ 證書頒發機構
# CA機構私鑰
openssl genrsa -out ca.key 2048
# CA證書
openssl req -x509 -new -key ca.key -out ca.crt
############ 服務端
# 生成服務端私鑰
openssl genrsa -out server.key 2048
# 生成服務端證書請求檔案
openssl req -new -key server.key -out server.csr
# 使用CA證書生成服務端證書  關於sha256,預設使用的是sha1,在新版本的chrome中會被認為是不安全的,因為使用了過時的加密演算法。
openssl x509 -req -sha256 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -out server.crt    
# 打包服務端的資料為pkcs12格式(非必要,只是換一種格式儲存上一步生成的證書) 生成過程中,需要建立訪問密碼,請記錄下來。
openssl pkcs12 -export -in server.crt -inkey server.key -out server.pkcs12

新建任意名的配置檔案在/etc/nginx/conf.d/下

upstream test {
  server 127.0.0.1:8888;
}

server {
  listen 443;
  server_name wx.baidu.com;
  ssl on;
  ssl_certificate  /home/er/https/server.crt;
  ssl_certificate_key  /home/er/https/server.key;

  location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-Nginx-Proxt true;

    proxy_pass https://test;
    proxy_redirect off;
  }
}

重啟nginx即可:sudo nginx -s reload