Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我已经将security.provider.1=org.bouncycastle.jce.provider.BouncyCastleProvider放在了SSL握手期间没有使用它_Java_Security_Ssl_Bouncycastle_Java Security - Fatal编程技术网

Java 我已经将security.provider.1=org.bouncycastle.jce.provider.BouncyCastleProvider放在了SSL握手期间没有使用它

Java 我已经将security.provider.1=org.bouncycastle.jce.provider.BouncyCastleProvider放在了SSL握手期间没有使用它,java,security,ssl,bouncycastle,java-security,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

以下是进程中一个连接的堆栈跟踪:

"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,而应该看到bouncy castle library中使用的一些内容。

以下几点:

1您正在添加哪个bouncy castle提供商?Bouncy castle将JCE提供程序和JSSE提供程序打包在单独的JAR中,并且必须使用单独的提供程序类。JSSE提供程序类是org.bouncycastle.JSSE.provider.BouncyCastleJsseProvider,JCE提供程序是org.bouncycastle.JCE.provider.BouncyCastleProvider

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

例如,如果代码正在请求作为javax.net.ssl.SSLContext.getInstancesl的TLS上下文,BC将不会返回任何上下文,因为它不会使用该别名注册任何实现。但是,SunJSSE在将SSL作为别名添加到TLS时将返回一个上下文

是的,您可以明确地向特定的提供者请求实现。所有JCE/JSSEAPI都有一个附加的重载方法,该方法采用提供者名称。比如说,

javax.net.ssl.SSLContext.getInstanceTLS,BCJSSE


javax.net.ssl.KeyManagerFactoryPKIX,BCJSSE

添加bouncy castle安全提供程序将确保该提供程序在运行时可用于JVM,但不能保证使用该提供程序。它基于代码中使用的密码。共享建立SSL连接的代码。它是第三方库。但是,考虑到提供者的优先级,不应该搜索密码吗?会的,但是如果在代码中指定了不同的提供者呢?如果是第三方,您可以查看第三方代码(如果可用)。是否有方法从代码中显式指定提供程序?您可以在code Security.addProvidernew BouncyCastleProvider中添加提供程序;但是在握手过程中会根据交换的证书选择合适的提供者。您可以在生成密钥库时指定提供程序名称。