2017-03-09 9 views
0

GRPC-SSL을 통해 Java 클라이언트를 Java 이외의 서버에 연결하려고합니다. SSL을 사용하지 않을 때 서버에 연결할 수 있습니다. 제공된 PEM 파일을 사용하여 SSL 컨텍스트를 사용하여 ManagedChannel을 만들려고하면 아래 예외가 발생합니다 (동일한 pem 파일이 NodeJS 클라이언트에서 작동 함). TrustManager의 통화에서Grpc Java 클라이언트 용 SSL 연결

ManagedChannel channel = NettyChannelBuilder.forAddress("localhost", 10010) 
    .sslContext(GrpcSslContexts.forClient().trustManager(new File("./test/myprivkey.pem")).build()) 
    .build(); 

예외 :

compile 'io.netty:netty-tcnative-boringssl-static:1.1.33.Fork26' 

문제의 원인이나 방법이 더 문제를 해결하는 수 있습니다 무엇을 어떤 아이디어 관련 섹션 build.gradle

Exception in thread "main" java.lang.IllegalArgumentException: File does not contain valid certificates: /Users/continue/IdeaProjects/git/test/build/resources/main/keys/myprivkey.pem 
    at io.netty.handler.ssl.SslContextBuilder.trustManager(SslContextBuilder.java:162) 
    at com.test.io.grpc.test.client.Connection.getSslContext(Connection.java:65) 
    at com.test.io.grpc.test.client.Connection.getSecure(Connection.java:41) 
    at com.test.io.grpc.mgcs.client.TestClient.<init>(TestClient.java:36) 
    at com.test.io.grpc.test.client.TestClient.main(TestClient.java:89) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 
Caused by: java.security.cert.CertificateException: found no certificates in input stream 
    at io.netty.handler.ssl.PemReader.readCertificates(PemReader.java:98) 
    at io.netty.handler.ssl.PemReader.readCertificates(PemReader.java:64) 
    at io.netty.handler.ssl.SslContext.toX509Certificates(SslContext.java:999) 
    at io.netty.handler.ssl.SslContextBuilder.trustManager(SslContextBuilder.java:160) 

?

+0

예외와 매개 변수가 같은 파일인지 확인 했습니까? – efekctive

+0

예, 파일 이름 선택 중 - 위의 코드를 수동으로 수정했습니다. file.exists()로 확인했습니다. –

답변

0

잘못된 파일을 SslContext 구축을위한 인증서 파일로 읽었습니다. 잘못된 입력을 올바른 인증서 파일로 바꾸면 문제가 해결됩니다.

0

인증서가 DNSSimple에서 제공된 경우 내가해야 할 것을 발견했습니다. openssl pkcs8 -topk8 -nocrypt -in original.key -out new_key.key.pcks8 키 형식을 변환하려면 다음을 수행하십시오. :