在tomcat中實(shí)現(xiàn)https安全連接的方法
閱讀次數(shù)1797
出處 trace
SSL簡(jiǎn)介
SSL, 或者Secure Socket
Layer,,是一種允許web瀏覽器和web服務(wù)器通過(guò)一個(gè)安全的連接進(jìn)行交流的技術(shù),。這意味著將被發(fā)送的數(shù)據(jù)在一端被翻譯成密碼,,傳送出去,,然后在另一
端解開(kāi)密碼,再進(jìn)行處理,。這是一個(gè)雙向的過(guò)程,,也就是瀏覽器和服務(wù)器都需要在發(fā)送數(shù)據(jù)之前對(duì)它們進(jìn)行加密,。
SSL協(xié)定的另一個(gè)重要方面是認(rèn)證(Authentication)。這就是說(shuō),,在你開(kāi)始試圖通過(guò)一個(gè)安全連接與一個(gè)web服務(wù)器交流的時(shí)候,,這個(gè)服務(wù)器會(huì)要求你的瀏覽器出示一組證件,通過(guò)“鑒定”的方式來(lái)證明這就是你所聲明的網(wǎng)站,。
在某些情況下,,服務(wù)器還會(huì)要求你的web瀏覽器的認(rèn)證書(shū),證明你就是你所說(shuō)的那個(gè)人,。這就是所知的“客戶認(rèn)證”,,盡管實(shí)際情況中,更多地用在商務(wù)-對(duì)-商務(wù)(B2B)交易,,而不是對(duì)個(gè)人用戶,。
但大多數(shù)有SSL功能的web服務(wù)器不要求客戶認(rèn)證(Client Authentication)。
證書(shū)
為了能實(shí)施SSL,,一個(gè)web服務(wù)器對(duì)每個(gè)接受安全連接的外部接口(IP
地址)必須要有相應(yīng)的證書(shū)(Certificate),。關(guān)于這個(gè)設(shè)計(jì)的理論是一個(gè)服務(wù)器必須提供某種合理的保證以證明這個(gè)服務(wù)器的主人就是你所認(rèn)為的那個(gè)
人。這個(gè)證書(shū)要陳述與這個(gè)網(wǎng)站相關(guān)聯(lián)的公司,,以及這個(gè)網(wǎng)站的所有者或系統(tǒng)管理員的一些基本聯(lián)系信息,。
這個(gè)證書(shū)由所有人以密碼方式簽字,其他人非常難偽造,。對(duì)于進(jìn)行電子商務(wù)(e-commerce)的網(wǎng)站,,或其他身份認(rèn)證至關(guān)重要的任何商業(yè)交易,認(rèn)證書(shū)要
向大家所熟知的認(rèn)證權(quán)威(Certificate Authority
(CA))如VeriSign或Thawte來(lái)購(gòu)買(mǎi),。這樣的證書(shū)可用電子技術(shù)證明屬實(shí),。實(shí)際上,認(rèn)證權(quán)威單位會(huì)擔(dān)保它發(fā)出的認(rèn)證書(shū)的真實(shí)性,,如果你信任發(fā)
出認(rèn)證書(shū)的認(rèn)證權(quán)威單位的話,,你就可以相信這個(gè)認(rèn)證書(shū)是有效的。
在許多情況下,,認(rèn)證并不是真正使人擔(dān)憂的事,。系統(tǒng)管理員或許只想要保證被服務(wù)器傳送和接收的數(shù)據(jù)是秘密的,不會(huì)被連接線上的偷竊者盜竊到,。慶幸的是,,
Java提供相對(duì)簡(jiǎn)單的被稱為keytool的命令行工具,可以簡(jiǎn)單地產(chǎn)生“自己簽名”的證書(shū),。自己簽名的證書(shū)只是用戶產(chǎn)生的證書(shū),,沒(méi)有正式在大家所熟知
的認(rèn)證權(quán)威那里注冊(cè)過(guò),因此不能確保它的真實(shí)性,。但卻能保證數(shù)據(jù)傳輸?shù)陌踩浴?br>
認(rèn)證也許很重要,,也許不重要,,完全決定于網(wǎng)站的需要。
用Tomcat來(lái)配置SSL主要有下面這么兩大步驟:
一,、生成證書(shū)
1,、 在命令行下執(zhí)行:
%Java_home%\bin\keytool -genkey -alias tomcat -keyalg RSA
在此命令中,keytool是JDK自帶的產(chǎn)生證書(shū)的工具,。把RSA運(yùn)算法則作為主要安全運(yùn)算法則,,這保證了與其它服務(wù)器和組件的兼容性。
這個(gè)命令會(huì)在用戶的home directory產(chǎn)生一個(gè)叫做" .keystore "
的新文件,。在執(zhí)行后,,你首先被要求出示keystore密碼。Tomcat使用的默認(rèn)密碼是" changeit
"(全都是小寫(xiě)字母),,如果你愿意,,你可以指定你自己的密碼。你還需要在server.xml配置文件里指定自己的密碼,,這在以后會(huì)有描述,。
2、 你會(huì)被要求出示關(guān)于這個(gè)認(rèn)證書(shū)的一般性信息,,如公司,,聯(lián)系人名稱,等等,。這些信息會(huì)顯示給那些試圖訪問(wèn)你程序里安全網(wǎng)頁(yè)的用戶,,以確保這里提供的信息與他們期望的相對(duì)應(yīng)。
3,、 你會(huì)被要求出示密鑰(key)密碼,,也就是這個(gè)認(rèn)證書(shū)所特有的密碼(與其它的儲(chǔ)存在同一個(gè)keystore文件里的認(rèn)證書(shū)不同)。你必須在這里使用與keystore密碼相同的密碼,。(目前,,keytool會(huì)提示你按ENTER鍵會(huì)自動(dòng)幫你做這些)。
如果一切順利,,你現(xiàn)在就擁有了一個(gè)可以被你的服務(wù)器使用的有認(rèn)證書(shū)的keystore文件,。
二、配置tomcat
第二個(gè)大步驟是把secure
socket配置在$CATALINA_HOME/conf/server.xml文件里,。$CATALINA_HOME代表安裝Tomcat的目錄,。一
個(gè)例子是SSL連接器的<Connector>元素被包括在和Tomcat一起安裝的缺省server.xml文件里。它看起來(lái)象是這樣:
$CATALINA_HOME/conf/server.xml
<-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->
<!--
<Connector
port="8443" minProcessors="5" maxProcessors="75"
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" debug="0" scheme="https" secure="true";
clientAuth="false" sslProtocol="TLS"/>
-->
Connector元素本身,,其默認(rèn)形式是被注釋掉的(commented
out),,所以需要把它周?chē)淖⑨寴?biāo)志刪除掉。然后,,可以根據(jù)需要客戶化(自己設(shè)置)特定的屬性,。一般需要增加一下keystoreFile和
keystorePass兩個(gè)屬性,,指定你存放證書(shū)的路徑(如:keystoreFile="C:/.keystore")和剛才設(shè)置的密碼(如:
keystorePass="123456"),。關(guān)于其它各種選項(xiàng)的詳細(xì)信息,,可查閱Server Configuration Reference。
在完成這些配置更改后,,必須象重新啟動(dòng)Tomcat,,然后你就可以通過(guò)SSL訪問(wèn)Tomcat支持的任何web應(yīng)用程序。只不過(guò)指令需要像下面這樣:
https://localhost:8443
|
|