SSL 通信原理及Tomcat SSL 雙向配置
?
目錄
1 參考資料 .................................................................................................................................. 1
2 SSL(Server Socket Layer)簡介 ................................................................................................... 2
2.1 工作原理 ....................................................................................................................... 2
2.2 SSL 的具體流程圖: .................................................................................................... 4
2.3 SSL 通訊示意圖 ............................................................................................................ 5
2.4 SSL 通訊說明 ................................................................................................................ 5
3 keytool 安全證書學習 ............................................................................................................. 6
3.1 驗證是否已創建過同名的證書 ................................................................................... 6
3.2 刪除已創建的證書 ....................................................................................................... 6
3.3 創建證書 ....................................................................................................................... 6
3.4 常出現的異常: ........................................................................................................... 7
3.4.1 Keytool 是一個Java 數據證書的管理工具。 ................................................. 7
4 為tomcat6 批量生成安全證書 ............................................................................................... 8
4.1.1 第一步:為服務器生成證書 ........................................................................... 8
4.1.2 第二步:為客戶端生成證書 ........................................................................... 9
4.1.3 第三步:讓服務器信任客戶端證書 ............................................................... 9
4.1.4 第四步:配置Tomcat 服務器 ......................................................................... 9
4.1.5 第五步:導入客戶端證書 ............................................................................. 10
4.1.6 第六步: 導出服務器證書給客戶端 .............................................................. 10
4.1.7 第七步:將導入server.cer,為客戶端 創建定制密鑰庫. ............................ 11
4.1.8 第八步:創建Java 客戶端訪問: ...................................................................... 11
4.1.9 測試訪問: ........................................................................................................ 12
4.1.10 SSL 證書錯誤信息 .......................................................................................... 12
5 說明: ...................................................................................................................................... 13
6 不同格式證書導入keystore 方法 ......................................................................................... 13
6.1 Java KeyStore 的類型 .................................................................................................. 14
6.2 證書導入 ..................................................................................................................... 14
6.2.1 Der/Cer 證書導入: ....................................................................................... 14
6.2.2 P12 格式證書導入: ...................................................................................... 15
6.3 P7B 格式證書導入: ................................................................................................. 16
6.4 總結:............................................................................................................................ 16
?
?
1 參考資料
本文部分內容來源于網絡,目的是介紹某些工具及技術的使用與原理。
其中Tomcat 的配置測試及Webservcie 客戶端的調用。經過實戰測試,
客戶端調用Webservice 采用Xfire 框架。僅提供了代碼片段。
?
2 SSL(Server Socket Layer)簡介
?
2.1 工作原理
1、SSL 協議使用不對稱加密技術實現會話雙方之間信息的安全傳遞。可以實現信息傳
遞的保密性、完整性,并且會話雙方能鑒別對方身份。不同于常用的http 協議,我們在與
網站建立SSL 安全連接時使用https 協議,即采用
https://ip:port/
的方式來訪問。
當我們與一個網站建立https 連接時,我們的瀏覽器與Web Server 之間要經過一個握手
的過程來完成身份鑒定與密鑰交換,從而建立安全連接。具體過程如下:
用戶瀏覽器將其SSL 版本號、加密設置參數、與session 有關的數據以及其它一些必要
信息發送到服務器。
服務器將其SSL 版本號、加密設置參數、與session 有關的數據以及其它一些必要信息
發送給瀏覽器,同時發給瀏覽器的還有服務器的證書。如果配置服務器的SSL 需要驗證用戶
身份,還要發出請求要求瀏覽器提供用戶證書。
客戶端檢查服務器證書,如果檢查失敗,提示不能建立SSL 連接。如果成功,那么繼續。
客戶端瀏覽器為本次會話生成pre‐master secret,并將其用服務器公鑰加密后發送給服
務器。
如果服務器要求鑒別客戶身份,客戶端還要再對另外一些數據簽名后并將其與客戶端證
書一起發送給服務器。
如果服務器要求鑒別客戶身份,則檢查簽署客戶證書的CA 是否可信。如果不在信任列
表中,結束本次會話。如果檢查通過,服務器用自己的私鑰解密收到的pre‐master secret,
并用它通過某些算法生成本次會話的master secret。
客戶端與服務器均使用此master secret 生成本次會話的會話密鑰(對稱密鑰)。在雙方SSL
握手結束后傳遞任何消息均使用此會話密鑰。這樣做的主要原因是對稱加密比非對稱加密的
運算量低一個數量級以上,能夠顯著提高雙方會話時的運算速度。
客戶端通知服務器此后發送的消息都使用這個會話密鑰進行加密。并通知服務器客戶端
已經完成本次SSL 握手。
服務器通知客戶端此后發送的消息都使用這個會話密鑰進行加密。并通知客戶端服務器
已經完成本次SSL 握手。
本次握手過程結束,會話已經建立。雙方使用同一個會話密鑰分別對發送以及接受的信
息進行加、解密。
?
2、SSL(Secure Socket Layer)是一種通信交互協議,由Netscape 公司在1994 年制定,主
要目的就是確保在web 服務器和瀏覽器之間數據傳輸安全。SSL 協議層是在TCP/IP 層和應
用層之間。當前TLS(Transport Layer Security)正在逐漸替代SSL(最新版本v3)。
SSL 協議分成以下幾部分:
?
Record Protocal 是SSL 的基礎層,SSL 所有的上層操作都是基于這個層次,這層主要負責消
息內容的分段,壓縮,加密和數字摘要等操作。
Handshake Protocal 故名思義就是握手協議,也是在正式應用數據傳輸前雙方交換加密
設置以及認證的流程規范協議。
Change Cipher Spec Protocol 是基于record 協議層通知遠端服務器修改record 協議層中
安全設置的協議。
Alert Protocol 是基于record 協議發送警告到遠端服務器的協議。
?
2.2 SSL 的具體流程圖:
?
SSL 的流程也體現了對于對稱性密鑰和非對稱性密鑰的使用,由于對稱性密鑰加密比非對稱
性密鑰加密要快1000 倍,那么對稱性密鑰被用來做對內容的加密,而非對稱性密鑰用來做
傳遞對稱性密鑰的加密手段。
服務端所需要具備的是一個擁有服務端的標示,公鑰私鑰對的證書。在握手的流程中,
服務端將帶有公鑰的證書抽取出來發送給客戶端,客戶端就首先可以判斷證書頒發者是否屬
于本機受信的CA,如果不是,就會類似于IE 跳出提示,如果通過了這部分CA 認證,雙方
就可以通過非對稱性加密算法來交換客戶端生成的臨時對稱密碼,進行安全加密信息交互。
?
?
2.3 SSL 通訊示意圖
?
?
2.4 SSL 通訊說明
在該部分,將上圖所示的示意圖進行說明。為了說明的方便,在本文中稱客戶端為B,服務
器端為S。
STEP 1: B——〉S(發起對話,協商傳送加密算法)
你好,S!我想和你進行安全對話,我的對稱加密算法有DES,RC5,我的密鑰交換算法有
RSA 和DH,摘要算法有MD5 和SHA。
STEP2: S——〉B(發送服務器數字證書)
你好,B!那我們就使用DES-RSA-SHA 這對組合進行通訊,為了證明我確實是S,現在
發送我的數字證書給你,你可以驗證我的身份。
STEP 3: B——〉S(傳送本次對話的密鑰)
(檢查S 的數字證書是否正確,通過CA 機構頒發的證書驗證了S 證書的真實有效性后。
生成了利用S 的公鑰加密的本次對話的密鑰發送給S)
S, 我已經確認了你的身份,現在將我們本次通訊中使用的對稱加密算法的密鑰發送給
你。
STEP4: S——〉B(獲取密鑰)
(S 用自己的私鑰解密獲取本次通訊的密鑰)。
B, 我已經獲取了密鑰。我們可以開始通信了。
STEP5: S<——>B(進行通訊)
說明:一般情況下,當B 是保密信息的傳遞者時,B 不需要數字證書驗證自己身份的真
實性,如電子銀行的應用,客戶需要將自己的賬號和密碼發送給銀行,因此銀行的服務器需
要安裝數字證書來表明自己身份的有效性。在某些B2B 應用,服務器端也需要對客戶端的
身份進行驗證,這時客戶端也需要安裝數字證書以保證通訊時服務器可以辨別出客戶端的身
份,驗證過程類似于服務器身份的驗證過程。
?
此外需要說明的是,在一些電子商務的應用中,可能還會使用到電子簽名,或者為了信
息交換的更加安全,會增加電子簽名和消息校驗碼(MAC)。
為了便于了解SSL,下面在簡要介紹一下信息加密相關知識。使用密鑰類型加密信息的加密
算法可以分為以下幾類:HASH 編碼、對稱加密和非對稱加密三類。
HASH 編碼是使用HASH 算法從任意長度的消息中計算HASH 值的一個過程,HASH 值可
以說是消息的指紋,因為對于任何不同的消息,幾乎總有不同的HASH 值。因此在SSL 通訊
過程中,可以對消息的HASH 值進行加密,確保傳遞的消息在傳輸過程中沒有被修改。
非對稱加密或稱之為公鑰加密使用數學上相關的兩個數值來對信息進行編碼(加密),
其中一個數字稱為公鑰,另一個稱為私鑰。公鑰加密的信息可以用私鑰解密,私鑰加密的信
息可以用公鑰解密。由于公鑰可以大面積發放,因此公鑰加密在SSL 加密通信中應用于對密
鑰的加密或者進行數字簽名。
對稱加密和非對稱加密相比的區別在于對稱加密中,加密信息和解密信息使用同樣的密
鑰,因此該密鑰無法公開。但是其具有加密、解密快速的特點。
在SSL 通訊中,首先采用非對稱加密交換信息,使得服務器獲得瀏覽器端提供的對稱加
密的密鑰,然后利用該密鑰進行通訊過程中信息的加密和解密。為了保證消息在傳遞過程中
沒有被篡改,可以加密HASH 編碼來確保信息的完整性。
?
?
3 keytool 安全證書學習
?
3.1 驗證是否已創建過同名的證書
?
keytool -list -v -alias tomcat -keystore "%JAVA_HOME%/JRE/LIB/SECURITY/CACERTS" -storepass changeit
?
3.2 刪除已創建的證書?
?
keytool -delete -alias tomcat -keystore "%JAVA_HOME%/JRE/LIB/SECURITY/CACERTS" -storepass changeit
?
3.3 創建證書
?
?
1.服務器中生成證書:(注:生成證書時,CN要和服務器的域名相同,如果在本地測試,則使用localhost)
keytool -genkey -alias tomcat -keyalg RSA -keystore d:\mykeystore -dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN" -keypass changeit -
?
storepass changeit
2.導出證書,由客戶端安裝:
?
keytool -export -alias tomcat -keystore d:\mykeystore -file d:\mycerts.cer -storepass changeit
?
?
?
?
?
?
?
?
3.4 常出現的異常:
?
?
“未找到可信任的證書”--主要原因為在客戶端未將服務器下發的證書導入到JVM中,可以用
keytool -list -alias tomcat -keystore "%JAVA_HOME%/JRE/LIB/SECURITY/CACERTS" -storepass changeit
來查看證書是否真的導入到JVM中。
?
3.4.1 Keytool 是一個Java 數據證書的管理工具。
?
keystore
?Keytool將密鑰(key)和證書(certificates)存在一個稱為keystore的文件中
在keystore里,包含兩種數據:
密鑰實體(Key entity)——密鑰(secret key)又或者是私鑰和配對公鑰(采用非對稱加密)
可信任的證書實體(trusted certificate entries)——只包含公鑰
?
Alias(別名)
每個keystore都關聯這一個獨一無二的alias,這個alias通常不區分大小寫
?
?
3.4.1.1 keystore 的存儲位置
?
在沒有制定生成位置的情況下,keystore會存在與用戶的系統默認目錄,
如:對于window xp系統,會生成在系統的C:\Documents and Settings\UserName\
文件名為“.keystore”
?
? 3.4.1.2 keystore 的生成
?
?引用
keytool -genkey -alias tomcat -keyalg RSA???-keystore d:\mykeystore -dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN" -keypass changeit -storepass -validity 180
?
?
3.4.1.3 參數說明:
?
?
-genkey表示要創建一個新的密鑰
-dname表示密鑰的Distinguished Names,
CN=commonName
OU=organizationUnit
O=organizationName
L=localityName
S=stateName
C=country
Distinguished Names表明了密鑰的發行者身份
-keyalg使用加密的算法,這里是RSA
-alias密鑰的別名
-keypass私有密鑰的密碼,這里設置為changeit
-keystore?密鑰保存在D:盤目錄下的mykeystore文件中
-storepass?存取密碼,這里設置為changeit,這個密碼提供系統從mykeystore文件中將信息取出
-validity該密鑰的有效期為?180天?(默認為90天)
?
cacerts證書文件(The cacerts Certificates File)
?
改證書文件存在于java.home\lib\security目錄下,是Java系統的CA證書倉庫??
?
?
?
?
?
3.4.1.4 keytool 生成根證書時出現如下錯誤:
?
?
keytool錯誤:java.io.IOException:keystore was tampered with,or password was incorrect
?
原因是在你的home目錄下是否還有.keystore存在。如果存在那么把他刪除掉,后再執行
?
或者刪除"%JAVA_HOME%/JRE/LIB/SECURITY/CACERTS?再執行
?
?
4 為tomcat6 批量生成安全證書
?
4.1.1 第一步:為服務器生成證書
?
keytool -genkey -v -alias tomcat -keyalg RSA -keystore D:/SSL/keystore/tomcat.keystore -dname "CN=127.0.0.1,OU=風絮,O=風絮,L=昆明,ST=云南,C=CN" -validity 3650 -storepass xiejin -keypass xiejin
?
如果Tomcat所在服務器的域名不是“localhost”,應改為對應的域名,如“www.sina.com.cn”,否則瀏覽器會彈出警告窗口,提示用戶證書與所在域不匹配。在本地做開發測試時,應填入“localhost”
?
?
4.1.2 第二步:為客戶端生成證書
?
?
(為了能將證書順利導入至IE和Firefox,證書格式應該是PKCS12)
?
keytool -genkey -v -alias client -keyalg RSA -storetype PKCS12 -keystore D:/SSL/keystore/client.p12 -dname "CN=client,OU=楓葉,O=楓葉,L=北京,ST=北京,C=CN" -validity 3650 -storepass client -keypass client
?
對應的證書庫存放在“D:/SSL/keystore/client.p12“,客戶端的CN可以是任意值。稍候,我們將把這個“client.p12”證書庫導入到IE和Firefox中。
?
?
4.1.3 第三步:讓服務器信任客戶端證書
?
?
由于是雙向SSL認證,服務器必須要信任客戶端證書,因此,必須把客戶端證書添加為服務器的信任認證。由于不能直接將PKCS12格式的證書庫導入,我們必須先把客戶端證書導出為一個單獨的CER文件,使用如下命令:
?
keytool -export -alias client -keystore??D:/SSL/keystore/xa -storetype PKCS12 -storepass client -rfc -file?D:/SSL/keystore/client.cer
?
通過以上命令,客戶端證書就被我們導出到D:/SSL/keystore/client.cer文件了。
下一步,是將該文件導入到服務器的證書庫,添加為一個信任證書:
?
keytool -import -alias client -v -file D:/SSL/keystore/client.cer -keystore D:/SSL/keystore/tomcat.keystore -storepass xiejin
?
?
? 4.1.4 第四步:配置Tomcat 服務器
?
?
打開Tomcat根目錄下的/conf/server.xml,找到如下配置段,修改如下:
打開注釋
?<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"?
???????????????maxThreads="150" scheme="https" secure="true"
???????????????clientAuth="true" sslProtocol="TLS"
???????????????????????????????keystoreFile="D:/SSL/keystore/tomcat.keystore" keystorePass="xiejin"
???????????????????????????????truststoreFile="D:/SSL/keystore/tomcat.keystore" truststorePass="xiejin"
???????????????????????????????/>
?
其中,clientAuth指定是否需要驗證客戶端證書,如果該設置為“false”,
則為單向SSL驗證,SSL配置可到此結束。如果clientAuth設置為“true”,表示強制雙向SSL驗證,必須驗證客戶端證書。
如果clientAuth設置為“want”,則表示可以驗證客戶端證書,但如果客戶端沒有有效證書,也不強制驗證。
?
?
4.1.5 第五步:導入客戶端證書
?
?如果設置了clientAuth="true",則需要強制驗證客戶端證書。雙擊client.p12即可將證書導入至IE:導入證書后,即可啟動Tomcat,用IE進行訪問
?
4.1.6 第六步: 導出服務器證書給客戶端
?
4.1.6.1 方法1:
?
導出服務器證書給客戶端用:(該步驟是直接使用服務端的tomcat.keystore密匙庫導出服務端證書.)
keytool -export -alias tomcat -keystore D:/SSL/keystore/tomcat.keystore -file D:/SSL/keystore/server.cer -storepass xiejin
?
? 4.1.6.2 方法2:
?
?直接訪問WebService的wsdl文件,然后從瀏覽器中,下載證書.這樣就脫離了服務器端的.也就是說不依賴服務段的密匙庫.
將從瀏覽器中下載的證書命名為:server.cer
?
? 4.1.7 第七步:將導入server.cer,為客戶端 創建定制密鑰庫
?
4.1.7.1 方法1:
?
server.cer來自于keystore導出.
keytool -import -noprompt -trustcacerts -alias clientInvokeServer -file server_fromTomcat_KeyStore.cer -keystore D:/SSL/keystore/clientInvokeServer.keystore -storepass testpass
?
? 4.1.7.2 方法2:
?
?server.cer來自于瀏覽器導出.
keytool -import -noprompt -trustcacerts -alias clientInvokeServer -file server_fromIEBrowser.cer -keystore D:/SSL/keystore/browserserver.keystore -storepass testpass
?
?
?
4.1.8 第八步:創建Java 客戶端訪問
?
示例代碼:
?
- public?static?void?ssl_tomcat?()?{??
- ????????String?url?=?"https://127.0.0.1:8443/Xfire_1.1/services/HelloWorldSimple";??
- ????????System.setProperty?(?"javax.net.ssl.trustStore",?"D:/SSL/keystore/browserserver.keystore"?);//關鍵代碼??
- ????????System.setProperty?(?"javax.net.ssl.trustStorePassword",?"testpass"?);//關鍵代碼??
- ????????Service?serviceModel?=?new?ObjectServiceFactory?().create?(?IHelloWorld.class?);??
- ????????try?{??
- ????????????IHelloWorld?service?=?(IHelloWorld)?new?XFireProxyFactory?().create?(?serviceModel,?url?);??
- ????????????String?result?=?service.hello?(?"恭喜發財"?);??
- ????????????System.out.println?(?"result?=?"?+?result?);??
- ????????????System.out.println?(?"========================================"?);??
- ????????????Float?returnValue?=?service.add?(?new?Float?(?3.2?),?new?Float?(?2.8?)?);??
- ????????????System.out.println?(?"returnValue?=?"?+?returnValue?);??
- ????????}??
- ????????catch?(MalformedURLException?e)?{??
- ????????????e.printStackTrace?();??
- ????????}??
- ????}??
??
?
? 4.1.9 測試訪問:
?
https://127.0.0.1:8080
. 上面配置的是127.0.0.1 就只能用127.0.0.1 來訪問,不能有localhost.
如果上面配置的是localhost 就只能用localhost.
?
4.1.10 SSL 證書錯誤信息
目前國內用戶可選擇購買的SSL 證書有兩種,一種是直接支持所有瀏覽器的WoSign/Verisign
等公司頒發的,一種是國內各種認證中心頒發的,但不被瀏覽器認可,需要另外安裝根證書,
同時,在訪問網站時會提示 “ 該安全證書由您沒有選定信任的公司頒發 ” 或點擊鎖標志
查詢證書時會顯示“ 無法將這個證書驗證到一個受信任的證書頒發機構 ”。用戶應該根據
自己的需要正確選擇全球通用的支持所有瀏覽器的SSL 證書。
且證書是與域名綁定,倘若證書的域名和所訪問的網站域名不一致的話,則會提示:
該網站出具的安全證書是為其他網站地址頒發的。若點擊繼續瀏覽,查看證書,則會提示:
安全證書上的名稱無效或者與站點名詞不匹配
?
4.1.10.1 SSL 證書錯誤一:
錯誤情況描述:出現 該安全證書由您沒有選定信任的公司頒發 類似情況,說明該
證書沒有在瀏覽器信任的列表里,或該證書的簽發機構不在瀏覽器信任的列表中。
解決辦法:將該證書安裝到瀏覽器的 信任列表之中即可 具體 選項‐‐‐內容選項卡
‐‐‐證書‐‐‐‐‐‐導入
?
4.1.10.2 SSL 證書錯誤二:
錯誤情況描述: 證書的域名和所訪問的網站域名不一致的話
解決辦法:用keytool 產生證書 將證書的cn 設置為域名 即可 解決這樣的錯誤
4.1.10.3 當java 客戶端請求實現https 協議的服務時,出現異常:
'unable to find valid certification path to requested target'
?
是因為服務期端的證書沒有被認證,需要做的是把服務端證書導入到java keystore。
keytool ‐import ‐file server.crt ‐keystore %java_home%/jre/lib/security/cacerts
如果導入了,還出現這個錯誤,可能是JDK 的問題.
若Tomcat 是配置在Eclipse 自帶的的,所以Tomcat 所用的jre 也當然是Eclipse 配置的jre。
而自己機子上裝的jre 一共有3 個之多啊,包括jdk1.5,jdk1.6,eclipse 的jre,系統環境變
量%java_home%指向的是jdk1.5。所以運行
keytool ‐import ‐file server.crt ‐keystore %java_home%/jre/lib/security/cacerts 的時候一直是往
jdk1.5 的jre 添加證書。而Tomcat 用的jre 一直沒有添加證書,所以一直有unable to find valid
certification path to requested target 的異常。往eclipse 的jre 添加證書之后,終于運行正
常。!!!!!!!!
不僅僅這個問題,其實有很多問題都是因為系統裝了多個各個版本的JDK 而引起的。最好只
保留一個JDK,可以避免很多的稀奇古怪的問題。否則,一定要仔細確認tomcat 等其他依
賴JDk 的應用程序到底用的是哪個JDK.
?
? 5 說明:
創建的證書可以導入到JDK 中的, %java_home%/jre/lib/security/cacerts
密匙庫,也可以自己生成一個xxx.keystore 密匙庫。
?
6 不同格式證書導入keystore 方法
Java 自帶的keytool 工具是個密鑰和證書管理工具。它使用戶能夠管理自己的公鑰/私鑰對及
相關證書,用于(通過數字簽名)自我認證(用戶向別的用戶/服務認證自己)或數據完整
性以及認證服務。它還允許用戶儲存他們的通信對等者的公鑰(以證書形式)。
keytool 將密鑰和證書儲存在一個所謂的密鑰倉庫(keystore)中。缺省的密鑰倉庫實現將密
鑰倉庫實現為一個文件。它用口令來保護私鑰。
?
6.1 Java KeyStore 的類型
JKS 和JCEKS 是Java 密鑰庫(KeyStore)的兩種比較常見類型(我所知道的共有5 種,JKS, JCEKS,
PKCS12, BKS,UBER)。
JKS 的Provider 是SUN,在每個版本的JDK 中都有,JCEKS 的Provider 是SUNJCE,1.4 后我們
都能夠直接使用它。
JCEKS 在安全級別上要比JKS 強,使用的Provider 是JCEKS(推薦),尤其在保護KeyStore 中的
私鑰上(使用TripleDes)。
PKCS#12 是公鑰加密標準,它規定了可包含所有私鑰、公鑰和證書。其以二進制格式存儲,
也稱為 PFX 文件,在windows 中可以直接導入到密鑰區,注意,PKCS#12 的密鑰庫保護密
碼同時也用于保護Key。
BKS 來自BouncyCastle Provider,它使用的也是TripleDES 來保護密鑰庫中的Key,它能夠防
止證書庫被不小心修改(Keystore 的keyentry 改掉1 個 bit 都會產生錯誤),BKS 能夠跟JKS
互操作,讀者可以用Keytool 去TryTry。
UBER 比較特別,當密碼是通過命令行提供的時候,它只能跟keytool 交互。整個keystore 是
通過PBE/SHA1/Twofish 加密,因此keystore 能夠防止被誤改、察看以及校驗。以前,Sun JDK(提
供者為SUN)允許你在不提供密碼的情況下直接加載一個Keystore,類似cacerts,UBER 不允
許這種情況。
?
6.2 證書導入
?
6.2.1 Der/Cer 證書導入
?
?
要從某個文件中導入某個證書,使用keytool工具的-import命令:
?
keytool -import -file mycert.der -keystore mykeystore.jks
?
如果在?-keystore?選項中指定了一個并不存在的密鑰倉庫,則該密鑰倉庫將被創建。
?
如果不指定?-keystore?選項,則缺省密鑰倉庫將是宿主目錄中名為?.keystore?的文件。如果該文件并不存在,則它將被創建。
?
創建密鑰倉庫時會要求輸入訪問口令,以后需要使用此口令來訪問。可使用-list命令來查看密鑰倉庫里的內容:
?
keytool -list -rfc -keystore mykeystore.jks
?
?
6.2.2 P12 格式證書導入:
?
?
keytool無法直接導入PKCS12文件。
?
6.2.2.1 第一種方法
?
是使用IE將pfx證書導入,再導出為cert格式文件。使用上面介紹的方法將其導入到密鑰倉庫中。這樣的話倉庫里面只包含了證書信息,沒有私鑰內容。
6.2.2.2 第二種方法
?
是將pfx文件導入到IE瀏覽器中,再導出為pfx文件。
???????新生成的pfx不能被導入到keystore中,報錯:keytool錯誤:?java.lang.Exception:?所輸入的不是一個?X.509?認證。新生成的pfx文件可以被當作keystore使用。但會報個錯誤as unknown attr1.3.6.1.4.1.311.17.1,查了下資料,說IE導出的就會這樣,使用Netscape就不會有這個錯誤.
?
6.2.2.3 第三種方法
?
是將pfx文件當作一個keystore使用。但是通過微軟的證書管理控制臺生成的pfx文件不能直接使用。keytool不認此格式,報keytool錯誤:?java.io.IOException: failed to decrypt safe contents entry。需要通過OpenSSL轉換一下:
?
1)openssl pkcs12 -in mycerts.pfx -out mycerts.pem
?
2)openssl pkcs12 -export -in mycerts.pem -out mykeystore.p12
?
通過keytool的-list命令可檢查下密鑰倉庫中的內容:
?
keytool -rfc -list -keystore mykeystore.p12 -storetype pkcs12
?
這里需要指明倉庫類型為pkcs12,因為缺省的類型為jks。這樣此密鑰倉庫就即包含證書信息也包含私鑰信息。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
