Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SSL服务器端的主机名验证+;Tomcat和Java8_Java_Spring_Apache_Tomcat_Ssl - Fatal编程技术网

SSL服务器端的主机名验证+;Tomcat和Java8

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

我正在使用Java8和SpringBoot构建一个服务器应用程序,它部署在Tomcat8中。此应用程序仅从其他应用程序调用,而不是从任何浏览器调用。因此,出于安全原因,实现了双向SSL握手

实现了双向SSL,我知道在充当SSL客户端时会强制进行主机名验证。还应在SSL服务器端启用主机名验证。当充当SSL服务器时,是否有类似于严格主机名验证的实现

服务器应该根据客户机提供的SSL证书和请求对象中可用的客户机IP地址进行主机名验证

    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筛选器,如果证书不合适,请中止请求。看见