gpt4 book ai didi

Java HTTPS 服务器 : Mutual SSL Authentication

转载 作者:行者123 更新时间:2023-11-29 04:43:30 24 4
gpt4 key购买 nike

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

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 ) );
}
}
} );

但是,在来自客户端的连接上,我注意到没有强制执行客户端身份验证!我目前正在使用自签名证书在本地主机上进行测试,但似乎任何客户端都能够连接。我使用 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 启动了服务器,但没有看到任何指示客户端身份验证或客户端应出示其请求的相关部分证书。我看到客户端确实验证了服务器的证书!

我想拒绝任何不提供有效证书的客户。我该怎么做?

最佳答案

经过很长时间的搜索,我注意到 HttpsConfiguratorconfigure(..) 方法是错误的。我没有正确设置 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 ) );
}
}

关于Java HTTPS 服务器 : Mutual SSL Authentication,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38248813/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com