关于使用bouncycastle库为在Tomcat7上运行的JDK1.6启用TLSv1.2的问题

问题描述 投票:0回答:1

我正在尝试从运行jdk1.6的apache tomcat7服务器(在aws ec2上)向我的vpc内的aws api网关专用端点进行api调用。此类专用端点仅允许TLSv1.2。我正在使用jdk1.6.45(它没有TLSv1.2支持OOTB),由于其他限制,没有升级的可能性。我试图使用充气城堡jce和jsse提供程序,以便可以使用HttpsUrlConnection对象创建与api网关的https连接。

当我尝试进行api调用时,我在充气城堡提供者的注册方面遇到问题。找到ECDH算法似乎有点问题。

这里是堆栈跟踪:

WARNING: Client raised fatal(2) internal_error(80) alert: Failed to read record
org.bouncycastle.tls.crypto.TlsCryptoException: cannot calculate secret
        at org.bouncycastle.tls.crypto.impl.jcajce.JceTlsECDomain.calculateECDHAgreement(Unknown Source)
        at org.bouncycastle.tls.crypto.impl.jcajce.JceTlsECDH.calculateSecret(Unknown Source)
        at org.bouncycastle.tls.TlsECDHEKeyExchange.generatePreMasterSecret(Unknown Source)
        at org.bouncycastle.tls.TlsProtocol.establishMasterSecret(Unknown Source)
        at org.bouncycastle.tls.TlsClientProtocol.handleHandshakeMessage(Unknown Source)
        at org.bouncycastle.tls.TlsProtocol.processHandshakeQueue(Unknown Source)
        at org.bouncycastle.tls.TlsProtocol.processRecord(Unknown Source)
        at org.bouncycastle.tls.RecordStream.readRecord(Unknown Source)
        at org.bouncycastle.tls.TlsProtocol.safeReadRecord(Unknown Source)
        at org.bouncycastle.tls.TlsProtocol.blockForHandshake(Unknown Source)
        at org.bouncycastle.tls.TlsClientProtocol.connect(Unknown Source)
        at org.bouncycastle.jsse.provider.ProvSSLSocketDirect.startHandshake(Unknown Source)
        at org.bouncycastle.jsse.provider.ProvSSLSocketDirect.startHandshake(Unknown Source)
        at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:434)
        at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1195)
        at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:234)
        at com.dart.flett.bl.BLGats.getInboxOutBox(BLGats.java:32)
        at com.dart.flett.bl.BLInbox.makeInboxOutboxCall(BLInbox.java:497)
        at com.solvefastinc.fe.gwt.server.FECoreFacade.aggregateInboxGATS(FECoreFacade.java:1817)
        at com.solvefastinc.fe.gwt.server.FEFormServiceImpl.aggregateInboxGATS(FEFormServiceImpl.java:417)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:561)
        at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208)
        at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)
        at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at com.solvefastinc.flett.servletfilter.GWTNoCacheFilter.doFilter(GWTNoCacheFilter.java:56)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:662)
Caused by: java.security.NoSuchAlgorithmException: Algorithm ECDH not available
        at javax.crypto.KeyAgreement.getInstance(DashoA13*..)
        at org.bouncycastle.jcajce.util.DefaultJcaJceHelper.createKeyAgreement(Unknown Source)
        at org.bouncycastle.tls.crypto.impl.jcajce.JcaTlsCrypto.calculateKeyAgreement(Unknown Source)
        ... 51 more
org.bouncycastle.tls.crypto.TlsCryptoException: cannot calculate secret
        at org.bouncycastle.tls.crypto.impl.jcajce.JceTlsECDomain.calculateECDHAgreement(Unknown Source)
        at org.bouncycastle.tls.crypto.impl.jcajce.JceTlsECDH.calculateSecret(Unknown Source)
        at org.bouncycastle.tls.TlsECDHEKeyExchange.generatePreMasterSecret(Unknown Source)
        at org.bouncycastle.tls.TlsProtocol.establishMasterSecret(Unknown Source)
        at org.bouncycastle.tls.TlsClientProtocol.handleHandshakeMessage(Unknown Source)
        at org.bouncycastle.tls.TlsProtocol.processHandshakeQueue(Unknown Source)
        at org.bouncycastle.tls.TlsProtocol.processRecord(Unknown Source)
        at org.bouncycastle.tls.RecordStream.readRecord(Unknown Source)
        at org.bouncycastle.tls.TlsProtocol.safeReadRecord(Unknown Source)
        at org.bouncycastle.tls.TlsProtocol.blockForHandshake(Unknown Source)
        at org.bouncycastle.tls.TlsClientProtocol.connect(Unknown Source)
        at org.bouncycastle.jsse.provider.ProvSSLSocketDirect.startHandshake(Unknown Source)
        at org.bouncycastle.jsse.provider.ProvSSLSocketDirect.startHandshake(Unknown Source)
        at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:434)
        at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1195)
        at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:234)
        at com.dart.flett.bl.BLGats.getInboxOutBox(BLGats.java:32)
        at com.dart.flett.bl.BLInbox.makeInboxOutboxCall(BLInbox.java:497)
        at com.solvefastinc.fe.gwt.server.FECoreFacade.aggregateInboxGATS(FECoreFacade.java:1817)
        at com.solvefastinc.fe.gwt.server.FEFormServiceImpl.aggregateInboxGATS(FEFormServiceImpl.java:417)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:561)
        at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208)
        at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)
        at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at com.solvefastinc.flett.servletfilter.GWTNoCacheFilter.doFilter(GWTNoCacheFilter.java:56)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:662)
Caused by: java.security.NoSuchAlgorithmException: Algorithm ECDH not available
        at javax.crypto.KeyAgreement.getInstance(DashoA13*..)
        at org.bouncycastle.jcajce.util.DefaultJcaJceHelper.createKeyAgreement(Unknown Source)
        at org.bouncycastle.tls.crypto.impl.jcajce.JcaTlsCrypto.calculateKeyAgreement(Unknown Source)
        ... 51 more

到目前为止,我从类似问题的帖子中所做的事情是:

  1. 我已将充气城堡库bcprov-ext-jdk15on-162.jar,bcpkix-jdk15on-162.jar,bctls-jdk15on-162.jar移到JAVA_HOME / jre / security / ext中并添加了行]]
  2. security.provider.2=org.bouncycastle.jce.provider.BouncyCastleProvider
    security.provider.3=org.bouncycastle.jsse.provider.BouncyCastleJsseProvider
    

到我的java.security文件。我还打印了注册的提供程序进行控制台,并且可以在下面的列表中看到BC和BCJSSE提供程序。

SUN
BC
BCJSSE
SunRsaSign
SunJSSE
SunJCE
SunJGSS
SunSASL
XMLDSig
SunPCSC
SunMSCAPI
  1. 我已将无限强度的加密扩展名保存到java安全文件夹中

  2. 我研究了充气城堡的源代码,发现以下代码失败,我在https客户端中尝试了自己。

  3. try {
       KeyAgreement ka = KeyAgreement.getInstance("ECDH", BouncyCastleProvider.PROVIDER_NAME);
    }
        catch ( Exception e) {
        e.printStackTrace();
    }
    

    虽然我直接从这里https://www.bouncycastle.org/latest_releases.html获得它们,但在ext文件夹中解析我的提供者jar似乎有一些问题。

    我还按照此建议比较了此罐子的校验和,以确保其真实性:https://github.com/bcgit/bc-java/issues/514

这里是堆栈跟踪:

java.security.NoSuchProviderException: JCE cannot authenticate the provider BC
        at javax.crypto.SunJCE_b.a(DashoA13*..)
        at javax.crypto.KeyAgreement.getInstance(DashoA13*..)
        at com.solvefastinc.flett.comm.GATSApiService.connect(GATSApiService.java:109)
        at com.dart.flett.bl.BLInbox.makeInboxOutboxCall(BLInbox.java:496)
        at com.solvefastinc.fe.gwt.server.FECoreFacade.aggregateInboxGATS(FECoreFacade.java:1817)
        at com.solvefastinc.fe.gwt.server.FEFormServiceImpl.aggregateInboxGATS(FEFormServiceImpl.java:417)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:561)
        at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208)
        at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)
        at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at com.solvefastinc.flett.servletfilter.GWTNoCacheFilter.doFilter(GWTNoCacheFilter.java:56)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:662)
Caused by: java.util.jar.JarException: Cannot parse file:/C:/Program%20Files/Java/jdk1.6.0_45/jre/lib/ext/bcprov-ext-jdk15on-162.jar
        at javax.crypto.SunJCE_c.a(DashoA13*..)
        at javax.crypto.SunJCE_b.b(DashoA13*..)
        at javax.crypto.SunJCE_b.a(DashoA13*..)
        ... 36 more
  1. 我已经打印出可用的密码套件,以确保aws api网关支持与JDK1.6打包的套件。可以看到
    *    TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
    *    TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
    

    在下面的列表中,两者都支持

  2. Default Cipher
            TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA
            TLS_DHE_DSS_WITH_AES_128_CBC_SHA
            TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
            TLS_DHE_DSS_WITH_AES_128_GCM_SHA256
            TLS_DHE_DSS_WITH_AES_256_CBC_SHA
            TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
            TLS_DHE_DSS_WITH_AES_256_GCM_SHA384
            TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA
            TLS_DHE_RSA_WITH_AES_128_CBC_SHA
            TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
            TLS_DHE_RSA_WITH_AES_128_CCM
            TLS_DHE_RSA_WITH_AES_128_CCM_8
            TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
            TLS_DHE_RSA_WITH_AES_256_CBC_SHA
            TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
            TLS_DHE_RSA_WITH_AES_256_CCM
            TLS_DHE_RSA_WITH_AES_256_CCM_8
            TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
            TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
       *    TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
       *    TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
            TLS_ECDHE_ECDSA_WITH_AES_128_CCM
            TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8
       *    TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
       *    TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
       *    TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
            TLS_ECDHE_ECDSA_WITH_AES_256_CCM
            TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8
       *    TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
       *    TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
            TLS_ECDHE_ECDSA_WITH_NULL_SHA
            TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
       *    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
       *    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
       *    TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
       *    TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
       *    TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
       *    TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
       *    TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
            TLS_ECDHE_RSA_WITH_NULL_SHA
            TLS_RSA_WITH_3DES_EDE_CBC_SHA
       *    TLS_RSA_WITH_AES_128_CBC_SHA
       *    TLS_RSA_WITH_AES_128_CBC_SHA256
            TLS_RSA_WITH_AES_128_CCM
            TLS_RSA_WITH_AES_128_CCM_8
       *    TLS_RSA_WITH_AES_128_GCM_SHA256
       *    TLS_RSA_WITH_AES_256_CBC_SHA
       *    TLS_RSA_WITH_AES_256_CBC_SHA256
            TLS_RSA_WITH_AES_256_CCM
            TLS_RSA_WITH_AES_256_CCM_8
       *    TLS_RSA_WITH_AES_256_GCM_SHA384
            TLS_RSA_WITH_NULL_SHA
            TLS_RSA_WITH_NULL_SHA256
    

这是我的代码示例,显示了发出的请求。注意:我信任所有证书,因为api不会通过Internet提供,并且由于aws不提供api网关api的签名证书。

TrustManager trm = new X509TrustManager() {
    public X509Certificate[] getAcceptedIssuers() {
    return null;
    }

    public void checkClientTrusted(X509Certificate[] certs, String 
    authType) {
    }

    public void checkServerTrusted(X509Certificate[] certs, String 
        authType) {}
};

SSLContext sc = SSLContext.getInstance("TLSv1.2",new BouncyCastleJsseProvider());       
sc.init(null, new TrustManager[] {trm} SecureRandom.getInstance("DEFAULT", "BC"));  

conn = (HttpsURLConnection) this.gatsUrl.openConnection();  
conn.setRequestMethod("GET");
conn.setConnectTimeout(30000);
conn.setDoInput(true);          
conn.setSSLSocketFactory(sc.getSocketFactory());

根据我已阅读的所有内容,包括充气城堡文档和其他问题,在两个提供商都注册后,上面的代码应该可以工作。

我正在尝试从运行jdk1.6的apache tomcat7服务器(在aws ec2上)向我的vpc内的aws api网关专用端点进行api调用。此类专用端点仅允许TLSv1.2。我正在使用...

我在使用JDK1.6和TLS1.2时遇到了类似的问题,但是使用Jetty7而不是Tomcat7。

我的解决方案是替换jar文件:

我以前在我的Maven pom.xml中拥有:

    <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcprov-jdk15on</artifactId>
        <version>1.64</version>
    </dependency>
    <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bctls-jdk15on</artifactId>
        <version>1.64</version>
    </dependency>

我用这些值替换了它:

    <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcprov-jdk15to18</artifactId>
        <version>1.64</version>
    </dependency>
    <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bctls-jdk15to18</artifactId>
        <version>1.64</version>
    </dependency>

我从这里得到提示:https://www.bouncycastle.org/latest_releases.html

上述站点提到了此:

进一步说明(Oracle JVM 1.7或更早版本的用户,“ Java 9之前”工具包的用户):从1.63版开始,如果在JCE中使用任一签名验证遇到问题,我们就开始包括针对“ jdk15to18”的签名jar。或常规“ jdk15on” jar文件中存在多发行版本目录,请尝试使用“ jdk15to18” jar。

tomcat7 aws-api-gateway bouncycastle tls1.2 jdk1.6
1个回答
0
投票

我在使用JDK1.6和TLS1.2时遇到了类似的问题,但是使用Jetty7而不是Tomcat7。

© www.soinside.com 2019 - 2024. All rights reserved.