我已经安装了security.provider.1 = org.bouncycastle.jce.provider.BouncyCastleProvider但它在SSL握手期间没有被使用

时间:2017-04-26 12:44:24

标签: java security ssl bouncycastle java-security

以下是我的过程中其中一个连接的堆栈跟踪:

"ServerConnection on port 10000 Thread 27" #521 prio=5 os_prio=0 tid=0x0000000002db4800 nid=0x2d79 runnable [0x00007f0ababb1000] 
java.lang.Thread.State: RUNNABLE
 at java.net.SocketInputStream.socketRead0(Native Method)
 at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
 at java.net.SocketInputStream.read(SocketInputStream.java:171)
 at java.net.SocketInputStream.read(SocketInputStream.java:141)
 at sun.security.ssl.InputRecord.readFully(InputRecord.java:465)
 at sun.security.ssl.InputRecord.read(InputRecord.java:503)
 at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973)
 - locked <0x00000006d63c51f0> (a java.lang.Object)
 at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:930)
 at sun.security.ssl.AppInputStream.read(AppInputStream.java:105)
 - locked <0x00000006d6405210> (a sun.security.ssl.AppInputStream)
 at org.apache.geode.internal.cache.tier.sockets.Message.fetchHeader(Message.java:691)
 at org.apache.geode.internal.cache.tier.sockets.Message.readHeaderAndPayload(Message.java:709)
 at org.apache.geode.internal.cache.tier.sockets.Message.read(Message.java:657)
 at org.apache.geode.internal.cache.tier.sockets.Message.recv(Message.java:1105)
 - locked <0x00000006d6405288> (a java.nio.HeapByteBuffer)
 at org.apache.geode.internal.cache.tier.sockets.Message.recv(Message.java:1118)
 at org.apache.geode.internal.cache.tier.sockets.BaseCommand.readRequest(BaseCommand.java:869)
 at org.apache.geode.internal.cache.tier.sockets.ServerConnection.doNormalMsg(ServerConnection.java:723)
 at org.apache.geode.internal.cache.tier.sockets.ServerConnection.doOneMessage(ServerConnection.java:914)
 at org.apache.geode.internal.cache.tier.sockets.ServerConnection.run(ServerConnection.java:1171)
 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
 at org.apache.geode.internal.cache.tier.sockets.AcceptorImpl$1$1.run(AcceptorImpl.java:519)
 at java.lang.Thread.run(Thread.java:745)

在这里,我想而不是sun.security.ssl我应该看到从充气城堡图书馆使用的东西。

1 个答案:

答案 0 :(得分:1)

有几件事:

1)您要添加哪个充气城堡供应商? Bouncy castle将JCE提供程序和JSSE提供程序打包在单独的jar中,并且必须使用单独的提供程序类。 JSSE提供程序类是 org.bouncycastle.jsse.provider.BouncyCastleJsseProvider ,JCE提供程序是org.bouncycastle.jce.provider.BouncyCastleProvider

2)是的,按优先级顺序查找提供程序,但如上面的响应中所述,返回的实现还取决于应用程序代码中如何请求算法/协议。首先,提供者应该实现您请求的算法/协议,并且还必须使用您在请求时使用的名称/别名来注册它。

例如,如果代码请求TLS上下文为javax.net.ssl.SSLContext.getInstance(&#34; SSL&#34;),则BC不会返回任何上下文,因为它不会注册任何实现用那个别名。但是,SunJSSE会在添加&#34; SSL&#34;作为&#34; TLS&#34;

的别名

是的,您可以明确询问特定提供商的实施情况。所有JCE / JSSE api都有一个额外的重载方法,它接受提供者名称。例如,

javax.net.ssl.SSLContext.getInstance(&#34; TLS&#34;,&#34; BCJSSE&#34;);

javax.net.ssl.KeyManagerFactory(&#34; PKIX&#34;,&#34; BCJSSE&#34;);