Nginx下配置SSL證書 調轉到IIS、tomcat二級站點


最近由於客戶需要,購買了商業SSL證書需要配置!  

由於我的網站主域名是部署在IIS下,所以先講解下IIS下的配置過程; 后面由於二級域名的系統在tomcat下,所以又將SSL遷移到了Nginx下!

整體結構如下圖:

  

先百度兩個名詞概念(具體可以另行查閱):

HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer):是以安全為目標的HTTP通道;用於安全的HTTP數據傳輸!HTTPS存在不同於HTTP的默認端口及一個加密/身份驗證層(在HTTP與TCP之間)!HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL!它只能確保你的數據從客戶端發送到服務端的傳輸過程是安全的,並不能保障你的服務器安全性!

SSL(Secure Sockets Layer 安全套接層),及其繼任者傳輸層安全(Transport Layer Security,TLS)是為網絡通信提供安全及數據完整性的一種安全協議。TLS與SSL在傳輸層對網絡連接進行加密

SSL證書:SSL證書是數字證書的一種,因為配置在服務器上,也稱為SSL服務器證書。

ssl證書分類

擴展驗證型(EV:Extended Validation SSL)SSL證書

組織驗證型(OV:Organization Validation SSL)SSL證書

域名驗證型(DV:Domain Validation SSL)SSL證書

我們買的是OV版 通配型 即支持二級域名使用!

 

先看下https和ssl證書的展現效果:

 

 

當網站使用SSL證書時,客戶端會自動識別 出現 安全鎖標識!告訴你這是個可信任站點!

 

 

這里可以看到 SSL證書的加密算法為強度256位的RSA非對稱加密!並可以看到證書的使用者、頒發者、有效期等相關的信息!

 

具體的配置過程

由於是購買的商業證書,所以要配合代理商完成證書申請,並按照要求完成域名驗證!最終會下發SSL證書文件及密鑰文件

代理商會將各種環境下的文件都給你:

 

 

一、IIS下配置SSL證書

先看下IIS下的證書文件:

 

 

是一個后綴為.pfx的 微軟平台下的 包含公鑰和私鑰的證書文件!

 

1):進入Windows管理控制程序:開始->cmd->MMC/MMC.exe

2):在打開的控制台窗口中:文件->添加/刪除管理單元

3):在新窗口的左邊 可用的管理單元 中 選擇 “證書” 點擊添加 ;在新彈出的窗口中選擇 “計算機賬戶”

  

 

完成后 ,點擊確定,返回主控制台;

4):在 主控制台中 根節點下 選擇 證書->個人->證書 右鍵 ->所有任務->導入!

 

 

在彈出的證書導入向導中 點擊下一步 選擇 供應商提供給你的 .pfx文件!點擊 下一步 填寫你的私鑰密碼!

 

完成后 主控制台的個人證書 里面會包含你的證書!

 

5): IIS域名綁定控制

  

 

 

在IIS對應的站點下,添加綁定,選擇https填寫你的域名后,選擇剛才添加的SSL證書;點擊完成既可!

 

至此你的SSL證書在IIS中就配置完成了!

 

值得注意的是 https默認的端口為443端口,需要防火牆設置並在外網映射此端口;

 

 

二:nginx下配置SSL證書 跳轉到IIS站點

 最后由於我向通過nginx反向代理到網站 並配置SSL證書,所以過程如下!

1:關閉IIS中配置的 80、443 兩個端口的綁定;只保留一個內網端口綁定!

2:從nginx官網下載最新的 安裝文件!可以參考其它的配置手冊;

下載地址:http://nginx.org/en/download.html

 

  關於nginx版本的選擇: 這里默認推薦最新版本的nginx-1.12.2版本,但是由於客戶很多是使用IE8的群體,但是nginx1.11.0之后的版本不支持SSL證書的 3DES弱安全配置;所以我這里選擇了 1.10.3的版本!

 

3:將供應商提供的 xxx.key 和 xxx.crt 文件拷貝到 nginx的 conf配置文件目錄下

然后配置nginx.conf配置文件; 其它參照默認配置,此處增加 https server;

#門戶網站HTTPS配置

server {

    listen 443;

    server_name www.xxxdomain.com;

    ssl on;

    ssl_certificate _.xxxdomain.com_bundle.crt;

    ssl_certificate_key _.xxxdomain.com.key;

 

    ssl_session_cache shared:SSL:1m;

    ssl_session_timeout 5m;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    ssl_ciphers ECDH:AESGCM:HIGH:RSA+3DES:!RC4:!DH:!MD5:!aNULL:!eNULL;

    ssl_prefer_server_ciphers on;

 

    location / {

        proxy_redirect off;

        proxy_set_header Host $host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_pass http://192.168.1.35:88;

        client_max_body_size 1000m;

    }

}

 

 

此配置為支持xp系統下ie8的https訪問; 若拋棄xp系統下的ie8可 使用最新的nginx版本 並配置ssl_ciphers如下:

ssl_ciphers AWSGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL;

 

注意此時一定要檢查80、443端口的防火牆開啟情況!在入站規則中進行配置!

 

4:nginx將http請求強制轉到https地址

在nginx中 增加server如下:

#http請求強行轉到https

server {

    listen 80 default_server;

    server_name www.xxxdomain.com xxxdomain.com;

    rewrite ^/(.*) https://$server_name$request_uri? permanent;

}

 

三:nginx配置https跳轉到tomcat二級域名站點

  因為使用了nginx作為代理,所以為了簡單部署就沒有在tomcat上部署ssl證書了!由nginx和用戶建立鏈接,並完成ssl握手,然后將請求以http協議轉發給tomcat;tomcat響應內容通過nginx進行ssl加密返回給客戶端!

  按照nginx的配置,增加以下server內容:

server {
    listen 443;
    server_name AA.xxxdomain.com;
    ssl on;
    ssl_certificate _.xxxdomain.com_bundle.crt;
    ssl_certificate_key _.xxxdomain.com.key;

    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDH:AESGCM:HIGH:RSA+3DES:!RC4:!DH:!MD5:!aNULL:!eNULL;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme; 
        proxy_pass http://192.168.1.32:8181;
    }
}
    

  

tomcat配置

在tomcat的server.xml 的 Engine 模塊下配置一個 Value:

<Engine name="Catalina" defaultHost="localhost">

    <Valve className="org.apache.catalina.valves.RemoteIpValve"

        remoteIpHeader="X-Forwarded-For"

        protocolHeader="X-Forwarded-Proto"

        protocolHeaderHttpsValue="https" />

</Engine>

#X-Forwarded-For 獲得實際用戶的 IP

#X-Forwarded-Proto 識別實際用戶發出的協議是 http 還是 https    

這樣配置后就可以通過https方式訪問二級域名站點了;https://AA.xxxdomain.com

 

部署過程中遇到的問題:

1):http的js,css 等靜態資源被瀏覽器攔截無法訪問

因為通過代理 模式,tomcat無法區分用戶是通過https還是http訪問的!默認使用了http響應了靜態資源,就出現了無法訪問的現象!

解決方法:tomcat 和nginx 雙方都增加配置X-Forwarded-Proto ;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;#實際用戶的 IP

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #實際用戶的 IP

proxy_set_header X-Forwarded-Proto $scheme; #實際的協議 http還 https

這些配置可以保障代碼中request對象能夠獲取到用戶的真實請求信息

 

2):端口使用問題

需要tomcat中配置redirectPort、proxyPort為443端口;如果使用非443端口則需要在上面的Value中增加httpsServerPort指定端口

<Connector port="8181" protocol="HTTP/1.1"

    connectionTimeout="20000"

    redirectPort="443"

    proxyPort="443" />

<Engine name="Catalina" defaultHost="localhost">

<Valve className="org.apache.catalina.valves.RemoteIpValve"

    remoteIpHeader="X-Forwarded-For"

    protocolHeader="X-Forwarded-Proto"

    protocolHeaderHttpsValue="https" httpsServerPort="443"/>

    如果非443端口 需要添加httpsServerPort 指定對應端口

</Engine>

 

3):nginx upstream timed out 問題

在部署好之后,系統可以訪問,但是非常慢,需要幾十秒,但是http返回狀態仍然是200!

錯誤日志:

upstream timed out (10060: A connection attempt failed because the connected party did not properly respond after
a period of time, or established connection failed because connected host has failed to respond)
while reading response header from upstream, client: 115.193.163.195, server: AA.domain.com,
request: "POST /dataTrans/translogList HTTP/1.1", upstream: "http://[::]:8181/dataTrans/translogList",
host: "AA.domain.com", referrer: "https://AA.domain.com//dataTrans/index"

 

查了下具體是因為:nginx配置代理地址:proxy_pass http://localhost:8181;windows 把 localhost 解析為 ipv6 地址 ::1 用於本地回路測試了,所以會導致超時,如果使用ipv4的地址,速度就可以了!

將 proxy_pass http://localhost:8181; 改為 proxy_pass http://127.0.0.1:8181;

 

至此所有站點HTTPs部署完畢

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM