java - 在 Java 中验证 SSL 证书的通用名称

标签 java sockets ssl-certificate

我正在打开一个安全的 SSL 套接字到我服务器上的端口 12345。我现在使用的是自签名证书。我将证书安装到我的服务器 keystore 和客户端信任库中;很好,等等等等的噪音。

我正在构建这个例子:http://www.exampledepot.com/egs/javax.net.ssl/Client.html

客户端正确验证服务器是否有签名证书。客户端似乎没有验证所提供的证书 CN(通用名称)是否与我要连接的服务器的主机名相匹配。显然,如果不要求它与请求的域匹配,则获得签名证书并不困难。

当我安装我的证书时(使用 keytool --import),我是否将它安装为根级证书?我是否需要使用第一个证书的主 key 签署第二个证书?为什么 TrustManager 不验证公用名?

我希望这是有道理的,并且我没有过度思考这整件事。

谢谢!

更新:似乎 Java SSL 可能需要手动验证证书? ( http://www.java2s.com/Open-Source/Java-Document/Net/Apache-common-HttpClient/org/apache/commons/httpclient/contrib/ssl/StrictSSLProtocolSocketFactory.java.htm ) 这真的是真的吗?我本来希望默认设置是安全的,如果不这样做,就需要显式覆盖。我很惊讶。有人可以确认吗?

最佳答案

验证主机名取决于应用程序。在 HTTPS 的情况下,它通过 HttpsURLConnectionHostnameVerifier 类内置到 Java 中。如果您直接使用 SSLSocket,这取决于您,通常是通过 HandshakeCompletedListener。

关于java - 在 Java 中验证 SSL 证书的通用名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4515696/

相关文章:

windows - WIndows 7 上的高频数据监听器 TCP 过载

git - 如何将 zscaler 证书导入 Git

asp.net-mvc - 如何为 mvc 应用程序中的所有 Controller 启用 ssl

java - Joda Time : new DateTime(String) vs DateTime. 解析(字符串)

java - ORM:文章、修订和主要修订

java - 线程池中线程的运行时异常完全消失: how to handle

java - 什么是单例,用简单的英语?

java - 如何用netty实现机器人

c# - 使用 SocketAsyncEventArgs 每秒接收 20 次

c# - Firefox 中的 ASP.NET Core 自签名证书不起作用