在安全通訊中,不得不使用ssl,這樣既保證安全,又顯得專業.在看了多篇關於tomcat配置ssl的文章後,本身又總結了一下.我使用的是tomcat6.0,配置起來有些許差異.
參考網上文章
Tomcat下雙向SSL安全認證
Windwos2000下配置Tomcat 5使用SSL
環境:
linux magic2.01
openssl-0.9.8e
jre1.5.0_05
apache-tomcat-6.0.13
本文目錄:
安裝openssl
創建ca根證書
創建server證書
配置tomcat支持ssl
創建我的證書
安裝openssl
最新版本能夠去www.openssl.org ,我用的是openssl-0.9.8e.tar.gz
tar -xzf openssl-0.9.8e.tar.gz
cd openssl-0.9.8e
./configure --prefix=XXXXX --openssldir=XXXXXXXX
(這裏prefix是你想安裝openssl的地方, openssldir就是你tar開的openssl源碼的地方。好象全部的出名點的free software都是這個操行,configure, make , make test, make install, 搞定。)
./make
./make test
./make install
OK, 若是路上沒有什麼問題的話,搞定。
創建ca根證書
創建一張證書須要三步,1是生成系統私鑰,2生成待簽名證書,須要輸入一些信息,3 生成x509證書,能夠自已簽名,用來作根證書;也可用其它證書來簽名,生成根證書能夠信任的證書.
下面是生成根證書
1生成CA私鑰
openssl genrsa -out ca/cakey.pem 2048
[color=red]genrsa[生成CA私鑰]
-out[生成的私鑰的保存路徑和名字]
2048[密鑰位數] [/color]
2 生成待簽名證書
openssl req -new -out ca/careq.csr -key ca/cakey.pem
req[生成待簽名證書的選項]
-key[採用的CA私鑰的路徑]
3 用CA私鑰進行自簽名
openssl x509 -req -in ca/careq.csr -out ca/cacert.pem -signkey ca/cakey.pem -days 7200
4.將證書導出成瀏覽器支持的.p12格式 :
openssl pkcs12 -export -clcerts -in ca/cacert.pem -inkey ca/cakey.pem -out ca/ca.p12
x509[生成x509的CA根證書]
-in[採用的待簽名證書的路徑]
-out[生成的CA根證書的路徑]
-signkey[採用簽名的私鑰的路徑]
-days[有效時間(天)]
創建server證書
由於tomcat爲java的web容器,因此在實現ssl時,要用到java的安全機制,因此部分操做是用java的keytool來完成的.
1 生成KeyPair
keytool -genkey -alias tomcat_server -validity 7200 -keyalg RSA -keysize 2048 -keypass 123456 -storepass 123456 -dname " CN=116.114.17.133, OU=vg.group, O=unimassystem.inc, L=hangzhou, ST=zhejiang, C=CN" -keystore server/server_keystore
-genkey[生成私鑰對的命令]
-alias[爲生成的私鑰對起個別名]
-validity[密鑰有效期]
-keyalg[加密算法]
-keysize[加密位數]
-keypass[密鑰保護密碼]
-storepass[存儲密碼]
-dname[別名附加的相關信息] 這裏的CN通常要根tomcat服務所在機子的名字同樣,也就是hostname
-keystore[密鑰存儲文件路徑]
2 生成待簽名證書
keytool -certreq -alias tomcat_server -sigalg MD5withRSA -file server/server.csr -keypass 123456 -keystore server/server_keystore -storepass 123456
-file[生成的待簽名證書的路徑]
3 用CA私鑰進行簽名
openssl x509 -req -in server/server.csr -out server/server-cert.pem -CA ca/cacert.pem -CAkey ca/cakey.pem -CAserial ca/ca-cert.srl -CAcreateserial -days 7200
這時便產生了一個服務端證書:server-cert.pem
若是沒有-CAcreateserial選項會出現以下錯誤:
Loading 'screen' into random state - done
Signature ok
subject=/C=CN/ST=shanghai/L=shanghai/O=topfounder/OU=technology/CN=redbeans luo
Getting CA Private Key
ca\ca-cert.srl: No such file or directory
3140:error:02001002:system library:fopen:No such file or directory:.\crypto\bio\{color}
bss_file.c:349:fopen('D:\sslca\ca\ca-cert.srl','rb')
3140:error:20074002:BIO routines:FILE_CTRL:system lib:.\crypto\bio\bss_file.c:351:
4 導入信任的CA根證書到JSSE的默認位置($JDK_HOME/jre/lib/security/cacerts)
keytool -import -v -trustcacerts -storepass 123456 -alias my_ca_root -file ca/cacert.pem -keystore $JAVA_HOME/jre/lib/security/cacerts
這裏,若是$JDK_HOME/jre/lib/security/cacerts已經存在,那麼會報錯:
keytool錯誤: java.io.IOException: Keystore was tampered with, or password was incorrect
解決辦法之一,是將 原cacerts文件刪除便可,那樣以前導入的信任的CA根證書的配置就都沒了,令一個辦法是取一個不一樣與其餘導入的根證書的別名,也就是-alias 後面寫個不一樣的名字(導入多個根證書的時候,就要這麼作了)。
這一步他會詢問:是否將這個根證書設爲可信任的,若是不但願提示,加上選項:-noprompt就能夠了,默認就是Y(yes)。
5 把CA簽名後的server端證書導入keystore
keytool -import -v -trustcacerts -storepass 123456 -alias tomcat_server -file server/server-cert.pem -keystore server/server_keystore
這個步會一個風險,就是你用的keytool不是你剛纔導入ca根證書的jdk的,這樣的話,會報一個錯誤。
若是你不理採的話,證書導不進去。你更改alias能夠導入進行去,但證書在使用中會出現問題,由於證書的發行者是他本身而不是根證書。
6 查看server端證書
keytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacerts
keytool -list -v -keystore server/server_keystore
配置tomcat支持ssl
修改$TOMCAT_ROOT/conf/server.xml
使用java的ssl,而不是opensll
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off" />
<Connector protocol="org.apache.coyote.http11.Http11Protocol"
port="8443" minSpareThreads="5" maxSpareThreads="75"
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" maxThreads="200"
scheme="https"
secure="true" SSLEnabled="true"
存儲路徑
keystoreFile="/rpyca/server/server_keystore"
密碼
keystorePass="123456"
是否須要客戶端驗證
clientAuth="true"
sslProtocol="TLS"/>
創建我的證書
1 生成client私鑰
openssl genrsa -out client/client-key.pem 2048
2 生成待簽名證書
openssl req -new -out client/client-req.csr -key client/client-key.pem
3 用CA私鑰進行簽名
openssl x509 -req -in client/client-req.csr -out client/client.crt -signkey client/client-key.pem -CA ca/cacert.pem -CAkey ca/cakey.pem -CAserial ca/ca-cert.srl -CAcreateserial -days 7200
4 生成client端的我的證書
由於JSSE1.0.2沒有徹底實現了對PKCS#12格式文件的操做(只能讀取,不能輸出),因此在這裏須要用openssl製做client端的我的證書(包含私鑰)。
openssl pkcs12 -export -clcerts -in client/client.crt -inkey client/client-key.pem -out client/client.p12
5 安裝信任的根證書
把D:\sslca\ca\ca-key.pem更名爲D:\sslca\ca\ca-key.cer,在client端的IE中使用"工具 'Internet選項 ' 內容 ' 證書 ' 導入"把咱們生成的CA根證書導入,使其成爲用戶信任的CA。
6安裝我的證書
把client.p12導入到client端的IE中做爲我的證書,導入過程同2.4.5。
啓動Tomcat
執行%TCAT_HOME%\bin\startup.bat啓動Tomcat
用IE訪問Tomcat
在IE瀏覽器的地址欄中輸入https://localhost:8443?,若是前面的操做都正確的話,應該能夠看到Tomcat的歡迎頁面。同時狀態欄上的小鎖處於閉合狀態,表示您已經成功地與服務器創建了要求客戶端驗證的SSL安全鏈接