SSL服务器端的主机名验证+;Tomcat和Java8
我正在使用Java8和SpringBoot构建一个服务器应用程序,它部署在Tomcat8中。此应用程序仅从其他应用程序调用,而不是从任何浏览器调用。因此,出于安全原因,实现了双向SSL握手 实现了双向SSL,我知道在充当SSL客户端时会强制进行主机名验证。还应在SSL服务器端启用主机名验证。当充当SSL服务器时,是否有类似于严格主机名验证的实现 服务器应该根据客户机提供的SSL证书和请求对象中可用的客户机IP地址进行主机名验证SSL服务器端的主机名验证+;Tomcat和Java8,java,spring,apache,tomcat,ssl,Java,Spring,Apache,Tomcat,Ssl,我正在使用Java8和SpringBoot构建一个服务器应用程序,它部署在Tomcat8中。此应用程序仅从其他应用程序调用,而不是从任何浏览器调用。因此,出于安全原因,实现了双向SSL握手 实现了双向SSL,我知道在充当SSL客户端时会强制进行主机名验证。还应在SSL服务器端启用主机名验证。当充当SSL服务器时,是否有类似于严格主机名验证的实现 服务器应该根据客户机提供的SSL证书和请求对象中可用的客户机IP地址进行主机名验证 SSLConnectionSocketFactory ssl
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
sslcontext, new String[] { "TLSv1.2" }, null, SSLSocketFactory.STRICT_HOSTNAME_VERIFIER);
return HttpClients.custom().setSSLSocketFactory(sslsf).build();
我使用的是ApacheHTTP客户端,当充当SSL客户端时,我能够强制使用严格的主机名验证程序
当作为SSL服务器时,我没有得到任何指针来执行相同类型的检查。即使SSL客户端证书的主机名与其请求的客户端服务器的主机名不同,SSL握手也不会发生任何故障。是否有一种方法可以使用java安全性从SSL服务器的角度启用严格的主机名验证器
我在tomcat中使用以下配置
<Connector port="9443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true"
maxThreads="100" minSpareThreads="10" maxConnections="1000" scheme="https" secure="true"
keystoreFile="conf/jks/SSL_Server.jks" keystorePass="Password" keystoreType="jks"
truststoreFile="conf/jks/TrustStore.jks" truststorePass="PasswordTrust" truststoreType="jks"
clientAuth="true" sslProtocol="TLSv1.2" />
阅读更新后的问题时,我删除了前面的答案。通过两种方式,在握手过程中,您可以验证用户提供的证书是否由信任库中的CA颁发。一些服务器还允许验证证书的某些属性,如CN。但是握手不会用证书的主机名验证请求的IP。备选方案:提取客户端发送的X509证书,并使用过滤器验证您自己。感谢您的建议。我正在为应用程序使用tomcat服务器。我可以从客户端证书在应用层中检查这一点。但是我想在SSL堆栈中这样做,在我的例子中是tomcat+java,因为tomcat使用SUNJSEE实现。我能够从X509Certificate中计算出我必须执行的检查,但无法插入SSL堆栈。。。如果您有任何指向添加筛选器以在充当SSL服务器时执行附加检查的指针,这将非常有用…从HttpServletRequest
获取X509certificate
,请参阅并在调用web应用程序之前添加标准J2EE筛选器,如果证书不合适,请中止请求。请参阅阅读更新的问题,我删除了前面的答案。通过两种方式,在握手过程中,您可以验证用户提供的证书是否由信任库中的CA颁发。一些服务器还允许验证证书的某些属性,如CN。但是握手不会用证书的主机名验证请求的IP。备选方案:提取客户端发送的X509证书,并使用过滤器验证您自己。感谢您的建议。我正在为应用程序使用tomcat服务器。我可以从客户端证书在应用层中检查这一点。但是我想在SSL堆栈中这样做,在我的例子中是tomcat+java,因为tomcat使用SUNJSEE实现。我能够从X509Certificate中计算出我必须执行的检查,但无法插入SSL堆栈。。。如果您有任何指向添加筛选器以在充当SSL服务器时执行附加检查的指针,这将非常有用…从HttpServletRequest
获取X509certificate
,请参阅并在调用web应用程序之前添加标准J2EE筛选器,如果证书不合适,请中止请求。看见