openssl 創建ssl證書

 

http://han-zw.iteye.com/blog/640737 轉自這裏

前段時間接觸webservice,需要建立基於ssl的webservice以保證安全性,並要提供數字的支持。關於這部分以前沒有搞過,經過摸索總算有些收穫。現在把我的一些經驗share一下。

一、 數字證書的相關準備
關於數字證書部分我是用openssl做的,也是個開源的軟件,前不久剛剛發佈了1.0版本(做了11年才正式發佈,由衷的佩服,老外真是有股哏勁)。網上很多文章介紹用java自帶的keytool命令完成,我沒有試過,不過看文章介紹好像keytool沒有CA認證的功能。下面開始數字證書相關操作。


1. 下載、安裝openssl(好像是廢話)
Openssl建議大家用1.0版本,畢竟是正式版本。我用的時候正式版還沒出來,當時用的是OpenSSL 0.9.8m,不要用OpenSSL 0.9.8h這個版本(有個bug,會影響到後面的操作)。安裝後從命令行進入安裝目錄下的bin目錄。Ready! GO!。


2.創建CA的私鑰
執行以下命令openssl genrsa -des3 -out ../demo/ca/ca.key 1024
demo是我的工作目錄,接下來會提示你輸入密碼,後面用到的密碼會很多,最好都認真記下來。


3.創建CA證書
openssl req -new -x509 -key ../demo/ca/ca.key -out ../demo/ca/ca.crt -days 365
x509是一種加密的標準,-out是指輸出的文件路徑,-key是指定私鑰,也就是上一步生成的那個,-days是指證書有效期。
注:再輸入common name時你可以指定你自己的名字,但是不能輸入你的服務器名(www.XX.X.com)


4.創建server端的私鑰
因爲咱們是要在server端提供SSL的webservice,所以在server端需要使用私鑰庫和信任庫。
openssl genrsa -des3 -out ../demo/server/server.key 1024

 

5.創建server證書籤名請求
我們可以發送簽名請求到一個官方的CA機構,這些機構都是要收費的,而且還要嚴格審覈,至於我們自己開發過程中的話實在是沒必要。我們直接發送到我們剛纔通過openssl構建的CA就可以了。
openssl req -new -key ../demo/server/server.key -out ../demo/server/server.csr
注意這裏的common name,此處填寫你的服務器的ip或者域名,例如localhost,也就是你要爲哪臺服務器做證書就指定那臺機器。

 

6.CA簽署server證書
如果是第一次通過CA簽署證書的話,執行如下命令
openssl x509 -req -days 30 -in ../demo/server/server.csr -CA ../demo/ca/ca.crt -CAkey ../demo/ca/ca.key -CAcreateserial -out ../demo/server/server.crt
其中的-CAcreateserial是指創建一個新的序列文件。這樣openssl會在當前目錄下創建一個名爲ca.srl的文件存儲序列號(官方是這樣說的,我本地產生的序列文件是.srl,搞不清怎麼回事,可能是創建時沒指定名字吧,不過不影響後面的操作)。下次再次簽署證書時就可以直接指定這個序列文件了。命令如下:openssl x509 -req -days 30 -in ../demo/server/server.csr -CA ../demo/ca/ca.crt -CAkey ../demo/ca/ca.key -CAserial .srl -out ../demo/server/server.crt
輸入CA私鑰的密碼後簽署成功。

 

7.創建server端的pkcs12文件
openssl pkcs12 -export -in ../demo/server/server.crt -inkey ../demo/server/server.key -out ../demo/server/server.p12 -name demo_server
注意其中的-name demo_server,這個是指定keystore的別名,記下來,很重要哦(weblogic要用到,網上的資料都沒有這個參數,害得我weblogic配置時費老了勁了)。

 

8.轉換pkcs12爲JKS keystore文件
這個過程需要用到jetty.jar,下載相應jar後添加到classpath,然後執行如下命令
java org.mortbay.util.PKCS12Import ../demo/server/server.p12 ../demo/server/server.jks
在此處輸入上一步設置到export password。

Server端相關文件就完成了,現在可以用java的keytool命令查看一下生成的server.jks的內容
keytool -v -list -keystore ../demo/server/server.jks
接下來開始準備client端的相關文件,因爲我們啓用了數字證書的機制,client在通過webservice訪問server時也需要提供自己的證書,也就是server和client相互認證(客戶要求的,唉)。客戶端的相關操作與server端類似,不做過多說明。

 

9.創建client端的私鑰
openssl req -new -newkey rsa:1024 -nodes  -out ../demo/client/client.req -keyout ../demo/client/client.key

 

10.創建client端證書籤名請求
openssl x509 -CA ../demo/ca/ca.crt -CAkey ../demo/ca/ca.key -CAserial .srl -req -in ../demo/client/client.req -out ../demo/client/client.pem -days 365

 

11.創建client端的pkcs12文件
openssl pkcs12 -export -clcerts -in ../demo/client/client.pem -inkey ../demo/client/client.key -out ../demo/client/client.p12 -name

 

12.創建client端的jks文件
java org.mortbay.util.PKCS12Import ../demo/client/client.p12 ../demo/client/client.jks

 

13.創建信任密鑰庫
這次用到java的keytool命令
keytool -genkey -alias dummy -keyalg RSA -keystore ../demo/server/truststore.jks
到此爲止數字證書的部分就完成了,下面介紹一下tomcat如何配置ssl支持。

 

14.將CA認證過的證書導入信任庫

keytool -import -v -trustcacerts -alias my_ca -file ../demo/ca/ca.crt -keystore ../demo/server/truststore.jks

通過下面的命令可以查看信任庫的詳細信息

keytool -v -list -keystore ../demo/server/truststore.jks


二、 tomcat ssl支持的配置

1. 在tomcat的server.xml中添加一個新的connector,配置如下
<Connector  port="8443" maxHttpHeaderSize="8192" 
SSLEnabled="true"
         maxThreads="150" 
         minSpareThreads="25" 
         maxSpareThreads="75" 
         enableLookups="false" 
         disableUploadTimeout="true" 
         acceptCount="100" 
         scheme="https" 
         secure="true" 
         clientAuth="false" 
         sslProtocol="TLS" 
         keystoreFile="/conf/server.jks" 
         keystorePass="XXXXXX" 
         algorithm="SunX509" 
     /> 
注:keystoreFile對應server端的jks文件,keystorePass對應其密碼

2. 重啓tomcat,在瀏覽器中敲入https://localhost:8443/測試一下
通過https訪問web功能時需要在瀏覽器中導入證書,因爲我們主要解決webservice的ssl,關於瀏覽器如何導證書就不做介紹了。
Tomcat的配置就這麼簡單。

三、 weblogic9.2 ssl配置
weblogic通過控制檯就可以完成ssl的配置,以下是部分截圖
1. 登錄weblogic控制檯 ,點擊頁面左端所屬域下的:環境&gt;&gt;服務器&gt;&gt; 點擊所屬服務器進行編輯,在常規選項卡中作如下配置,如圖(注意紅色區域):
[img]/admin/blogs/7.jpg&quot; alt=&quot;圖7[/img]

 

2. 切換到私鑰庫選項卡
[img]/admin/blogs/8.jpg&quot; alt=&quot;圖8[/img]
注:1.密鑰庫選擇“自定義標識和自定義信任”
      2.密鑰庫的位置可以用絕對路徑也可以用相對路徑
      3.密碼就是我們在數字證書部分的密碼


3. 切換到SSL選項卡

[img]/admin/blogs/9.jpg&quot; alt=&quot;圖9[/img]

注意那個私鑰別名,就是我們在數字證書部分指定的server私鑰的那個別名

好了,保存設置後重啓就可以了。訪問https://localhost:7002/試一下吧。

終於寫完了,以前老是在javaeye中看別人的文章,還老挑毛病,今天第一次寫博客,沒想到這麼累啊,實在是不會貼圖,搞了半天都不行,還是直接傳附件吧!

這次算是投石問路吧,好的話下週再寫一下利用cxf建立SSL的webservice(數字證書以及鑑權機制)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章