本文以msh.com
域名為例
一、修改頁面內的 HTTP 協議為HTTPS協議
HTTPS 下不允許 HTTP 請求,如果有此情況,則會在瀏覽器控制檯報如下錯誤
(index):42 Mixed Content: The page at 'https://b.test.iupiao.cn/' was loaded over HTTPS, but requested an insecure stylesheet 'http://at.alicdn.com/t/font_203680_of0yc4ur0ie.css'. This request has been blocked; the content must be served over HTTPS.
複製程式碼
或者
Mixed Content: The page at 'https://b.test.iupiao.cn/' was loaded over HTTPS, but requested an
複製程式碼
錯誤原因可能如下:
- 當前的HTTPS所承載的頁面,但是在頁面內引用了通過HTTP 協議訪問的靜態資源
- 當前的HTTPS所承載的頁面,傳送了請求路徑為HTTP 協議的Ajax 非同步請求
解決方案
將所有的HTTP 協議的URL全域性替換為HTTPS協議
二、 修改頁面內的ws協議為wss協議
Nginx做全站HTTPS升級的時候,是不涉及到WebSocket相關的配置的
唯一需要做的,就是升級成功後,在前端程式碼裡面把ws://
協議替換為wss://
即可
想深入瞭解的話,請參考這篇文章: WebSocket 和socket、HTTP的區別和聯絡
三、後端改造
本專案用Java
作為後端語言。在後端,通過Spring
的RestTemplate
來做各個後端服務直接的資料請求
全站升級HTTPS後,RestTemplate 請求https路徑下的介面時會報錯,解決方式參見下方程式碼
原理:
- 把RestTemplate 的例項bean的生成方法重寫一遍,使之信任所有的安全證照
- spring在例項化RestTemplate 的時候,會呼叫此方法,
把下面程式碼放到任意一個spring管理下的service或者controller即可,之後spring裡面的所有的RestTemplate 例項就會通過此方法生成
@Bean
public RestTemplate restTemplate()
throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
TrustStrategy acceptingTrustStrategy = (X509Certificate[] chain, String authType) -> true;
SSLContext sslContext = org.apache.http.ssl.SSLContexts.custom()
.loadTrustMaterial(null, acceptingTrustStrategy)
.build();
SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext);
CloseableHttpClient httpClient = HttpClients.custom()
.setSSLSocketFactory(csf)
.build();
HttpComponentsClientHttpRequestFactory requestFactory =
new HttpComponentsClientHttpRequestFactory();
requestFactory.setHttpClient(httpClient);
RestTemplate restTemplate = new RestTemplate(requestFactory);
return restTemplate;
}
複製程式碼
系列文章