SSL是Secure Socket Layer的縮寫.能夠在不可信通道上安全的傳輸數據.SSL主要發生在應用層,以下圖所示: html
主要分爲兩層,上層包括三個子協議:SSL Handshake、SSL Change Cipher spec及SSL Alert。下層爲SSL Record。 java
這是SSL在傳輸數據以前用來溝通雙方所使用的加密算法或祕鑰交換算法,或是在服務器和客戶端之間安全地交換祕鑰和及雙方的身份認證等相關操做。主要流程以下圖: web
根據在Handshake階段中獲得的通信參數,在須要的時候,通訊雙方的任一方能夠發送Change Cipher Spec消息,協商變動接下來會話中使用的新密鑰。 算法
當傳送雙方發生錯誤時,用來傳送雙方發生的錯誤信息,信息包括錯誤嚴重級別和描述。 apache
SSL Record Protocol(SSL記錄協議)主要爲信息的傳輸提供兩個功能:保密性和完整性。保密性經過加密數據保證;完整性經過消息摘要保證。記錄協議是一個基礎協議,爲SSL高層協議提供數據封裝、壓縮、加密等基本功能的支持。好比Handshake協議利用記錄協議的功能在不安全的信道上交換加密參數。 tomcat
記錄協議所作的工做包括: 安全
整個過程參考下圖: 服務器
Tomcat can use two different implementations of SSL:
the JSSE implementation provided as part of the Java runtime (since 1.4)
the APR implementation, which uses the OpenSSL engine by default.
To avoid auto configuration you can define which implementation to use by specifying a classname in the protocol attribute of the Connector.
To define a Java (JSSE) connector, regardless of whether the APR library is loaded or not do:
<!-- Define a blocking Java SSL Coyote HTTP/1.1 Connector on port 8443 -->
<Connector protocol="org.apache.coyote.http11.Http11Protocol" port="8443" .../>
<!-- Define a non-blocking Java SSL Coyote HTTP/1.1 Connector on port 8443 -->
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol" port="8443" .../>
less
以上英文摘抄自tomcat的文檔。 ide
要讓tomcat支持SSL,要配置tomcat的server.xml配置文件。找到一個配置SSL的<Connector>標籤,將註釋去掉,指定密鑰庫路徑、密鑰庫密碼、修改protocol、指定端口。最後配置文件看起來就像下面這樣:
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true" clientAuth="false" keystoreFile="xxx" keystorePass="xxx" maxThreads="150" port="443" scheme="https" secure="true" sslProtocol="TLS"/>
參考資料:
http://www.cisco.com/web/about/ac123/ac147/archived_issues/ipj_1-1/ssl.html
http://www.netadmin.com.tw/article_content.aspx?sn=1106140008
http://www.ehow.com/facts_7842286_ssl-change-cipher-spec-protocol.html
http://alvinhu.com/blog/2013/06/20/one-way-and-two-way-ssl-authentication/
《java加密解密藝術》.樑棟著