2017-10-02 15 views
0

TLSをサポートする特定のホストに接続しようとしています。私は有効な私有鍵を持っています - "my.key"、私の証明書 - "my.crt"、そしてrootCA証明書 "root_ca.crt"。 OpenSSLを使って要求されたホストを既に知っています。 JksOptions()およびJavaキーストアファイル ".jks" PfxOptions(BY Vert.xでTLSでホストに接続できません

  • では

    • )及び(PKCS12形式) "を.pfx"
    • ファイル:VERTXはこれを行う方法を、いくつかの異なるバリアントを使用することができますPemKeyCertOptions()と2つのファイル( "key.pem" と "cert.pemを")

    しかし、私はこのようにすることにより:

    NetClient client = vertx.createNetClient(
           (NetClientOptions) new NetClientOptions() 
             .setLogActivity(true) 
             .setSsl(true) 
             .setOpenSslEngineOptions(new OpenSSLEngineOptions()) 
             .addEnabledSecureTransportProtocol("TLSv1.2") 
             .setJksOptions(
               new JksOptions() 
                 .setPath("/path/to/my.jks") 
                 .setPassword("password") 
             ) 
         ); 
    client.connect(some_port, "some_host", ar -> { 
          if (ar.succeeded()) { 
           LOG.debug("Connection succeeded!!!!"); 
          } else { 
           LOG.debug("Connection failed!!!! :: {} :: {}", ar.cause(), ar.cause().getMessage()); 
          } 
         }); 
    

    ビルドはSUCCです私はこのコードを実行すると、ESSが、私は持っている例外:

    INFO: Succeeded in deploying verticle 
    [vert.x-eventloop-thread-0] DEBUG io.netty.handler.ssl.ReferenceCountedOpenSslContext - verification of certificate failed 
    sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 
        at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:397) 
        at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:302) 
        at sun.security.validator.Validator.validate(Validator.java:260) 
        at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324) 
        at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:281) 
        at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:136) 
        at io.netty.handler.ssl.ReferenceCountedOpenSslClientContext$ExtendedTrustManagerVerifyCallback.verify(ReferenceCountedOpenSslClientContext.java:223) 
        at io.netty.handler.ssl.ReferenceCountedOpenSslContext$AbstractCertificateVerifier.verify(ReferenceCountedOpenSslContext.java:606) 
        at org.apache.tomcat.jni.SSL.readFromSSL(Native Method) 
        at io.netty.handler.ssl.ReferenceCountedOpenSslEngine.readPlaintextData(ReferenceCountedOpenSslEngine.java:470) 
        at io.netty.handler.ssl.ReferenceCountedOpenSslEngine.unwrap(ReferenceCountedOpenSslEngine.java:927) 
        at io.netty.handler.ssl.ReferenceCountedOpenSslEngine.unwrap(ReferenceCountedOpenSslEngine.java:1033) 
        at io.netty.handler.ssl.SslHandler$SslEngineType$1.unwrap(SslHandler.java:200) 
        at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1117) 
        at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1039) 
        at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:411) 
        at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:248) 
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363) 
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349) 
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341) 
        at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1334) 
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363) 
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349) 
        at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:926) 
        at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:129) 
        at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:642) 
        at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:565) 
        at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:479) 
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:441) 
        at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858) 
        at java.lang.Thread.run(Thread.java:748) 
    Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 
        at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141) 
        at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126) 
        at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280) 
        at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:392) 
        ... 30 more 
    

    キーストアの作成時にたぶん私は何か間違ったことをやっていますか? 私はこのチュートリアルを使用しています - https://support.adeptia.com/hc/en-us/articles/207878953-How-to-create-a-KeyStore-with-certificate-chain

    私はTLSによって私のホストに接続するための正しいキーストアを得ることができますか?

  • 答えて

    0

    私は、このコマンドでPKCS12形式で正しいJavaキーストアを作成する方法を見つける:

    openssl pkcs12 -inkey my.key -in my.crt -export -out domain.pfx 
    

    、その後のようPemTrustOptionsに入れ、生成PfxOptionsで「domain.pfx」ファイルと「root_ca.crt」ファイルを置きますこれは:

    return new NetClientOptions() 
          .setSsl(true) 
          .addEnabledSecureTransportProtocol("TLSv1.2") 
          .setPfxKeyCertOptions(
            new PfxOptions() 
              .setPath(pathToKeystoreFile) 
              .setPassword(keystorePassword) 
          ) 
          .setPemTrustOptions(
            new PemTrustOptions() 
              .addCertPath(rootCACertificate) 
          ); 
    

    PS証明書の作成中に入力したkeystorePassword。

    関連する問題