Mina 單雙向認證

2021-06-29 05:17:47 字數 2707 閱讀 8416

生成伺服器端金鑰

keytool -genkey -alias serverkey -keystore kserver.keystore

匯出伺服器端證書

keytool -export -alias serverkey -keystore kserver.keystore -file server.crt

將伺服器端證書儲存到客戶端受信金鑰中

keytool -import -alias serverkey -file server.crt -keystore tclient.keystore

採用同樣的方法,生成客戶端的私鑰,客戶端的證書,並且匯入到服務端的trust keystore中

1)keytool -genkey -alias clientkey -keystore kclient.keystore

2)keytool -export -alias clientkey -keystore kclient.keystore -file client.crt

3)keytool -import -alias clientkey -file client.crt -keystore tserver.keystore

如此一來,生成的檔案分成兩組

服務端儲存:kserver.keystore tserver.keystore

客戶端儲存:kclient.keystore  tclient.keyestore

根據需要可以使用雙向或單向認證,這裡給出單向認證

伺服器端:

sslcontext context = sslcontext.getinstance("tls");

keymanage***ctory keyfactory = keymanage***ctory.getinstance(keymanage***ctory.getdefaultalgorithm());

trustmanage***ctory trustfactory = trustmanage***ctory.getinstance(trustmanage***ctory.getdefaultalgorithm());

keystore ks = keystore.getinstance("jks");

keystore tks = keystore.getinstance("jks");

ks.load(new fileinputstream("kserver.keystore"), "密碼".tochararray());

tks.load(new fileinputstream("tserver.keystore"), "密碼".tochararray());

keyfactory.init(ks, "密碼".tochararray());

trustfactory.init(tks);

context.init(keyfactory.getkeymanagers(), trustfactory.gettrustmanagers(), null);

sslfilter = new sslfilter(context);

sslfilter.setuseclientmode(false);

sslfilter.setneedclientauth(false);

sslfilter.setwantclientauth(false);

session.getfilterchain().addfirst("tls", sslfilter);

session.setattribute(sslfilter.disable_encryption_once, true);

客戶端:

sslcontext context = sslcontext.getinstance("tls");

keymanage***ctory keyfactory = keymanage***ctory.getinstance(keymanage***ctory.getdefaultalgorithm());

trustmanage***ctory trustfactory = trustmanage***ctory.getinstance(trustmanage***ctory.getdefaultalgorithm());

keystore ks = keystore.getinstance("jks");

keystore tks = keystore.getinstance("jks");

ks.load(new fileinputstream("kclient.keystore"), "密碼".tochararray());

tks.load(new fileinputstream("tclient.keystore"), "密碼".tochararray());

keyfactory.init(ks, "密碼".tochararray());

trustfactory.init(tks);

context.init(null, trustfactory.gettrustmanagers(), null);

sslfilter = new sslfilter(context);

sslfilter.setuseclientmode(true);

session.getfilterchain().addfirst("tls", sslfilter);

可以用網路抓包工具看到加入tls之後的資料是經歷加密之後傳輸的

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

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

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

現在介紹第三種實現方式 server端和client端各自擁有可信認的第三方認證機構 簽名私有金鑰證書,通過 互相信認對方證書。在第二種實現方式中,使用keytool生成的數字證書只能是自簽名的。謂自簽名就是指證書只能保證自己是完整的,沒有經過非法修改的。但是無法保證這個證書是屬於誰的。這種驗證有乙...

雙向認證 什麼是單向認證和雙向認證?

雙向認證 ssl 協議要求伺服器和使用者雙方都有證書。單向認證 ssl 協議不需要客戶擁有ca證書,具體的過程相對於上面的步驟,只需將伺服器端驗證客戶證書的過程去掉,以及在協商對稱密碼方案,對稱通話金鑰時,伺服器傳送給客戶的是沒有加過密的 這並不影響 ssl 過程的安全性 密碼方案。這樣,雙方具體的...