簡體   English   中英

Netty 中的兩種 SSL 身份驗證

[英]Two way SSL authentication in Netty

我正在開發基於服務器和客戶端的應用程序,它需要兩種方式的 SSL 身份驗證。 (客戶端驗證服務器和服務器驗證客戶端都使用 SSL 證書。)

我對 Netty 很陌生,對此幾乎沒有懷疑。

  1. 是否可以使用 Netty 進行雙向身份驗證?
  2. 通過向服務器和客戶端的管道工廠添加另一個 SslHandler 是否可以簡單地實現?
  3. 如果上述情況屬實,我如何在 ChannelConnected() 方法中獲取所需的 SslHandler 來執行 SslHandshake? 是否可以通過再次調用管道來調用 ChannelConected() 方法中的第二次握手?
  4. 有沒有我可以參考的例子?

我非常感謝有關此問題的任何幫助、答案或朝着正確方向推動。

是否可以使用 Netty 進行雙向身份驗證?

是的

通過向服務器和客戶端的管道工廠添加另一個 SslHandler 是否可以簡單地實現?

是的

如果上述情況屬實,我如何在 ChannelConnected() 方法中獲取所需的 SslHandler 來執行 SslHandshake?

創建SSLContext時,您需要正確設置密鑰庫和信任庫。

是否可以通過再次調用管道來調用 ChannelConected() 方法中的第二次握手?

從內存中,客戶端和服務器身份驗證在第一次握手中完成。

在客戶端上,將客戶端的私鑰安裝在密鑰庫中,將服務器的公鑰安裝在信任庫中。

在服務器上,將服務器的私鑰安裝在密鑰庫中,將客戶端的公鑰安裝在信任庫中。

有沒有我可以參考的例子?

  • 這是我為 websockets 做的一個例子 它僅向您展示如何設置服務器密鑰庫。 您必須添加一個信任庫作為serverContext.init(kmf.getKeyManagers(), null, null);的第二個參數serverContext.init(kmf.getKeyManagers(), null, null);

  • 這是在 Scala 中使用信任存儲設置的類似示例

  • 這是一個關於如何設置 SSLContext 的優秀Java 指南

希望這可以幫助。

雙向身份驗證要求服務器和客戶端都擁有對方信任的證書。 客戶端需要生成一個私鑰,將其存儲在他的密鑰庫中,並由服務器信任庫信任的某個人對其進行簽名。

這不僅僅是你編寫什么代碼的問題。

SSL 是表示層協議,SSL 握手發生在套接字連接建立之后和應用層獲得可用套接字連接之前。 無論您使用什么應用程序,如果您有 SSL 協議層,那么您就可以在 SSL 上工作。

雙向身份驗證只是上面@EJP 提到的配置問題。 如果雙方都可以建立並驗證彼此的信任鏈,則握手成功。 請參閱 netty 配置手冊以配置 SSL 信任庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM