Springboot專案使用Nginx 並配置 HTTPS
阿新 • • 發佈:2019-02-03
Springboot的配置
簽發證書:
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