Keystore и truststore для двухстороннего ssl для Mulesoft - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь создать приложение Mule для чтения REST API с помощью взаимной аутентификации.Поставщик проверяет подлинность запроса на основе client_id, secret, а также требует взаимной аутентификации на основе SSL.Чтобы добиться этого, я пытаюсь создать склад доверенных сертификатов и хранилище ключей из следующих имеющихся у меня файлов:

Имеющиеся у меня файлы: 1-> xxxxx.pem (Этот файл был сгенерирован поставщиком с использованием файла xxxx.CSR, которыймы поделились с ними)

2-> xxxxx.key

Мои настройки и желаемое состояние:

Я использую Mule 3.9.1 EE и выполняю развертывание в cloudhub.И у меня нет выделенного ведущего балансировщика

команд openssl, используемых для генерации хранилищ:

    openssl pkcs12 -export -name server-cert  -in xxxxxxx_auth.pem -inkey xxxxxxx_auth.key -out serverkeystore.p12

    keytool -importkeystore -destkeystore server.keystore -srckeystore serverkeystore.p12 -srcstoretype pkcs12 -alias server-cert


    keytool -import -alias client-cert -file xxxxxxx_auth.pem -keystore server.truststore


    keytool -import -alias server-cert -file xxxxxxx_auth.pem -keystore server.truststore


    openssl pkcs12 -export -name client-cert -in xxxxxxx_auth.pem -inkey xxxxxxx_auth.key -out clientkeystore.p12

    keytool -importkeystore -destkeystore client.keystore -srckeystore clientkeystore.p12 -srcstoretype pkcs12 -alias client-cert

    keytool -import -alias server-cert -file xxxxxxx_auth.pem -keystore client.truststore

Конфигурация HTTP-запроса:

<http:request-config protocol="HTTPS"
 name="httpsClientConnectorMutualAuth" host="accounts.vendors.com" port="443"
 doc:name="HTTP Request Configuration" basePath="/">
     <tls:context>
         <tls:trust-store path="server.truststore" password="vendor@1" type="jks"/>
         <tls:key-store type="jks" path="client.keystore" alias="client-cert" keyPassword="vendor@1" password="vendor@1"/>
     </tls:context>

Когда я использую эти хранилища в конфигурации HTTP-запроса, я получаю следующую ошибку:

Message               : Error sending HTTP request to https://accounts.test.com:443/auth/oauth/v2/token.
 Payload               : 
 Payload Type          : java.lang.String
 Element               : /vendor-testFlow/processors/1 @ xxx-test-xxxxxxx:xxxx-test.xml:37 (HTTP)
 Element XML           : <http:request config-    ref="httpsClientConnectorMutualAuth" path="auth/oauth/v2/token" method="POST" doc:name="HTTP">
                         <http:request-builder>
                         <http:query-param paramName="grant_type" value="client_credentials"></http:query-param>
                         <http:header headerName="Authorization" value="Basic abcdefghijklmnopqrstuvqxyz=="></http:header>
                         <http:header headerName="Content-Type" value="application/json"></http:header>
                         </http:request-builder>
                         </http:request>
 --------------------------------------------------------------------------------
 Root Exception stack trace:
 sun.security.validator.ValidatorException: No trusted certificate found
 at         sun.security.validator.SimpleValidator.buildTrustedChain(SimpleValidator.java:397)
 at     sun.security.validator.SimpleValidator.engineValidate(SimpleValidator.java:134)
 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 sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1501)
 at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216)
 at sun.security.ssl.Handshaker.processLoop(Handshaker.java:1026)
 at sun.security.ssl.Handshaker$1.run(Handshaker.java:966)
 at sun.security.ssl.Handshaker$1.run(Handshaker.java:963)
 at java.security.AccessController.doPrivileged(Native Method)
 at sun.security.ssl.Handshaker$DelegatedTask.run(Handshaker.java:1416)
 at org.glassfish.grizzly.ssl.SSLUtils.executeDelegatedTask(SSLUtils.java:274)
 at org.glassfish.grizzly.ssl.SSLBaseFilter.doHandshakeStep(SSLBaseFilter.java:709)
 at org.glassfish.grizzly.ssl.SSLFilter.doHandshakeStep(SSLFilter.java:332)
 at org.glassfish.grizzly.ssl.SSLBaseFilter.doHandshakeStep(SSLBaseFilter.java:623)
 at org.glassfish.grizzly.ssl.SSLBaseFilter.handleRead(SSLBaseFilter.java:335)
 at com.ning.http.client.providers.grizzly.SwitchingSSLFilter.handleRead(SwitchingSSLFilter.java:74)
 at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
 at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
 at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
 at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
 at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
 at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
 at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:539)
 at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
 at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
 at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
 at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
 at org.glassfish.grizzly.threadpool.AbstractThreadpool$Worker.doWork(AbstractThreadpool.java:593)
 at org.glassfish.grizzly.threadpool.AbstractThreadpool$Worker.run(AbstractThreadpool.java:573)
 at java.lang.Thread.run(Thread.java:748)

Хотел узнать, есть ли что-то неправильное, что я здесь делаю?

Vinay

...