- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有一个运行 restful 网络服务的目标网络应用程序。此应用程序在 Tomcat 8.5 中运行,并启用了 TLS 和双向身份验证。
我们的应用程序也是一个在 Tomcat 9 上运行的 Web 应用程序。
我为其中一项功能调用的目标端点是 SSE 端点。为了使用这个端点,我正在使用 Jersey 客户端。
下面是调用的代码片段:
public static void main(String[] args)
{
SSLContext sslContext = createSslContext();
Client client = ClientBuilder.newBuilder().sslContext(sslContext).build();
try
{
callEndpoint(client);
}
catch (Exception e)
{
if (client != null)
{
client.close();
}
}
}
private static SSLContext createSslContext()
{
SslConfigurator sslConfig = SslConfigurator.newInstance()
.trustStoreFile("C:\\truststore")
.trustStorePassword(password)
.keyStoreFile("C:\\keystore")
.keyStoreType("JKS")
.keyStorePassword(password)
.keyPassword(password);
SSLContext sslContext = sslConfig.createSSLContext();
return sslContext;
}
private static void callEndpoint(Client client)
{
client.register(new ClientRequestFilter()
{
public void filter(ClientRequestContext requestContext) throws IOException
{
requestContext.getHeaders().add("auditUser", "user");
requestContext.getHeaders().add("auditClientIp", "hostname);
}
});
WebTarget target = client.target(url);
EventInput eventInput = target.request().header("Content-Type", "application/fhir").get(EventInput.class);
while (!eventInput.isClosed())
{
eventInput.setChunkType(MediaType.WILDCARD_TYPE);
InboundEvent inboundEvent = eventInput.read();
if (inboundEvent != null)
{
System.out.println(inboundEvent.getName() + "; " + inboundEvent.readData(String.class));
}
}
}
以上代码在通过独立的主类运行时有效。
但是,当它从 Web 应用程序中运行时,调用失败并显示 javax.net.ssl.SSLHandshakeException: Received fatal alert: bad_certificate
在比较两种情况下的 SSL 调试日志时,我注意到在 Web 应用程序的情况下,应用程序不会在证书请求中发送任何证书。
以下是两个日志的摘录:
主类:
*** CertificateRequest
Cert Types: RSA, DSS, ECDSA
Supported Signature Algorithms: SHA512withECDSA, SHA512withRSA, SHA384withECDSA, SHA384withRSA, SHA256withECDSA, SHA256withRSA, SHA224withECDSA, SHA224withRSA, SHA1withECDSA, SHA1withRSA, SHA1withDSA
Cert Authorities:
<CN=AddTrust External CA Root, OU=AddTrust External TTP Network, O=AddTrust AB, C=SE>
<CN=MYHOSTNAME>
[read] MD5 and SHA1 hashes: len = 179
...
...
*** ServerHelloDone
[read] MD5 and SHA1 hashes: len = 4
0000: 0E 00 00 00 ....
matching alias: le-c979850e-fd8d-4a61-87da-8c25eef1dea1
*** Certificate chain
chain [0] = [
...
网络应用:
*** CertificateRequest
Cert Types: RSA, DSS, ECDSA
Supported Signature Algorithms: SHA512withECDSA, SHA512withRSA, SHA384withECDSA, SHA384withRSA, SHA256withECDSA, SHA256withRSA, SHA224withECDSA, SHA224withRSA, SHA1withECDSA, SHA1withRSA, SHA1withDSA
Cert Authorities:
<CN=AddTrust External CA Root, OU=AddTrust External TTP Network, O=AddTrust AB, C=SE>
<CN=MYHOSTNAME>
[read] MD5 and SHA1 hashes: len = 179
...
...
*** ServerHelloDone
[read] MD5 and SHA1 hashes: len = 4
0000: 0E 00 00 00 ....
Warning: no suitable certificate found - continuing without client authentication
*** Certificate chain
<Empty>
两种情况下使用的 keystore 和信任库都指向相同的文件。 Tomcat 是否以任何方式干扰导致客户端证书未发送?
注意:Jersey 客户端使用的 keystore 和信任库的路径是通过配置读取的,而不是为 Tomcat 配置的路径。
Tomcat 应用程序中的所有 SSL 调用都必须使用为 Tomcat 配置的那个吗?可以不使用不同的 keystore 吗?如果没有,是否在任何地方记录了它?
最佳答案
它是 2 路 SSL,可能是客户端的 (Tomcat 9) 公钥 (x.509
) 不在 Tomcat 8.5 应用程序信任库中。要验证,请运行 SSLPoke在 Tomcat 8.5 服务器上编程并设置应用程序信任库路径。
java -Djavax.net.ssl.trustStore=</path/to/jks> SSLPoke <IP> <PORT>
确保 Tomcat 9 公钥安装在 Tomcat 8.5 信任库中。
关于java - 从 Tomcat 运行时不在 CertificateRequest 中发送证书,但在从主类运行时发送证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57614527/
我正在尝试使用 soapUI 测试网络服务。第一步是建立安全连接。当我使用普通的 Java Keystore(JKS) 时,一切正常。但是,当我将 keystore 转换为 bouncycaSTLe
我们有一个运行 restful 网络服务的目标网络应用程序。此应用程序在 Tomcat 8.5 中运行,并启用了 TLS 和双向身份验证。 我们的应用程序也是一个在 Tomcat 9 上运行的 Web
如何在 Go 中检查 x509 证书是否与 CSR 匹配(如果证书是基于特定 CSR 生成的)?我是否需要从 CSR 生成新证书并进行比较? 最佳答案 如果您的签名请求是 DER 格式,那么您可以使用
我在 GKE 上使用 cert-manager v1.0.0,我尝试使用 acme 的暂存环境,它运行良好,但是当转移到生产环境时,我发现创建的证书卡在 Created new Certificate
Waiting for http-01 challenge propagation: failed to perform self check GET request ,它类似于这个错误 https:
我正在开发一个 WCF 服务,该服务将由不是我开发的客户端使用,也不是 .NET(可能是 Java)。 在任何情况下,服务都应该支持相互 SSL 身份验证,其中服务和客户端都在传输层使用证书 X.50
我目前正在使用 Java 开发 SSL 客户端,需要与需要客户端身份验证的第三方服务器建立 https 连接。服务器人员给了我一个受信任的根 CA 证书,用于签署客户端和服务器证书。我已将此证书放在我
使用 OpenSSL,我可以使用这些命令从各种对象中提取公钥的模数: openssl rsa -noout -modulus -in {KEY} openssl req -noout -modulus
我是一名优秀的程序员,十分优秀!