在mina中實現TSL SSL雙向認證連線( )

2021-08-30 10:48:24 字數 2664 閱讀 3154

現在介紹第三種實現方式:server端和client端各自擁有可信認的第三方認證機構(ca)簽名私有金鑰證書,通過ca互相信認對方證書。

在第二種實現方式中,使用keytool生成的數字證書只能是自簽名的。謂自簽名就是指證書只能保證自己是完整的,沒有經過非法修改的。但是無法保證這個證書是屬於誰的。這種驗證有乙個缺點:對於每乙個要鏈結的伺服器,都要儲存乙個證書的驗證副本。而且一旦伺服器更換證書,所有客戶端就需要重新部署這些副本。對於比較大型 的應用來說,這一點是不可接受的。所以就需要證書鏈進行雙向認證。證書鏈是指對證書的簽名又乙個預先部署的,眾所周知的簽名方簽名完成,這樣每次需要驗證證書時只要用這個公用的簽名方的公鑰進行驗證就可以了。比如我們使用的瀏覽器就儲存了幾個常用的ca_root。每次連線到**時只要這個**的證書是經過這些ca_root簽名過的。就可以通過驗證了。但是這些共用的ca_root的服務不是免費的。而且**不菲。所以我們有必要自己生成乙個ca_root的金鑰對,然後部署應用時,只要把這個ca_root的私鑰部署在所有節點就可以完成驗證了。要進行ca_root的生成,需要openssl(

安裝好openssl後就可以生成證書鏈。

1.在當前目錄下建立幾個檔案和資料夾,有./democa/ ./democa/newcerts/ ./democa/index.txt ./democa/serial,在serial檔案中寫入第乙個序列號「01」

2.生成ca證書

[quote]openssl req -new -x509 -keyout ca.key -out ca.crt -days 3650 [/quote]

3.生成server端證書:

1)生成keypair生成金鑰對

[quote]keytool -genkey -alias server -keysize 1024 -validity 3650 -keyalg rsa -dname "cn=zengwenfeng, ou=development,o=techstar.com, l=beijing, s=beijing, c=cn" -keypass 123456 -storepass 123456 -keystore server.jks[/quote]

2)生成證書簽名請求

[quote]keytool -certreq -alias server -sigalg md5withrsa -file server.csr -keypass 123456 -storepass 123456 -keystore server.jks[/quote]

3)用ca私鑰進行簽名,也可以到權威機構申請ca簽名

[quote]openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -notext[/quote]

4)匯入信任的ca根證書到keystore

[quote]keytool -import -v -trustcacerts -alias ca_root -file ca.crt -storepass 123456 -keystore server.jks[/quote]

5)把ca簽名後的server端證書匯入keystore

[quote]keytool -import -v -alias server -file server.crt -keypass 123456 -storepass 123456 -keystore server.jks[/quote]

4.生成client證書

1)生成keypair生成金鑰對

[quote]keytool -genkey -alias client -keysize 1024 -validity 3650 -keyalg rsa -dname "cn=zengwenfeng, ou=development,o=techstar.com, l=beijing, s=beijing, c=cn" -keypass 123456 -storepass 123456 -keystore client.jks[/quote]

2)生成證書簽名請求

[quote]keytool -certreq -alias client -sigalg md5withrsa -file client.csr -keypass 123456 -storepass 123456 -keystore client.jks[/quote]

3)用ca私鑰進行簽名,也可以到權威機構申請ca簽名

[quote]openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -notext[/quote]

4)匯入信任的ca根證書到keystore

[quote]keytool -import -v -trustcacerts -alias ca_root -file ca.crt -storepass 123456 -keystore client.jks[/quote]

5)把ca簽名後的server端證書匯入keystore

[quote]keytool -import -v -alias client -file client.crt -keypass 123456 -storepass 123456 -keystore client.jks[/quote]

這裡與第二種方式不同的地方是初始化客戶端和服務端的sslcontext時keymanager、trustmanager分別採用相同的client.jks和server.jks,除了採用證書方式不同,基本與第二種方式一樣,具體參見原始碼。

在mina中實現TSL SSL雙向認證連線(2)

上回書說到.書接上回,現在介紹第二種實現方式 server端和client端各自擁有自簽名的私有金鑰證書,並且互相交換公鑰,通過對方公鑰互相信認對方證書。1.建立server端keystore檔案serverkeys.jks,包含乙個用於伺服器的證書 quote keytool genkey ali...

C 雙鏈表練習,實現球在螢幕中滾動,排坑

include include include 定義乙個雙鏈表節點 struct node 定義list存放node指標 struct list 初始化雙鏈表節點 node init node int x,int y 初始化雙鏈表 list init list 節點的鏈結傳參,第乙個引數資料在前,第...

在 中實現 加密

在 中的專案中,新增引用 system.web 然後 str2 system.web.security.formsauthentication.hashpasswordforstoringinconfigfile str1,md5 就ok了,如果要換成 sha1 加密形式,只要把 md5 換成 md...