Jersey 泽西岛+;Weblogic-javax.net.ssl.SSLKeyException:致命警报:错误的\u证书

Jersey 泽西岛+;Weblogic-javax.net.ssl.SSLKeyException:致命警报:错误的\u证书,jersey,weblogic,Jersey,Weblogic,我在一个问题上坐了整整第二天,然后放弃了。我已经编写了一个jersey客户端,在Jetty上工作,在Weblogic上不工作。原因可能隐藏在证书中:CN=“*.somecompany.com”。Weblogic不喜欢CN中的通配符。有人有有效的解决办法吗 我将这些参数添加到Weblogic开始参数,但Weblogic使用许多其他客户端,因此我不想添加这些参数:ignoreHostnameVerification:- -Dssl.debug=true -Dweblogic.security.SSL

我在一个问题上坐了整整第二天,然后放弃了。我已经编写了一个jersey客户端,在Jetty上工作,在Weblogic上不工作。原因可能隐藏在证书中:CN=“*.somecompany.com”。Weblogic不喜欢CN中的通配符。有人有有效的解决办法吗

我将这些参数添加到Weblogic开始参数,但Weblogic使用许多其他客户端,因此我不想添加这些参数:ignoreHostnameVerification:-

-Dssl.debug=true -Dweblogic.security.SSL.ignoreHostnameVerification=true 
-Dweblogic.security.SSL.enforceConstraints=off 
-Dweblogic.nodemanager.sslHostNameVerificationEnabled=false
-Dweblogic.security.SSL.allowSmallRSAExponent=true
-Dweblogic.security.SSL.ignoreHostnameVerification=true
我还使用webbrowser访问了一个REST服务,并将证书下载到磁盘,然后使用keytool将其添加到truststore。。它仍然不起作用

唯一也是最好的方法是编写一些自定义的东西来验证主机名??也许这个通配符是个问题。。但我是新手,不知道如何编写,如果能提供一个有效的示例,我将不胜感激,我自己无法做到:/

以下是我发现的例外情况(不确定哪些存在,何时出现,但它仍然不起作用),我试图通过以下方式修复它:

1) 将整个证书链导入truststore(Java和Weblogic truststores)

2) 向Weblogic添加启动参数,但这不是一个好的解决方案

com.sun.jersey.api.client.ClientHandlerException: javax.net.ssl.SSLKeyException: FATAL 
Alert:BAD_CERTIFICATE - A corrupt or unuseable certificate was received.
com.sun.jersey.api.client.ClientHandlerException: 
javax.net.ssl.SSLKeyException: FATAL Alert:BAD_CERTIFICATE - A corrupt 
or unuseable certificate was received.
         at 
    com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHa    ndler.java:131)
         at com.sun.jersey.api.client.Client.handle(Client.java:629)
     at 
com.sun.jersey.api.client.WebResource.handle(WebResource.java:601)
     at 
com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
     at 
com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:507)
     at 
第二

with Severity: FATAL, Type: 42
java.lang.Exception: New alert stack
    at com.certicom.tls.record.alert.Alert.<init>(Unknown Source)
    at         com.certicom.tls.record.handshake.HandshakeHandler.handleHandshakeMessages(Unknown Source)
    at com.certicom.tls.record.MessageInterpreter.interpretContent(Unknown Source)
    at com.certicom.tls.record.MessageInterpreter.decryptMessage(Unknown Source)
    at com.certicom.tls.record.ReadHandler.processRecord(Unknown Source)
    at com.certicom.tls.record.ReadHandler.readRecord(Unknown Source)
    at com.certicom.tls.record.ReadHandler.readUntilHandshakeComplete(Unknown Source)
    at com.certicom.tls.interfaceimpl.TLSConnectionImpl.completeHandshake(Unknown     Source)
    at com.certicom.tls.record.WriteHandler.write(Unknown Source)
    at com.certicom.io.OutputSSLIOStreamWrapper.write(Unknown Source)
    at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
    at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
    at java.io.FilterOutputStream.flush(FilterOutputStream.java:140)
    at weblogic.net.http.HttpURLConnection.writeRequests(HttpURLConnection.java:154)
    at weblogic.net.http.HttpURLConnection.getInputStream(HttpURLConnection.java:358)
    at     weblogic.net.http.SOAPHttpsURLConnection.getInputStream(SOAPHttpsURLConnection.java:37)
    at weblogic.net.http.HttpURLConnection.getHeaderField(HttpURLConnection.java:702)
    at weblogic.net.http.HttpURLConnection.getResponseCode(HttpURLConnection.java:962)
    at      com.sun.jersey.client.urlconnection.URLConnectionClientHandler._invoke(URLConnectionClientHandler.java:217)
    at     com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:129)
    at com.sun.jersey.api.client.Client.handle(Client.java:629)
    at com.sun.jersey.api.client.WebResource.handle(WebResource.java:601)
    at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
    at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:507)
    at  
严重性:致命,类型:42
java.lang.Exception:新警报堆栈
位于com.certicom.tls.record.alert.alert。(来源未知)
位于com.certicom.tls.record.handshake.HandshakeHandler.handleHandshakeMessages(未知源)
在com.certicom.tls.record.MessageInterpreter.interpretationcontent(未知源)
在com.certicom.tls.record.message解释器.decryptMessage上(未知源)
位于com.certicom.tls.record.ReadHandler.processRecord(未知源)
位于com.certicom.tls.record.ReadHandler.readRecord(未知源)
在com.certicom.tls.record.ReadHandler.readUntilHandshakeComplete(未知源)
在com.certicom.tls.interfaceeimpl.TLSConnectionImpl.completeHandshake(未知源)
在com.certicom.tls.record.WriteHandler.write(未知源)
在com.certicom.io.OutputSSLIOStreamWrapper.write(未知源)
位于java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
位于java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
位于java.io.FilterOutputStream.flush(FilterOutputStream.java:140)
位于weblogic.net.http.HttpURLConnection.writeRequests(HttpURLConnection.java:154)
位于weblogic.net.http.HttpURLConnection.getInputStream(HttpURLConnection.java:358)
位于weblogic.net.http.SOAPHttpsURLConnection.getInputStream(SOAPHttpsURLConnection.java:37)
位于weblogic.net.http.HttpURLConnection.getHeaderField(HttpURLConnection.java:702)
位于weblogic.net.http.HttpURLConnection.getResponseCode(HttpURLConnection.java:962)
在com.sun.jersey.client.urlconnection.URLConnectionClientHandler.\u调用(URLConnectionClientHandler.java:217)
位于com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:129)
位于com.sun.jersey.api.client.client.handle(client.java:629)
位于com.sun.jersey.api.client.WebResource.handle(WebResource.java:601)
com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
位于com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:507)
在
第三


E7C0E2529308F>尝试将站点证书添加到weblogic信任库,然后在weblogic启动中添加以下参数

-DUseSunHttpHandler=true
-Dssl.SocketFactory.provider=sun.security.ssl.SSLSocketFactoryImpl 
-Dssl.ServerSocketFactory.provider=sun.security.ssl.SSLSocketFactoryImpl
我有一个像你一样的问题,通过这篇文章我解决了它

通过在JVM参数中添加这些条目修复了该问题

"-Dweblogic.security.SSL.nojce=true"
"-Dweblogic.ssl.JSSEEnabled=true"
"-Dweblogic.security.SSL.enableJSSE=true"

听起来你的信任商店不好。您是否将
“-Dweblogic.security.SSL.trustedCAKeyStore
设置为某个内容?此处引用:不,我没有设置它,是吗?如果我错了,请更正我,但我认为没有。在weblogic控制台上,我看到DemoTrust.jks被选中。在这个jks中都是已知的CA。我可能已在包含CN=“*.somcompany.com”的链中导入了最后一个证书“我知道Weblogic不支持证书中的通配符-也许这就是发生此错误的原因:ava.security.cert.CertificateParsingException:无法为ASN.1设置值。除了基于CXF和使用其他证书的Web服务之外,不使用通配符也可以使用ssl。错误并不表示证书不受信任,但它是不可靠的。请尝试打开环境>服务器>[我的服务器]>SSL>高级>使用JSSE SSL,如所示。而此代码片段可能会解决此问题,确实有助于提高您的文章质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。
"-Dweblogic.security.SSL.nojce=true"
"-Dweblogic.ssl.JSSEEnabled=true"
"-Dweblogic.security.SSL.enableJSSE=true"