首先,不知道你有沒有發現,有時你在瀏覽器訪問一個網址時,例如(www.hzelin.top),你會發現網址左邊是個 X不安全(表示該鏈接不安全,使用的是http未加密協議),而有時你訪問一個網址的時候發現地址左邊是(表示該鏈接是安全的,使用https加密協議,特別是做小程序的,一定需要https訪問的),那這個是怎么實現的呢?下面告訴你一種方法:
聲明:此處說的都是使用pfx方式對tomcat版本安裝SSL證書,別的方式自己百度,個人覺得這種方式更簡單點:
一、首先你的去申請SSL證書,阿里雲上有免費一年的,可以自己去申請,怎么申請這里就不講了,百度很多;只要最后的結果你有如下圖兩個文件就行了;
第一個文件,一般是xxx_你的域名.pfx,這個就是安全證書,別以為證書是那種要你去復印提交的那種!!!!
第二個文件,是使用該證書的密碼,是一個純文本文件,里邊就一串字符串,兩者配套使用,別亂搭!!!!
申請的證書與你使用哪種服務器有關,但是與你使用同一種服務器的各個版本無關,例如(tomcat7或tomcat8,這是沒影響的,也就是說通用)
二、配置tomcat服務器,注意:安裝SSL證書只影響web服務器,並不影響你的項目,所以不需要修改自己的項目
1、將下載的兩個文件上傳到自己tomcat服務器下(sftp可以實現),新建一個cert文件夾(mkdir cert),最好修改一下權限(chmod 777 cert),如下圖:
2、下面開始配置tomcat(首先在沒配置之前,請保證tomcat是能正常訪問的,無論你是否修改的8080端口,這是前提)
下面tomcat7.0及以下版本 和tomcat8以上版本配置存在點下差異,下面有區別,前面都是一樣的:
首先進入遠程服務器,定位到tomcat安裝目錄下conf文件內的server.xml,通過vim命令打開該文件:
找到如下標簽進行修改:將port修改為80,目的是后面訪問項目就不用加端口號8080了,修改redirectPort為443,目的是后面通過http訪問的時候能重定向到通過https訪問
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" />
================================================================================================================
從這里開始,tomcat7.0及以下版本按下面配置方式進行:
然后繼續往下找,找到如下圖類似的標簽內容(下圖是已經修改過的),你能找到的應該是被<!--xxx-->這個注釋掉的,只要釋放出來自己修改就行了:
其中port屬性修改為上面redirectPort相同,都是443;protocol不做修改;maxThreads不做修改;SSLEnabled默認,沒有自己添加上;scheme默認;secure默認;
重點來了:keystoreFile屬性自己添加上,值為之前上傳到服務器cert目錄下的pfx文件,建議使用絕對路徑,可以參考上圖做修改;
keystoreType="PKCS12",自己添加上;
keystorePass屬性自己添加上,值為之前上傳到服務器cert目錄下的txt文件內的那串字符串;
后面的clientAuth="false"與sslProtocol="TLS"自己添加上,是否有這個必要,我也不清楚;
=================================tomcat8.0及以上版本按下面配置================================================
從這里開始,tomcat8.0及以上版本按下面配置方式進行:
找到如下圖模塊,釋放注釋,做必要修改,修改內容如下面代碼
1)、將Tomcat中默認的HTTPS端口Connector port 8443修改為443。8443端口不可通過域名直接訪問、需要在域名后加上端口號;443端口是HTTPS的默認端口,可通過域名直接訪問,無需在域名后加端口號。
2)、server.xml文件中Connector port有兩種運行模式(NIO和APR),請選擇NIO模式(也就是protocol="org.apache.coyote.http11.Http11NioProtocol")這一段進行配置。
3)、certificateKeystoreFile代表證書文件的路徑,請用您證書的路徑+文件名替換證書域名.pfx,例如:certificateKeystoreFile="/usr/local/tomcat/cert/abc.com.pfx"
4)、certificateKeystorePassword為SSL證書的密碼,請用您證書密碼文件pfx-password.txt中的密碼替換,例如:certificateKeystorePassword="bMNML1Df"
5)、證書類型為PFX格式時,certificateKeystoreType修改為PKCS12。
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true"> <SSLHostConfig> <Certificate certificateKeystoreFile="/usr/local/tomcat/cert/證書域名.pfx" certificateKeystorePassword="證書密碼" certificateKeystoreType="PKCS12" />
</SSLHostConfig>
</Connector>
==============================tomcat8.0以上到此結束,后面是共同的=================================================
然后繼續往下找,找到如下圖,將redirectPort修改成與上面相同的443就行了:
到此處就算修改完成了,按esc鍵退出編輯模式,然后使用:wq保存並退出即可;
(接下來這一步,可做可不做,做了的好處是使用http訪問會被強制轉換為https訪問)
通過vim命令打開conf目錄下的web.xml文件,通過shift+g定位到該文件最后,找到</welcome-file-list>該結束標簽,並在后面追加如下代碼
<login-config> <!-- Authorization setting for SSL --> <auth-method>CLIENT-CERT</auth-method> <realm-name>Client Cert Users-only Area</realm-name> </login-config> <security-constraint> <!-- Authorization setting for SSL --> <web-resource-collection > <web-resource-name >SSL</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>
到這一步整個配置過程已經算是完成了,現在重啟tomcat服務器(./shutdowm.sh ./startup.sh),啟動成功后,使用瀏覽器訪問一下,看是否成功;
1、我遇到的坑:tomcat啟動成功,但就是死活訪問不到,原因是防火牆443端口沒有開放,使用firewall-cmd --zone=public --add-port=443/tcp --permanent命令開放443端口,然后重新訪問試一下,這下是否可以訪問了。。。。。。。
2、可能的坑:tomcat正常啟動,防火牆端口也開放了,但還是訪問不到,那你最好看一個上阿里雲平台看一個你的安全組是否設置為允許開放該端口了!!!!有時候你剛裝tomcat服務器,發現正常啟動,8080端口也開了,但還是訪問不到,最可能的原因就是安全組沒開了,這一點切記切記。。。。。。。
3、一切都沒問題,但還是訪問不了,別急,等15分鍾后重新訪問試一下,可能tomcat表面上給你顯示啟動成功了,實際上是還在啟動中。。。。。。。。。