Tweezijdig SSL verbinding opzetten

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Jilvoos
  • Registratie: Maart 2003
  • Laatst online: 23-08 17:17
Allereerst wil ik zeggen dat ik 0 ervaring heb met webservices noch met ssl verbindingen en certificaten. Dus houd daar in je commentaar/opmerkingen/antwoorden a.u.b. een beetje rekening mee.

Het volgende is er aan de hand:

- Ik heb een Maven Web Project aangemaakt in Netbeans.
- Hier heb ik met JAX-WS gegenereerde code aan toegevoegd (aan de hand van een WSDL van de WS).
- Bij het opstarten van de de client worden de volgende System Properties gezet:
Java:
1
2
3
System.setProperty("javax.net.ssl.keyStore", <absolute pad .p12 cert>);
System.setProperty("javax.net.ssl.keyStorePassword", <.p12 wachtwoord>);
System.setProperty("javax.net.ssl.keyStoreType", "pkcs12");


- In deze keystore zit de private key welke hoort bij het certificaat waarmee ik de WSDL van de WS kan benaderen (certificaat is dus goed).
- Er wordt gecheckt of het certificaat ook echt bestaat.

Verder heb ik geen idee wat er nog meer gedaan kan worden. Ik heb geprobeerd om GlassFish te configureren:
- Server cert. toegevoegd aan truststore van GlassFish.
- P12 keystore geïmporteerd in keystore van GlassFish.

Ook heb ik server en eigen certificaat toegevoegd aan de cacerts file van mijn jre (die van de jdk en de standalone jre, omdat ik niet weet welke er nou gebruikt wordt :S).

Maar het blijft allemaal resulteren in de volgende exception:
code:
1
2
javax.xml.ws.WebServiceException: Failed to access the WSDL at: https://adres.adres?wsdl. It failed with: 
        Received fatal alert: bad_certificate.


Ik ben dus driftig op zoek naar hulp, want ik zit helemaal vast en ik kan toch moeilijk goede informatie op internet vinden. Dus ik hoop dat jullie kunnen helpen.

Alvast bedankt

Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
De client moet het certificaat van de server hebben in diens truststore, niet de private key van de server in de keystore. Als je dus het certificaat in de client opneemt zou dat al voldoende moeten zijn. De foutmelding bad_certificate is over het algemeen een indicatie dat de keystore geen of een ongeldig certificaat bevat. Aangezien je een private key gebruikt, is dat zeer waarschijnlijk de oorzaak.

Realiseer je dat de private key nooit uitgedeeld moet worden en dus in principe alleen bij de server hoort (serverside authenticatie) OF alleen bij de client (clientside authenticatie).

Acties:
  • 0 Henk 'm!

  • Jilvoos
  • Registratie: Maart 2003
  • Laatst online: 23-08 17:17
Ja ik heb dus de private key van de client in de keystore van GlassFish gezet. Het certificaat (public key) van de server heb ik dan weer in de cacerts.jks (dat is de truststore toch?) gezet van GlassFish. De private key van de server heb ik niet en daar heb ik dus ook niks mee gedaan.

Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
Ik ben zelf niet heel erg actief bezig met SSL (is al weer een tijd geleden), maar misschien kan dit helpen:http://vafer.org/blog/20061010073725

Acties:
  • 0 Henk 'm!

  • Salandur
  • Registratie: Mei 2003
  • Laatst online: 15:50

Salandur

Software Engineer

volgens mij vergeet je de truststore in te stellen, dus zal java de standaard truststore gebruiken waar de CA van de server waarschijnlijk niet in zit.

daarnaast een advies: gebruik bij een application server NOOIT de systemproperties om de certificaten in te stellen. Dat kan tot heel vreemd gedrag leiden.

Assumptions are the mother of all fuck ups | iRacing Profiel