如何讓你的網站支持https
當今世界的主流網站基本都是使用https對外界提供服務,甚至有某些公司建議完全使用https, 那么https是什么呢?請參考如下的圖解,https是在我們通常說的tcp/ip協議中的傳輸層和應用層之間加入的一層,在這層的客戶端瀏覽器和服務器端進行了加密,如圖可以看出,加密的作用只能體現在應用層以下,也就是說tcp層看到的是加密數據,應用層看到的還是明文,也就是說https對於應用層來說是透明的,通常我們的http request, request header,key-value還都是明碼,也就是說在應用層上http和https發送的數據是一致的,區別僅僅體現在tcp層以下,我們來看個兩個請求來說明。
https request
http request
對於http和https如果我們分別在tcp層抓包,我們就可以看到http是不加密的,而https是加密的。
接下來我們來說說SSL層是如何加密的,我們都知道非對稱加密,一般網站如果希望支持https就需要向權威機構購買證書,證書包含一個公鑰和私鑰對,公鑰發送給客戶端,客戶端使用這個公鑰進行加密,服務端使用私鑰進行解密,那么有人會問了,為什么還要向權威機構申請呢,自己構造一個得了唄,可以的, 如果你只是自己使用,但是如果你想讓很多人都使用,這些人又不認識你,怎么辦呢?你怎么證明你是你呢?這個時候權威機構就派上用場了,我們安裝的瀏覽器默認都是信任一些主流的權威機構的,他給你發了證書,你就可以證明你是你了,好了,這下應該講清楚了。
下面以JavaEE網站為例談談支持HTTPS需要哪些配置或者代碼。買完證書如果希望自己的網站支持https其實並不需要改動代碼,除非你有特殊需求,比如你的哪些urls需要支持https剩余的一些需要http,其實這種需求整的很少見,但是確實是有的。Tomcat中加入如下的配置,你的網站就可以支持https了,這里面的c:\testkeystore是你存放key的地方。
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="c:\testkeystore" keystorePass="solidmango" />
那么當你配置好了以后怎么知道自己的網站是否已經完整的支持了https了呢?打開瀏覽器,看到如下的配置就說明你的htttps配置成功了。
總結
本文從理論到實踐完整的討論了https的台前幕后的細節,希望對大家有所幫助,共同進步。