2017-04-26 2 views
0

中に使用されていないが、私のプロセス内の接続のいずれかのスタックトレースです:私はsecurity.provider.1 = org.bouncycastle.jce.provider.BouncyCastleProviderを入れているが、それは、SSLハンドシェイクここ

"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の代わりに推測します。私は弾力のある城のライブラリから何かを見るべきです。

+0

バウンシーキャッスルセキュリティプロバイダを追加すると、実行時にプロバイダがJVMに使用できることが確認されますが、このプロバイダが使用される保証はありません。それはあなたのコードで使用されている暗号に基づいています。 SSL接続を行うコードを共有します。 –

+0

サードパーティのライブラリです。しかし、プロバイダーの優先度を考慮してその暗号を検索すべきではないでしょうか? – mdavid

+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( "SSL")として要求している場合、BCはそのエイリアスの実装を登録しないため、コンテキストを返しません。ただし、SunJSSEは「TLS」へのエイリアスとして「SSL」を追加するためコンテキストを返します

はい、特定のプロバイダから実装を明示的に尋ねることができます。すべてのJCE/JSSE APIには、プロバイダ名を使用する追加のオーバーロードされたメソッドがあります。たとえば、

javax.net.ssl.SSLContext.getInstance( "TLS"、 "BCJSSE");

javax.net.ssl.KeyManagerFactory( "PKIX"、 "BCJSSE");

関連する問題