Я пытаюсь создать приложение 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