2014-06-05 1 views
0

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을 전송) 내가 이것을 실행하려고하면 내부에 다음과 같은 오류가 누구나 여기에서 잘못 될 수있는 것을 식별하거나 로컬로 아웃 바운드 종점을 테스트 할 수있는 대체 방법을 제안합니까? 미리 감사드립니다.

답변

0

별도의 응용 프로그램이 실제로 실행되고 있습니까? 그렇지 않은 것처럼 보입니다. 아마도 시작하지 못할 수도 있습니다.

+0

안녕하세요 @ David, 내 test.jks 파일에 문제가있는 것으로 보입니다. 이제 문제가 해결 될 것이므로 자세한 내용은 업데이트 질문을 참조하십시오. – danw

+0

curl -k 할 수 있습니까? 그렇다면 클라이언트 Mule 앱에 사용 된 HTTPS 커넥터의 클라이언트 키 저장소에 snake oil cert를 설치해야합니다. –

+0

예 나는 말릴 수있다. snakeoil 인증서를 설치하는 데 사용할 수있는 안내서를 알고 있습니까? 나는 그 일을하는 방법에 익숙하지 않다. – danw

관련 문제