Jax-ws + SSL

Salve galera !

Alguém ai já implementou WebService com SSL ?

SSL em uma aplicação JEE comum funciona normalmente, configurações do web.xml, mas aplicando as mesmas regras são aplicadas ao WebService, quando vou consumir:

com.sun.xml.internal.ws.client.ClientTransportException: HTTP transport error: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names present
        at com.sun.xml.internal.ws.transport.http.client.HttpClientTransport.getOutput(HttpClientTransport.java:121)
        at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:142)
        at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:83)
        at com.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:105)
        at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:587)
        at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:546)
        at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:531)
        at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:428)
        at com.sun.xml.internal.ws.client.Stub.process(Stub.java:211)
        at com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(SEIStub.java:124)
        at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:98)
        at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)
        at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:107)
        at $Proxy29.hello(Unknown Source)
        at webserviceclient.Main.main(Main.java:25)
Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names present
        at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1611)
        at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:187)
        at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:181)
        at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1035)
        at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:124)
        at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:516)
        at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:454)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:884)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1112)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1139)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1123)
        at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:434)
        at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)
        at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:904)
        at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:230)
        at com.sun.xml.internal.ws.transport.http.client.HttpClientTransport.getOutput(HttpClientTransport.java:109)
        ... 14 more
Caused by: java.security.cert.CertificateException: No subject alternative names present
        at sun.security.util.HostnameChecker.matchIP(HostnameChecker.java:142)
        at sun.security.util.HostnameChecker.match(HostnameChecker.java:75)
        at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkIdentity(X509TrustManagerImpl.java:264)
        at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:250)
        at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1014)
        ... 26 more

Já pesquisei muito, mas até agora nada…

Se não me engano, teu problema está no host do certificado (deve ser um no serviço que você está consultando e outro no certificado).

Se você quiser, existe uma ferramenta ótima para visualizar certificados, chama-se Key Store Explorer , da Lazgo Software. Eu uso sempre que preciso editar um certificado :wink:

[]´s

Quando precisei implementar SSL em webservices, utilizei o keytool para gerar um certificado.
Então adicionei o caminho físico deste certificado no Axis (utilizei apache axis para consumir o ws) e consumi o web service normalmente.

[quote=biro]Quando precisei implementar SSL em webservices, utilizei o keytool para gerar um certificado.
Então adicionei o caminho físico deste certificado no Axis (utilizei apache axis para consumir o ws) e consumi o web service normalmente.[/quote]

Pelo que entendo da mensagem, se não estivesse achando o certificado, ele daria

"PKIX building path … "

[]´s

Aliás, também pode ser um problema com alias. Você usa o mesmo certificado para mais de um serviço?

[]´s

Realmente… o certificado ele esta encontrando…

Estou usando WebSphere, ele já vem configurado para receber conexões com ssl, com um certificado com a CN=was-01, que é o nome da máquina.

[quote=leandro.alves]Realmente… o certificado ele esta encontrando…

Estou usando WebSphere, ele já vem configurado para receber conexões com ssl, com um certificado com a CN=was-01, que é o nome da máquina. [/quote]

Abra o certificado e cheque se contém mais de um keypair.

[]´s

[quote=asaudate][quote=leandro.alves]Realmente… o certificado ele esta encontrando…

Estou usando WebSphere, ele já vem configurado para receber conexões com ssl, com um certificado com a CN=was-01, que é o nome da máquina. [/quote]

Abra o certificado e cheque se contém mais de um keypair.

[]´s[/quote]

hehe… Como faço ? Com o keytool ?

[quote=leandro.alves][quote=asaudate][quote=leandro.alves]Realmente… o certificado ele esta encontrando…

Estou usando WebSphere, ele já vem configurado para receber conexões com ssl, com um certificado com a CN=was-01, que é o nome da máquina. [/quote]

Abra o certificado e cheque se contém mais de um keypair.

[]´s[/quote]

hehe… Como faço ? Com o keytool ?[/quote]

Use aquela ferramenta que falei mais pra cima, o Key Store Explorer, que fica mais fácil.

[]´s

[quote=asaudate][quote=leandro.alves][quote=asaudate][quote=leandro.alves]Realmente… o certificado ele esta encontrando…

Estou usando WebSphere, ele já vem configurado para receber conexões com ssl, com um certificado com a CN=was-01, que é o nome da máquina. [/quote]

Abra o certificado e cheque se contém mais de um keypair.

[]´s[/quote]

hehe… Como faço ? Com o keytool ?[/quote]

Use aquela ferramenta que falei mais pra cima, o Key Store Explorer, que fica mais fácil.

[]´s[/quote]

Clickei em examine certificate, mas, não tem info. sobre keypair…