阿里雲免費ssl證書+tomcat8.5配置https+通過域名直接訪問項目

近期公司開發微信小程序,需要用到https進行訪問,在這期間遇到很多的坑,下面說說我配置https的填坑之路。

網上免費的證書很多,在此我們用的是阿里雲(之前在自己公司測試服務器上用的是jdk生成自簽發證書,但這個不能通過安全驗證),申請阿里雲免費的證書綁定指定你購買的域名;Tomcat8.5和Tomcat9配置一樣。

(1)申請證書

在申請證書的時候有一步驗證的操作,上傳驗證文件fileauth.txt到相應的目錄:該目錄從站點的根目錄(Tomcat下webapps/ROOT)算起,在站點的根目錄下創建.well-known/pki-validation子目錄,並把fileauth.txt文件上傳到目錄下。開始利用ftp直接創建.well-known是不能創建該目錄的,需要使用命令mkdir .well-known來創建,rm -rf  .well-known刪除文件夾及文件夾下的目錄文件。開始我誤把webapps當做更目錄了,結果驗證失敗,後來在ROOT下創建的。

(2)申請證書成功之後,下載對應的證書文件在服務器上進行配置

(3)在Tomcat下創建cert文件夾,然後把上面兩個文件上傳進去。

(4)更改Tomcat配置,默認是Tomcat/conf/server.xml。根據阿里給的文檔,測試了很久,也沒有成功,這裏就是一個大坑。最後發現發現tomcat8.5和其他版本不同(我用的是Tomcat8.5,這裏應該是Tomcat8之後,配置就會不同,官方給的文檔只是適用於Tomcat8之前),阿里文檔連接https://help.aliyun.com/knowledge_detail/95496.html

下面開始進行配置,打開Tomcat/conf/server.xml,在server.xml文件中找到以下參數並進行修改。

首先設置端口爲80,以便訪問的時候不用輸入端口號,將redirectPort修改爲SSL默認端口443,讓HTTPS請求轉發到443端口。

<Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="443" />

然後找到<Connector port="8443" 這裏是一段註釋的代碼,是Tomcat給出的兩種配置樣例,可以選擇一個修改,也可以添加下面的代碼,https默認端口443。

<Connector port="443"   #將Tomcat中默認的HTTPS端口Connector port 8443修改爲443。8443端口不可通過域名直接訪問、需要在域名後加上端口號;443端口是HTTPS的默認端口,可通過域名直接訪問,無需在域名後加端口號。
          protocol="org.apache.coyote.http11.Http11NioProtocol"   #server.xml文件中Connector port有兩種運行模式(NIO和APR),請選擇NIO模式(也就是protocol="org.apache.coyote.http11.Http11NioProtocol")這一段進行配置。
          maxThreads="150"
          SSLEnabled="true">
        <SSLHostConfig>
            <Certificate       certificateKeystoreFile="/usr/local/tomcat/cert/證書域名.pfx"   #此處certificateKeystoreFile代表證書文件的路徑,請用您證書的路徑+文件名替換證書域名.pfx
             certificateKeystorePassword="證書密碼"   #此處certificateKeystorePassword爲SSL證書的密碼,請用您證書密碼文件pfx-password.txt中的密碼替換
             certificateKeystoreType="PKCS12" />   #證書類型爲PFX格式時,certificateKeystoreType修改爲PKCS12。
        </SSLHostConfig>
    </Connector>

再將下面代碼進行修改,redirectPort修改爲443,與上面https端口對應,讓HTTPS請求轉發到443端口。

<Connector port="8009" protocol="AJP/1.3" redirectPort="443" />

(可選)添加<Context docBase="項目名稱" path="" reloadable="true"/>,目的是爲了不需要輸入項目名稱進行訪問,這樣配合80端口,就能通過域名直接訪問項目

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
		
		<Context docBase="項目名稱" path="" reloadable="true"/>

      </Host>

最後修改Tomcat/conf/web.xml文件,在web.xml文件最底部添加以下內容,實現HTTP自動跳轉爲HTTPS

    <!--</welcome-file-list> 一定要在這後面追加-->

	<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>

(5)保存server.xml和web.xml文件配置。重啓Tomcat服務。在Tomcat下的bin目錄中執行./shutdown.sh關閉Tomcat服務。再執行./startup.sh開啓Tomcat服務。

(6)最後在瀏覽器中輸入您SSL證書綁定的域名https://www.YourDomainName.com驗證證書安裝結果。瀏覽器地址欄顯示綠色的小鎖標識說明證書安裝成功。

在驗證的時候掉進一個坑了,配置好過後,輸入ip地址能訪問,也解析到https,但就是顯示不安全,輸入域名訪問不了,自認爲自己配置有問題(這裏就是自己掉進了死衚衕)。前前後後多次查看修改步驟也都沒發現錯誤,多次也測試無果。沒辦法先休息一下腦殼,可能宕機了。也是回到家後無意之間想起通過ip地址訪問本身就是不安全的,那爲什麼域名訪問不了,趕緊打開電腦發現是防火牆的443端口沒有開放。所以遇到一直解決不了的問題,不要一直糾結,適當讓自己放鬆一下,這樣不至於掉進死衚衕。

Centos7.5的防火牆放開443端口操作(逐條命令運行即可,分別爲放開443的tcp傳輸、放開443的udp傳輸、重啓防火牆):

①firewall-cmd --permanent --add-port=443/tcp
②firewall-cmd --permanent --add-port=443/udp
③systemctl restart firewalld

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章