Importer certifikat.cer i KeyStore og forbinde til webservice
Hej,Jeg har store problemer at med at forbinde til webservicen cvr.dk. Jeg har følgende kode:
webservice.java
*****************************
import dk.oio.rep.cvr_dk.xml.schemas.LegalUnit._2002._07._03.LegalUnit;
import javax.xml.rpc.ServiceException;
import javax.net.ssl.*;
import cvrwebservice.CVRPortType;
import cvrwebservice.CVRBindingStub;
import cvrwebservice.CVRWebServiceLocator;
import org.apache.axis.AxisFault;
import java.rmi.RemoteException;
import java.security.cert.X509Certificate;
import java.security.cert.CertificateException;
import java.security.NoSuchAlgorithmException;
import java.io.IOException;
public class Webservice
{
public static void main(String[] args)
{
CertificateReader reader = new CertificateReader("onlinecvrdk.crt");
TrustManager[] trustAllCerts = new TrustManager[]
{
new X509TrustManager()
{
public java.security.cert.X509Certificate[] getAcceptedIssuers()
{
X509Certificate[] temp = new X509Certificate[0];
try
{
temp[0] = CertificateReader.getCertificate("onlinecvrdk.crt");
}
catch (CertificateException e)
{
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
} catch (IOException e)
{
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
return temp;
}
public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType)
{
}
public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType)
{
}
}
};
try
{
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
}
catch (Exception e)
{
e.printStackTrace();
}
HostnameVerifier hv = new HostnameVerifier()
{
public boolean verify(String urlHostName, SSLSession session)
{
return true;
}
};
HttpsURLConnection.setDefaultHostnameVerifier(hv);
String opslag = "27103235";
String user = "bruger";
String kode = "hemmelig";
int level = 2;
LegalUnit unit = null;
CVRWebServiceLocator cvr = new cvrwebservice.CVRWebServiceLocator();
CVRBindingStub stub = null;
try
{
stub = new CVRBindingStub(cvr);
stub.setPassword(kode);
stub.setUsername(user);
}
catch (AxisFault axisFault)
{
axisFault.printStackTrace();
System.out.println("AxisFault");
}
CVRPortType port = null;
try
{
port = cvr.getCVRPort();
}
catch (ServiceException e)
{
e.printStackTrace();
System.out.println("ServiceException");
}
try
{
unit = new LegalUnit();
unit = port.getLegalUnit(user,kode,opslag,level);
}
catch (RemoteException e)
{
e.printStackTrace();
System.out.println("RemoteException");
}
System.out.println(unit.getOfficialAddress().getGeneralAddress().getRoadName());
}
}
************************************
Her er en klasse som læser certifikaterne - ligger dem i Keystore:
CertificateReader.java
***************************************
import java.io.InputStream;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.util.Date;
import java.security.KeyStore;
import java.security.PublicKey;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.security.cert.CertificateExpiredException;
import java.security.cert.CertificateNotYetValidException;
public class CertificateReader
{
private PublicKey publicKey;
public CertificateReader(String file)
{
try
{
// Create KeyStore to hold certificate from CVR
KeyStore keyStore = createKeyStore();
// Create X509Certificate object from downloaded file with certificate
X509Certificate x509certificate = getCertificate(file);
// Check validity of certificate
checkCertificateValidity(x509certificate);
// Put X509Certificate in keyStore
keyStore.setCertificateEntry("MyCertificate", x509certificate);
// Get public key from MyCertificate via keyStore
PublicKey publicKey = keyStore.getCertificate("MyCertificate").getPublicKey();
// Output publicKey to Console
System.out.println(publicKey.toString());
}
catch (FileNotFoundException fileNotFoundException)
{
fileNotFoundException.printStackTrace();
}
catch (IOException ioException)
{
ioException.printStackTrace();
}
catch (CertificateNotYetValidException certificateNotYetValidException)
{
certificateNotYetValidException.printStackTrace();
}
catch (CertificateExpiredException certificateExpiredException)
{
certificateExpiredException.printStackTrace();
}
catch (CertificateException certificateException)
{
certificateException.printStackTrace();
}
catch (KeyStoreException keyStoreException)
{
keyStoreException.printStackTrace();
}
catch (NoSuchAlgorithmException noSuchAlgorithmException)
{
noSuchAlgorithmException.printStackTrace();
}
}
public static void checkCertificateValidity(X509Certificate x509certificate) throws CertificateExpiredException, CertificateNotYetValidException
{
Date date = new Date();
x509certificate.checkValidity(date);
}
public static X509Certificate getCertificate(String arstring) throws CertificateException, FileNotFoundException, IOException
{
CertificateFactory certificatefactory = CertificateFactory.getInstance("X.509");
InputStream inputstream = null;
// Read certificate from file
inputstream = new java.io.FileInputStream(arstring);
inputstream = new java.io.BufferedInputStream(inputstream);
// create X509Certificate object
X509Certificate x509certificate = (X509Certificate) certificatefactory.generateCertificate(inputstream);
inputstream.close();
return x509certificate;
}
public static KeyStore createKeyStore() throws KeyStoreException, CertificateException, NoSuchAlgorithmException, IOException
{
KeyStore keyStore = null;
// Get instance of KeyStore of type JKS - JavaKeyStore
keyStore = KeyStore.getInstance("JKS");
// Initialize keyStore
keyStore.load(null, null);
return keyStore;
}
public PublicKey getPublicKey()
{
return publicKey;
}
}
*************************************
