新版Google瀏覽器跨域Cookie解決方案


一、前言

針對Chrome版本67及以上

不能將其他域的Cookie傳遞過來

注意,這個里面的SameSite不能設為null,設空的話,還是會走默認值Lax

其中,SameSite的值可以填3個:Strict、Lax、None.
缺省的值為Lax,而且當你設置其為空時,在新的Chrome中還是會給予默認值Lax.

注意:IE和FireFox等可以直接跨域攜帶Cookie

1.1、前端請求

前端發送的請求必須告知攜帶了Cookie並進行跨域請求

xhrFields: {
    withCredentials: true
},
crossDomain: true,

例如:ajax

        function getTest() {
            $.ajaxSetup({
                type: 'get',
                url: 'https://manage.hk.com:8443/s/test',
                // 跨域攜帶Cookie
                xhrFields: {
                    withCredentials: true
                },
                crossDomain: true,
                success: function (res) {
                    console.log(res);
                    $("#test").html(res);
                    return false;
                },
                error: function () {
                    alert('請求錯誤');
                    return false;
                }

            });
            $.ajax();
        }

        function postTest() {
            $.ajaxSetup({
                type: 'post',
                url: 'https://manage.hk.com:8443/s/test1',
                // 跨域攜帶Cookie
                xhrFields: {
                    withCredentials: true
                },
                crossDomain: true,
                success: function (res) {
                    console.log(res);
                    $("#test").html(res);
                    return false;
                },
                error: function () {
                    alert('請求錯誤');
                    return false;
                }
            });
            $.ajax();
        }
    <button onclick="getTest()">Get</button>
    <button onclick="postTest()">POST</button>
    <p id="test"></p>

1.2. 三模式介紹

Strict(嚴格模式)

Lax(寬松模式 默認)

None(可以在第三方環境中發送cookie 在這種模式下,必須同時啟用Secure才行)

Chrome 計划將Lax變為默認設置。這時,網站可以選擇顯式關閉SameSite屬性,將其設為None。不過,前提是必須同時設置Secure屬性(Cookie 只能通過 HTTPS 協議發送),否則無效。

二、Tomcat下配置

位置:apache-tomcat-8.5.66\conf目錄下

找到context.xml文件打開

<!-- 加入 -->
<CookieProcessor sameSiteCookies="None"/>

找到web.xml文件打開

<!-- 找到如下配置 大概在627行左右 -->
<session-config>
    <session-timeout>30</session-timeout>
</session-config>

<!-- 修改為該配置  -->
<session-config>
    <session-timeout>30</session-timeout>
    <cookie-config>
        <secure>true</secure>
    </cookie-config>
</session-config>

注意:此時Cookie 只能通過 HTTPS 協議發送

三、Http變Https

3.1、生成SSL證書

通過JDK生成一個SSL證書

自帶的keytool命令生成

在需要保存SSL證書的文件目錄下打開CMD命令窗口輸入一下指令

keytool -genkey -alias tomcat -keyalg RSA

Tomcat口令和密鑰口令盡量保持一致,回車即可

不然在tomcat配置完server.xml之后有可能會導致啟動失敗

 

 注意:密鑰庫口令和新口令必須一直,具體我也不清楚哈

每一個輸完按回車鍵進入下一項即可

此時在該目錄下回看到一個名為 ".keystore" 的證書文件

3.2、配置Tomcat

位置:apache-tomcat-8.5.66\conf目錄下

找到server.xml文件打開

<!--  找到如下文件 大概在91行左右  -->
<!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
                         type="RSA" />
        </SSLHostConfig>
</Connector> -->

<!--  打開注釋,缺少那個補那個,也可直接復制替換所有 -->
<!-- Define a SSL HTTP/1.1 Connector on port 8443 -->
    <Connector port="8443"
    protocol="org.apache.coyote.http11.Http11Protocol"
               maxThreads="150" 
               SSLEnabled="true" 
               scheme="https" secure="true"
               keystoreFile="C:\Users\Master\.keystore" 
               keystorePass="123456"
               clientAuth="false" sslProtocol="TLS" />
keystoreFile :SSL證書所在磁盤路徑
keystorePass :設置的口令

對於protocol有多種配置方法,如是否啟用apr的方式,不同的方式有不同的配置,具體可以參考官方文檔
http://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html ,這里我采用Http11Protocol,它采用的是BIO的方式處理網絡連接請求。至於bio,nio,apr三種方式的區別是什么不在本文討論之列

注意:在Tomcat里配置完成后,如果你使用的idea,記得勾選下面,否則,好像無法加載上面改動的配置信息,具體大家可以自己研究

然后啟動tomcat,在啟動過程輸出的信息中可以看到多了一個監聽在8443端口上的連接處理器,如下圖所示:

在中間那一行出現了[“http-bio-8443”]這就是用來處理https安全連接的處理器的名字。8443代表的是在Connector中port指定的值,可以配置成其他的,生產環境中顯然是配置成默認的443端口。”http-bio-8443”中間的“bio”是因為我們上面配置的是org.apache.coyote.http11.Http11Protocol,它采用的就是bio的方式來處理網絡連接請求。(最前面的“http”感覺輸出“https”比較合適一點)

此時通過https://codecrazy.cn:8443訪問tomcat還是沒有建立安全的連接,因為瀏覽器中並沒有安裝證書,https的原理以及如何通過CA認證等不在本文討論之列。本文采用的是一種叫做自簽名證書的方法。

3.3、導出SSL證書

通過JDK的keytool指令生成並導出證書

# 一下命令我是在SSL證書所在位置下使用的,所在沒有文件路徑,默認所在路徑
# -keystore 'SSL證書位置'   -file 'SSL證書導出位置及以.crt為后綴的文件如tomcat.crt'    -storepass  '口令'
keytool -export -alias tomcat -keystore .keystore -file tomcat.crt -storepass 123456

3.4、將文件導入到瀏覽器中

不同的瀏覽器會有略有差別

一下以Google瀏覽器做案例

在地址欄輸入chrome://settings/進入設置界面

搜索欄搜索 “安全”

 

 

 

點擊進入之后下翻找到 “管理證書” 點擊

 

 *切換到如下圖紅框所示“受信任的根證書頒發機構”*

 

 

 點擊導入,再點擊下一步,選擇“瀏覽”找到我們上面生成的tomcat.crt文件,然后一路“下一步”,最后完成。 

需要的話,可以重啟瀏覽器后使用https訪問應用

3.5、配置應用使用SSL

打開應用的web.xml加入一下配置

<!-- 允許通過SSL連接 -->
  <security-constraint>
    <web-resource-collection>
      <web-resource-name>securedapp</web-resource-name>
      <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
      <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
  </security-constraint>

將 URL 映射設為 /* ,這樣你的整個應用都要求是 HTTPS 訪問,而 transport-guarantee 標簽設置為 CONFIDENTIAL 以便使應用支持 SSL。

如果你希望關閉 SSL ,只需要將 CONFIDENTIAL 改為 NONE 即可。

重啟Tomcat即可

至此大功告成

雖然 JDK 的 keytool 工具也可以免費制作自簽名的證書,但這只能用在練習或者測試中,因為如果數字證書頒布商不在瀏覽器的信任列表中,是會給用戶彈出警告框的。作為電子商務網站肯定要用商業的數字證書!

3.6、如訪問出現如下提示


您的連接不是私密連接
攻擊者可能會試圖從 x.x.x.x 竊取您的信息(例如:密碼、通訊內容或信用卡信息)。了解詳情
NET::ERR_CERT_INVALID

將您訪問的部分網頁的網址、有限的系統信息以及部分網頁內容發送給 Google,以幫助我們提升 Chrome 的安全性。隱私權政策
x.x.x.x 通常會使用加密技術來保護您的信息。Google Chrome 此次嘗試連接到 x.x.x.x 時,此網站發回了異常的錯誤憑據。這可能是因為有攻擊者在試圖冒充 x.x.x.x,或 Wi-Fi 登錄屏幕中斷了此次連接。請放心,您的信息仍然是安全的,因為 Google Chrome 尚未進行任何數據交換便停止了連接。

您目前無法訪問 x.x.x.x,因為此網站發送了 Google Chrome 無法處理的雜亂憑據。網絡錯誤和攻擊通常是暫時的,因此,此網頁稍后可能會恢復正常。

 

 或 ‘不是安全連接等’

解決方案:

1、可以不用管,因為我們知道該網站是安全的,點擊隱藏詳情,高級,繼續前往即可

2、解決方法參考百度經驗:https://jingyan.baidu.com/article/fdffd1f8f704f7b3e98ca1c6.html

3、在當前頁面用鍵盤輸入  thisisunsafe  ,不是在地址欄輸入,就直接敲鍵盤就行了,頁面即會自動刷新進入網頁

產生原因:

因為Chrome不信任這些自簽名ssl證書,為了安全起見,直接禁止訪問了,thisisunsafe 這個命令,說明你已經了解並確認這是個不安全的網站,你仍要訪問就給你訪問了。

 3.7、其他Https方法

可參考一下:https://blog.cat73.org/20170716/2017071601.https/


免責聲明!

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



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