XML을 처리하고 게시하는 Mule 플로우 (Mule CE 3.4.0, Studio 3.5.0)가 있습니다. 이 HTTPS 끝점과 같이 사용하여 웹 서비스 :HTTPS를 통해 메시지를 보낼 때 Mule - 요청한 대상에 대한 유효한 인증 경로를 찾을 수 없습니다.
<flow>
<!-- Process XML -->
<https:outbound-endpoint address="https://admin:[email protected]:8081/hello" exchange-pattern="request-response" contentType="text/xml" method="POST" doc:name="HTTP"/>
<!-- Evaluate response -->
</flow>
생산, 이것은 다른 플랫폼이 아니라 로컬에서 테스트하기 위해 노출 된 웹 서비스를 공격합니다, 나는 완전히 별도의 뮬 응용 프로그램을 만들었습니다 (별도의 작업 공간, 프로젝트 파일 등)를 사용하여 메시지를 소비하도록 HTTPS 끝점을 제공합니다.
<spring:beans>
<security:authentication-manager alias="MyManager">
<security:authentication-provider>
<security:user-service id="UserService">
<security:user name="admin" password="password" authorities="ROLE_ADMIN"/>
</security:user-service>
</security:authentication-provider>
</security:authentication-manager>
</spring:beans>
<spring-security:security-manager>
<spring-security:delegate-security-provider name="InMemory" delegate-ref="MyManager"/>
</spring-security:security-manager>
<https:connector name="httpsConnector">
<https:tls-key-store path="test.jks" keyPassword="test1234" storePassword="test1234"/>
</https:connector>
<flow name="httpTestFlow" doc:name="httpTestFlow">
<https:inbound-endpoint exchange-pattern="one-way" host="localhost" port="8081" doc:name="HTTP" connector-ref="httpsConnector">
<spring-security:http-security-filter realm="mule-realm" securityProviders="InMemory"/>
</https:inbound-endpoint>
<object-to-string-transformer doc:name="Object to String"/>
<logger level="INFO" message="The XML message received is: #[payload]" doc:name="Logger"/>
</flow>
********************************************************************************
Message : Failed to route event via endpoint: DefaultOutboundEndpoint{endpointUri=https://admin:<password>@localhost/hello, connector=HttpsConnector
{
name=connector.https.mule.default
lifecycle=start
this=7cc4f42c
numberOfConcurrentTransactedReceivers=4
createMultipleTransactedReceivers=true
connected=true
supportedProtocols=[https]
serviceOverrides=<none>
}
, name='endpoint.https.localhost.8081.hello', mep=REQUEST_RESPONSE, properties={http.method=POST, Content-Type=text/xml}, transactionConfig=Transaction{factory=null, action=INDIFFERENT, timeout=0}, deleteUnacceptedMessages=false, initialState=started, responseTimeout=10000, endpointEncoding=UTF-8, disableTransportTransformer=false}. Message payload is of type: PostMethod
Code : MULE_ERROR--2
--------------------------------------------------------------------------------
Exception stack is:
1. unable to find valid certification path to requested target (sun.security.provider.certpath.SunCertPathBuilderException)
sun.security.provider.certpath.SunCertPathBuilder:196 (null)
2. PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target (sun.security.validator.ValidatorException)
sun.security.validator.PKIXValidator:385 (null)
3. sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target (javax.net.ssl.SSLHandshakeException)
sun.security.ssl.Alerts:192 (http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/net/ssl/SSLHandshakeException.html)
4. Failed to route event via endpoint: DefaultOutboundEndpoint{endpointUri=https://admin:<password>@localhost/hello, connector=HttpsConnector
{
name=connector.https.mule.default
lifecycle=start
this=7cc4f42c
numberOfConcurrentTransactedReceivers=4
createMultipleTransactedReceivers=true
connected=true
supportedProtocols=[https]
serviceOverrides=<none>
}
, name='endpoint.https.localhost.8081.hello', mep=REQUEST_RESPONSE, properties={http.method=POST, Content-Type=text/xml}, transactionConfig=Transaction{factory=null, action=INDIFFERENT, timeout=0}, deleteUnacceptedMessages=false, initialState=started, responseTimeout=10000, endpointEncoding=UTF-8, disableTransportTransformer=false}. Message payload is of type: PostMethod (org.mule.api.transport.DispatchException)
org.mule.transport.http.HttpClientMessageDispatcher:155 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/transport/DispatchException.html)
--------------------------------------------------------------------------------
Root Exception stack trace:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:196)
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:268)
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:380)
+ 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
********************************************************************************
그리고 메시지 수신 내 다른 응용 프로그램 내부에이 오류 :
ERROR 2014-06-05 15:58:05,380 [[test-webservice].http.request.dispatch.8081.01] org.mule.exception.DefaultSystemExceptionStrategy: Caught exception in Exception Strategy: Received fatal alert: certificate_unknown
javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:136)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1822)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1004)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1188)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:818)
at com.sun.net.ssl.internal.ssl.AppInputStream.read(AppInputStream.java:75)
at com.sun.net.ssl.internal.ssl.AppInputStream.read(AppInputStream.java:50)
at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:78)
at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:106)
at org.mule.transport.http.HttpServerConnection.readLine(HttpServerConnection.java:243)
at org.mule.transport.http.HttpServerConnection.getRequestLine(HttpServerConnection.java:509)
at org.mule.transport.http.HttpRequestDispatcherWork.run(HttpRequestDispatcherWork.java:70)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:695)
수를
나는 나의 뮬 응용 프로그램 (하나는 XML을 전송) 내가 이것을 실행하려고하면 내부에 다음과 같은 오류가 누구나 여기에서 잘못 될 수있는 것을 식별하거나 로컬로 아웃 바운드 종점을 테스트 할 수있는 대체 방법을 제안합니까? 미리 감사드립니다.
안녕하세요 @ David, 내 test.jks 파일에 문제가있는 것으로 보입니다. 이제 문제가 해결 될 것이므로 자세한 내용은 업데이트 질문을 참조하십시오. – danw
curl -k 할 수 있습니까? 그렇다면 클라이언트 Mule 앱에 사용 된 HTTPS 커넥터의 클라이언트 키 저장소에 snake oil cert를 설치해야합니다. –
예 나는 말릴 수있다. snakeoil 인증서를 설치하는 데 사용할 수있는 안내서를 알고 있습니까? 나는 그 일을하는 방법에 익숙하지 않다. – danw