2012-04-13 22 views
6

Fondamentalmente ho bisogno di proteggere le mie richieste verso questo servizio.Invocazione del servizio Web Java dal client C# utilizzando i certificati JKS e/o PFX

Ho fornito un cliente JAR di prova e due file, trust.jks e Client.pfx, ma non ho idea di come usarli: Capisco classe X509Certificate2 è coinvolto in qualche modo.

La riga di comando per eseguire il client di prova è la seguente:

java -Djavax.net.ssl.trustStore=trust.jks -Djavax.net.ssl.trustStorePassword=******** -Djavax.net.ssl.trustStoreType=JKS -Djavax.net.ssl.keyStore=Client.pfx -Djavax.net.ssl.keyStoreType=pkcs12 -Djavax.net.ssl.keyStorePassword=******** -jar TestClient.jar https://myServiceurl 

Funziona, così posso vedere sia il servizio, e il servizio stesso deve essere configurato correttamente.

mio client C# (si mira NET 2.0) utilizza un normale riferimento Web per effettuare le richieste:

wsReferenceClient service = new wsReferenceClient(); 
//certificate code here ? 
//maybe service.ClientCertificates.Add(<X509Certificate2 object built somehow>); ? 
service.MyRequest(myParameters); 

impostazioni server deve essere configurato correttamente.

Ho frugato in giro con i metodi X509Certificate2 ma non riesco a uscire con qualcosa che abbia senso, quindi la risposta al 'cosa hai provato?' la domanda al momento è "Non so davvero cosa provare in primo luogo".

Qualsiasi aiuto sarebbe molto apprezzato.

+0

AFAIK lo store JKS è una soluzione Java proprietaria. È necessario esportare le chiavi pubbliche (forse l'intera catena) utilizzando keytool e importarlo in un negozio di formato aperto come PKCS. – home

+0

Corretto, anche se preferisco prendere i certificati attendibili da esso separatamente e usarli. Il pfx dovrebbe già contenere la chiave privata e la catena di certificati. –

+0

Quindi, se ho capito bene, ho bisogno di rendere il file JKS commestibile per il mio client in qualche modo? Penso che tornerò su Google un po 'di più ... – Alex

risposta

7

Risulta che non è necessario fare nulla con il file JKS.

wsReferenceClient service = new wsReferenceClient(); 
X509Certificate2 cert = new X509Certificate2(); 
cert.Import("Client.pfx", "<the password>", DefaultKeySet); 
service.ClientCertificates.Add(cert); 
service.MyRequest(myParameters); 

Ciò consente alle mie richieste HTTPS di completare correttamente.

Problemi correlati