背景
在網絡安全的大背景下,我們公司終於決定升級官網訪問,採用https代替http,本文存在三種部署方案,第一種是spring boot項目使用內帶tomcat, 第二種是使用nginx部署的項目,第三種使用iis部署的項目。
- 首先是生成證書,這個可以去各個證書網站購買,本文不講如何購買,如果我們需要測試的話我們可以在服務器上使用openssl生成一個證書,如果是Windows機器上沒有openssl命令,下載安裝,百度雲下載鏈接提取碼:5kjx,下載後安裝自不用說,但是得記住安裝路徑,安裝完了記得配置下環境變量。
打開命令行程序cmd(以管理員身份運行),運行以下命令:
1.創建服務器證書密鑰文件 server.key:
openssl genrsa -des3 -out server.key 1024
輸入密碼,確認密碼,自己隨便定義,但是要記住,後面會用到。
2.創建服務器證書的申請文件 server.csr
openssl req -new -key server.key -out server.csr
輸出內容爲:
Enter pass phrase for root.key: ← 輸入前面創建的密碼
Country Name (2 letter code) [AU]:CN ← 國家代號,中國輸入CN
State or Province Name (full name) [Some-State]:BeiJing ← 省的全名,拼音
Locality Name (eg, city) []:BeiJing ← 市的全名,拼音
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany Corp. ← 公司英文名
Organizational Unit Name (eg, section) []: ← 可以不輸入
Common Name (eg, YOUR name) []: ← 此時不輸入
Email Address []:[email protected] ← 電子郵箱,可隨意填
Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []: ← 可以不輸入
An optional company name []: ← 可以不輸入
4.備份一份服務器密鑰文件
cp server.key server.key.bak
5.去除文件口令
openssl rsa -in server.key -out server.key
6.生成證書文件server.crt
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
這個時候服務器根目錄下會生成文件server.key 和 server.crt。
1.spring boot支持https
創建WebSecurityConfig類繼承WebMvcConfigurationSupport,創建EmbeddedServletContainerFactory bean
@Configuration
public class WebSecurityConfig extends WebMvcConfigurationSupport {
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
Connector connector = new Connector();
connector.setPort(443);
connector.setSecure(true);
connector.setScheme("https");
connector.setProperty("SSLEnabled", "true");
connector.setProperty("keystoreFile", ”server.crt的絕對路徑“);
connector.setProperty("keystorePassword", “你創建server.key時的密碼“);
tomcat.addAdditionalTomcatConnectors(connector );
return tomcat;
}
}
- nginx支持https
首先查看nginx是不是有ssl模塊,nginx -V,如果沒有看到ssl就重新編譯。
重新配置
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
重新編譯,不需要make install安裝。否則會覆蓋
make
然後複製sbin目錄下的nginx文件替換原來文件,再次查看就可以看到支持了。
然後配置config文件,
##同時支持https和http
server {
listen 80 default backlog=2048;
listen 443 ssl;
server_name xuxiake.com;
root /html/index.html;
ssl_certificate server.crt絕對路徑;
ssl_certificate_key server.Key絕對路徑;
}
多域名支持
server {
listen 443 ssl;
server_name first.com;
root /html/index.html;
ssl_certificate server.crt絕對路徑;
ssl_certificate_key server.Key絕對路徑;
}
- iis添加https訪問
iis需要.pfx後綴的證書文件,需要使用openssl合成,命令如下,
openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt
1)在服務器上,單擊開始 > 運行 > MMC打開控制檯。
2)單擊文件 > 添加/刪除管理單元打開添加/刪除管理單元對話框。
3)在可用的管理單元中單擊證書 > 添加 > 計算機賬戶 > 下一步 > 本地計算機(運行此控制檯的計算機) > 完成。
4)單擊個人 > 所有任務 > 導入打開證書導入嚮導對話框。
5)單擊瀏覽導入下載的PFX格式證書文件。一路下一步直到輸入密碼,輸入你創建server.key時的密碼
6)勾選根據證書類型,自動選擇證書存儲並單擊下一步完成證書的導入。
7)打開IIS8.0 管理器面板,定位到待部署證書的站點,單擊綁定。
8)在網站綁定對話框中單擊添加 > 選擇https類型 > 端口選擇443 > 導入的IIS證書名稱 > 確定。
總結
寫到最後,我們這麼配置後一切是都生效了,但是還有一個問題就是用戶直接輸入域名,瀏覽器默認是http的,所以不管是iis還是nginx,我們都需要寫重定向,這個大家就百度吧。