1 回答

TA貢獻(xiàn)1839條經(jīng)驗(yàn) 獲得超15個(gè)贊
仔細(xì)查看您的服務(wù)器端 SslContextFactory 使用情況,并著眼于您實(shí)際使用的內(nèi)容(剝離以僅顯示 SslContextFactory 使用情況)
SslContextFactory sslContextFactory = new SslContextFactory();
sslContextFactory.setKeyStoreResource(Resource.newResource(urlKeyStore));
sslContextFactory.setKeyStorePassword(credential);
sslContextFactory.setExcludeCipherSuites(
"SSL_RSA_WITH_DES_CBC_SHA",
"SSL_DHE_RSA_WITH_DES_CBC_SHA",
"SSL_DHE_DSS_WITH_DES_CBC_SHA",
"SSL_RSA_EXPORT_WITH_RC4_40_MD5",
"SSL_RSA_EXPORT_WITH_DES40_CBC_SHA",
"SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA",
"SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA");
sslContextFactory.setExcludeProtocols("");
有幾件事很突出。
首先,既然你是服務(wù)端,那你就應(yīng)該使用服務(wù)端版本...
SslContextFactory sslContextFactory = new SslContextFactory.Server();
接下來(lái),您的使用.setExcludedCipherSuites()不完整并引入了漏洞。
刪除(或注釋掉)整行。
使用 SslContextFactory 為您提供的默認(rèn)值。
通過(guò)該行,可以為 TLS/SSL 使用無(wú)證書和無(wú)加密配置。
另外,你的使用setExcludedProtocols("")不好。它正在設(shè)置要排除的單個(gè)空白協(xié)議。這很糟糕,因?yàn)槟鷮⒆约罕┞队诟鞣N SSL 漏洞(更不用說(shuō) TLS 漏洞了)
也刪除(或注釋掉)整行。
使用 SslContextFactory 為您提供的默認(rèn)值。
通過(guò)該行,可以為 TLS/SSL 使用無(wú)協(xié)議(這意味著無(wú)加密)配置。
上述 2 個(gè)配置會(huì)產(chǎn)生大量警告日志,您應(yīng)該努力擁有一個(gè)沒有警告的配置。
對(duì)于上述兩個(gè)問(wèn)題,您可能會(huì)從連接中使用的密碼套件的名稱中了解到一些信息。
String cipherSuiteName =
(String) HttpServletRequest.getAttribute("javax.servlet.request.cipher_suite");
您甚至可以獲得javax.net.ssl.SSLSession連接中使用的。
SslSession sslSession =
(SslSession) HttpServletRequest.getAttribute(
"org.eclipse.jetty.servlet.request.ssl_session");
System.out.println("protocol is " + sslSession.getProtocol());
System.out.println("cipher suite is " + sslSession.getCipherSuite());
System.out.println("peer certs is " + sslSession.getPeerCertificates());
最后,您的代碼沒有任何跡象表明您甚至想要來(lái)自該配置的客戶端證書。
你是否忘記了其中一個(gè)...
sslContextFactory.setNeedClientAuth(true);
sslContextFactory.setWantClientAuth(true);
還是您真的不需要客戶證書?
添加回答
舉報(bào)