You are viewing a plain text version of this content. The canonical link for it is here.
Posted to soap-user@ws.apache.org by Trimarchi Michele <Mi...@crypto.it> on 2003/02/27 16:55:39 UTC
Soap-Https connection problem
Hi there..
i'm trying to connect to a webservice that requires client authentication
with https protocol but i can't connect because my servlet throws
this exception.
[SOAPException: faultCode=SOAP-ENV:Client; msg=Error opening socket:
java.net.SocketException: SSL implementation not available;
targetException=java.lang.IllegalArgumentException: Error opening socket:
java.net.SocketException: SSL implementation not available]
at
org.apache.soap.transport.http.SOAPHTTPConnection.send(SOAPHTTPConnection.ja
va:354)
at org.apache.soap.rpc.Call.invoke(Call.java:248)
at TestPagamentiSOAP.doPost(TestPagamentiSOAP.java:62)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)[...]
I have used keyman and in a file called client3.keystore file i have
imported correctly private key for client authentication and server
certificate for CA.
a snippet of my code..
System.setProperty("java.protocol.handler.pkgs",
"com.sun.net.ssl.internal.www.protocol");
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
System.setProperty("javax.net.ssl.trustStore","C:\\Documents and
Settings\\mymachine\\Desktop\\client3.keystore");
System.setProperty("javax.net.ssl.keyStore", "C:\\Documents and
Settings\\mymachine\\Desktop\\client3.keystore");
String SOAPActionURI = "";
Call call = createCall();
call.setMethodName("HelloWorld");
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
call.setTargetObjectURI("urn:Service1");
Vector params = new Vector();
Parameter valorePar = new Parameter("valore", int.class, new
Integer(valore), Constants.NS_URI_SOAP_ENC);
params.addElement(valorePar);
Parameter nomePar = new Parameter("nome", java.lang.String.class, nome,
Constants.NS_URI_SOAP_ENC);
params.addElement(nomePar);
call.setParams(params);
URL nuovoURL=new
URL("https://serverwithhttps/pagamentiinternet/pagamento.asmx");
org.apache.soap.rpc.Response resp = call.invoke(nuovoURL, SOAPActionURI);
on invoke it throws the exception!!!!!
It's very strange because with the following code everything works great.
[..]
System.setProperty("java.protocol.handler.pkgs",
"com.sun.net.ssl.internal.www.protocol");
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
SSLSocketFactory ssf;
TrustManagerFactory tmf;
KeyManagerFactory kmf;
KeyStore ks;
FileInputStream fis;
String pathKeyStore="C:\\Documents and
Settings\\mymachine\\Desktop\\client3.keystore";
char[] passphrase = "keystore".toCharArray();
fis=new FileInputStream(pathKeyStore);
ks = KeyStore.getInstance("JKS");
ks.load(fis, passphrase);
tmf = TrustManagerFactory.getInstance("SunX509");
tmf.init(ks);
kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, passphrase);
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
fis.close();
try {
URL url = new
URL("https://serverwithhttps/pagamentiinternet/pagamento.asmx");
com.sun.net.ssl.HttpsURLConnection connection =
(com.sun.net.ssl.HttpsURLConnection) url.openConnection();
ssf = ctx.getSocketFactory();
connection.setSSLSocketFactory(ssf);
connection.connect();
System.out.println("Connection OK:" + connection.getURL());
[...]
This code works like a sharm,so i'm pretty sure that keystore is correct.
I'm using:
jdk 1.2.2
jsse-1_0_3_01
apache soap 2.3
Any hints?
Tnx in advance.
Michele
Re: Soap-Https connection problem
Posted by Trimarchi Michele <Mi...@crypto.it>.
Finally it works.
I forgot to set this property:
System.setProperty("javax.net.ss.trustStorePassword", "keystorePass");
System.setProperty("javax.net.ssl.keyStorePassword", "keystorePass");
thanks anyway
Michele
p.s. (charm,not sharm) :)
----- Original Message -----
From: "Trimarchi Michele" <Mi...@crypto.it>
To: <so...@ws.apache.org>
Sent: Thursday, February 27, 2003 4:55 PM
Subject: Soap-Https connection problem
> Hi there..
> i'm trying to connect to a webservice that requires client authentication
> with https protocol but i can't connect because my servlet throws
> this exception.
>
> [SOAPException: faultCode=SOAP-ENV:Client; msg=Error opening socket:
> java.net.SocketException: SSL implementation not available;
> targetException=java.lang.IllegalArgumentException: Error opening socket:
> java.net.SocketException: SSL implementation not available]
> at
>
org.apache.soap.transport.http.SOAPHTTPConnection.send(SOAPHTTPConnection.ja
> va:354)
> at org.apache.soap.rpc.Call.invoke(Call.java:248)
> at TestPagamentiSOAP.doPost(TestPagamentiSOAP.java:62)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)[...]
>
> I have used keyman and in a file called client3.keystore file i have
> imported correctly private key for client authentication and server
> certificate for CA.
>
> a snippet of my code..
> System.setProperty("java.protocol.handler.pkgs",
> "com.sun.net.ssl.internal.www.protocol");
> Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
> System.setProperty("javax.net.ssl.trustStore","C:\\Documents and
> Settings\\mymachine\\Desktop\\client3.keystore");
> System.setProperty("javax.net.ssl.keyStore", "C:\\Documents and
> Settings\\mymachine\\Desktop\\client3.keystore");
>
> String SOAPActionURI = "";
> Call call = createCall();
> call.setMethodName("HelloWorld");
> call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
> call.setTargetObjectURI("urn:Service1");
> Vector params = new Vector();
> Parameter valorePar = new Parameter("valore", int.class, new
> Integer(valore), Constants.NS_URI_SOAP_ENC);
> params.addElement(valorePar);
> Parameter nomePar = new Parameter("nome", java.lang.String.class, nome,
> Constants.NS_URI_SOAP_ENC);
> params.addElement(nomePar);
> call.setParams(params);
> URL nuovoURL=new
> URL("https://serverwithhttps/pagamentiinternet/pagamento.asmx");
> org.apache.soap.rpc.Response resp = call.invoke(nuovoURL,
SOAPActionURI);
>
> on invoke it throws the exception!!!!!
>
> It's very strange because with the following code everything works great.
>
> [..]
> System.setProperty("java.protocol.handler.pkgs",
> "com.sun.net.ssl.internal.www.protocol");
> Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
>
> SSLSocketFactory ssf;
> TrustManagerFactory tmf;
> KeyManagerFactory kmf;
> KeyStore ks;
> FileInputStream fis;
> String pathKeyStore="C:\\Documents and
> Settings\\mymachine\\Desktop\\client3.keystore";
> char[] passphrase = "keystore".toCharArray();
>
> fis=new FileInputStream(pathKeyStore);
> ks = KeyStore.getInstance("JKS");
> ks.load(fis, passphrase);
> tmf = TrustManagerFactory.getInstance("SunX509");
> tmf.init(ks);
> kmf = KeyManagerFactory.getInstance("SunX509");
> kmf.init(ks, passphrase);
> SSLContext ctx = SSLContext.getInstance("TLS");
> ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
> fis.close();
>
> try {
> URL url = new
> URL("https://serverwithhttps/pagamentiinternet/pagamento.asmx");
> com.sun.net.ssl.HttpsURLConnection connection =
> (com.sun.net.ssl.HttpsURLConnection) url.openConnection();
> ssf = ctx.getSocketFactory();
> connection.setSSLSocketFactory(ssf);
> connection.connect();
> System.out.println("Connection OK:" + connection.getURL());
> [...]
>
>
> This code works like a sharm,so i'm pretty sure that keystore is
correct.
> I'm using:
> jdk 1.2.2
> jsse-1_0_3_01
> apache soap 2.3
>
> Any hints?
> Tnx in advance.
>
> Michele
>
>
>
>