一、前言
針對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 這個命令,說明你已經了解並確認這是個不安全的網站,你仍要訪問就給你訪問了。