Java HTTPS服务器:相互SSL身份验证

马库斯

我已经com.sun.net.httpserver.HttpsServer为SOAP Web服务开发了Java 7 HTTPS服务器(我使用)(主要受此SO Answer的影响),不同之处在于该服务器设置为需要客户端身份验证。这是我使用的服务器的配置代码:

final InetSocketAddress address = new InetSocketAddress( localhost, 8888 );
this.httpsServer = HttpsServer.create( address, 0 );

// ... KeyStore configuration ...

// configure the HTTPS server
this.httpsServer.setHttpsConfigurator( new HttpsConfigurator( sslContext )
{
   @Override
   public void configure(final HttpsParameters params)
   {
      try
      {
         // initialize the SSL context
         final SSLContext c = SSLContext.getDefault();
         final SSLEngine engine = c.createSSLEngine();
         params.setNeedClientAuth( true );
         params.setCipherSuites( engine.getEnabledCipherSuites() );
         params.setProtocols( engine.getEnabledProtocols() );

         // get the default parameters
         final SSLParameters defaultSSLParameters = c.getDefaultSSLParameters();
         params.setSSLParameters( defaultSSLParameters );
      }
      catch ( final Exception e )
      {
         LOG.error( ExceptionUtils.getStackTrace( e ) );
      }
   }
} );

但是,在与客户端建立连接后,我注意到没有强制执行客户端身份验证!我目前正在使用自签名证书在localhost上进行测试,但似乎任何客户端都可以连接我使用SoapUI(未配置为将任何证书发送到我的Knowlegde)以及带有和不带有证书的客户端模式下的openssl进行测试。

openssl s_client -cert client.pem -connect localhost:8888 -debug
openssl s_client -connect localhost:8888 -debug

我已经使用java选项启动了服务器,-Djavax.net.debug=all但是没有看到指示客户端身份验证或客户端应出示其证书的任何相关部分。我看到客户端确实验证了服务器的证书!

我想拒绝所有没有出示有效证书的客户。我怎样才能做到这一点?

马库斯

经过很长时间的搜索后,我注意到的configure(..)方法HttpsConfigurator是错误的。我没有SSLParameters正确设置

它看起来应该像这样:

@Override
public void configure(final HttpsParameters params)
{
   try
   {
      final SSLParameters sslParams = getSSLContext().getDefaultSSLParameters();
      final SSLEngine sslEngine = getSSLContext().createSSLEngine();
      sslParams.setNeedClientAuth( true );
      sslParams.setCipherSuites( sslEngine.getEnabledCipherSuites() );
      sslParams.setProtocols( sslEngine.getEnabledProtocols() );
      params.setSSLParameters( sslParams );
   }
   catch ( final Exception e )
   {
      LOG.error( ExceptionUtils.getStackTrace( e ) );
   }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何编写使用相互ssl身份验证的Java客户端和服务器应用程序?

来自分类Dev

Java-SSL-使用gmail的SMTP服务器进行身份验证

来自分类Dev

Java:如何通过LAN为服务器客户端设置SSL单向身份验证?

来自分类Dev

Java MongoDB Client:访问未配置为使用身份验证的服务器时,身份验证失败

来自分类Dev

Java MongoDB Client:访问未配置为使用身份验证的服务器时,身份验证失败

来自分类Dev

Java测试客户端中的SSL Handshake_failure,同时通过双向身份验证连接到服务器

来自分类Dev

使用Java连接到MongoDB服务器实例期间的身份验证

来自分类Dev

Java客户端针对CAS服务器进行身份验证

来自分类Dev

Java Servlet-Windows身份验证令牌/ IIS服务器

来自分类Dev

如何使用Java JDK 1.7在我的第三方服务器上对GKLocalPlayer进行身份验证?

来自分类Dev

使用gmail smtp服务器和javamail在Java中发送未经身份验证的电子邮件

来自分类Dev

在内存/嵌入式SFTP服务器中,用于使用Java中的私钥身份验证进行测试

来自分类Dev

基于epoll的服务器失败(相互身份验证)

来自分类Dev

Java https服务器

来自分类Dev

使用Spark Java进行相互身份验证

来自分类Dev

Java:如何添加SSL客户端身份验证

来自分类Dev

通过HTTPS Java进行基本身份验证

来自分类Dev

Keycloak服务器身份验证

来自分类Dev

相互身份验证并将用户证书限制为服务器上的特定证书

来自分类Dev

相互身份验证并将用户证书限制为服务器上的特定证书

来自分类Dev

无法对身份服务器 SSL 握手错误进行身份验证

来自分类Dev

Java Google Contacts API访问服务帐户身份验证

来自分类Dev

身份验证Microsoft OneDrive REST服务Java / Ionic 2

来自分类Dev

从Worklight适配器对HTTPS服务器进行Web服务调用-javax.net.ssl.SSLPeerUnverifiedException:未对等身份验证

来自分类Dev

根据预先获得的自签名证书副本对SSL服务器进行身份验证

来自分类Dev

使用Python请求访问Shibboleth身份验证服务器的SSL错误

来自分类Dev

根据预先获得的自签名证书副本对SSL服务器进行身份验证

来自分类Dev

配置Apache Web服务器以执行SSL身份验证

来自分类Dev

用于具有 Azure 身份验证的私有 Web 服务器的 SSL 证书

Related 相关文章

  1. 1

    如何编写使用相互ssl身份验证的Java客户端和服务器应用程序?

  2. 2

    Java-SSL-使用gmail的SMTP服务器进行身份验证

  3. 3

    Java:如何通过LAN为服务器客户端设置SSL单向身份验证?

  4. 4

    Java MongoDB Client:访问未配置为使用身份验证的服务器时,身份验证失败

  5. 5

    Java MongoDB Client:访问未配置为使用身份验证的服务器时,身份验证失败

  6. 6

    Java测试客户端中的SSL Handshake_failure,同时通过双向身份验证连接到服务器

  7. 7

    使用Java连接到MongoDB服务器实例期间的身份验证

  8. 8

    Java客户端针对CAS服务器进行身份验证

  9. 9

    Java Servlet-Windows身份验证令牌/ IIS服务器

  10. 10

    如何使用Java JDK 1.7在我的第三方服务器上对GKLocalPlayer进行身份验证?

  11. 11

    使用gmail smtp服务器和javamail在Java中发送未经身份验证的电子邮件

  12. 12

    在内存/嵌入式SFTP服务器中,用于使用Java中的私钥身份验证进行测试

  13. 13

    基于epoll的服务器失败(相互身份验证)

  14. 14

    Java https服务器

  15. 15

    使用Spark Java进行相互身份验证

  16. 16

    Java:如何添加SSL客户端身份验证

  17. 17

    通过HTTPS Java进行基本身份验证

  18. 18

    Keycloak服务器身份验证

  19. 19

    相互身份验证并将用户证书限制为服务器上的特定证书

  20. 20

    相互身份验证并将用户证书限制为服务器上的特定证书

  21. 21

    无法对身份服务器 SSL 握手错误进行身份验证

  22. 22

    Java Google Contacts API访问服务帐户身份验证

  23. 23

    身份验证Microsoft OneDrive REST服务Java / Ionic 2

  24. 24

    从Worklight适配器对HTTPS服务器进行Web服务调用-javax.net.ssl.SSLPeerUnverifiedException:未对等身份验证

  25. 25

    根据预先获得的自签名证书副本对SSL服务器进行身份验证

  26. 26

    使用Python请求访问Shibboleth身份验证服务器的SSL错误

  27. 27

    根据预先获得的自签名证书副本对SSL服务器进行身份验证

  28. 28

    配置Apache Web服务器以执行SSL身份验证

  29. 29

    用于具有 Azure 身份验证的私有 Web 服务器的 SSL 证书

热门标签

归档