Package de.dfncert.tools
Class DFNPKIClient
java.lang.Object
de.dfncert.tools.DFNPKIClient
SOAP-Client für die DFN-PKI. Normalerweise ist jeder ausgelagerte CA in der
DFN-PKI so konfiguriert, dass eine Instanz dieser Klasse mit der CA
kommunizieren kann. Dazu muss der Installationsname der CA bekannt sein.
Dieser Name kann aus der URL der Webschnittstellen entnommen werden:
https://pki.pca.dfn.de/<Installationsname>/pubEs existieren für die verschiedenen Schnittstellen (öffentlich, RA) eigene Objekte. Für die öffentliche Schnittstelle ist kein RA-Zertifikat erforderlich. Die Methoden der Registrierungsschnittstelle können erst nach dem erfolgreichen Laden eines RA-Zertifikats mittels der "loadRA" Methoden aufgerufen werden. Hier ein komplettes Beispiel für die Erzeugung eines Antrags mit Schlüsselpaar, Hochladen und Genehmigung des Antrags sowie der Abholung des resultierenden Zertifikats:
// RSA-Schlüsselpaar erzeugen KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA"); generator.initialize(2048); KeyPair pair = generator.generateKeyPair(); // PKCS#10-Antrag erzeugen String request = Cryptography.createPKCS10( "C=DE,O=Testinstallation Eins CA,OU=PCA,CN=Max Mustermann", pair.getPublic(), pair.getPrivate()); // CLient erzeugen und Antrag hochladen DFNPKIClient client = new DFNPKIClient("test-eins-ca"); int serial = client.getPublic().newRequest( 1, request, new String[]{"email:mustermann@example.org"}, "User", Cryptography.sha1("Sperr-PIN".getBytes()), "Max Mustermann", "mustermann@example.org", null, true); // Sperrprüfung einschalten client.setCheckRevocation(true); // RA-Zertifikat laden client.loadRAFromPKCS12("test-eins-ra1.p12", "test-eins".toCharArray()); // Antragsdaten holen, diese signieren und damit Antrag genehmigen byte raw[] = client.getRegistration().getRawRequest(serial); client.getRegistration().approveRequest( serial, raw, Cryptography.createPKCS7Signed(raw, client.getRAPrivateKey(), client.getRACertificate())); // Alle 10 Sekunden nach ausgestelltem Zertifikat fragen String pem = ""; while (pem.equals("")) { Thread.sleep(10000l); pem = client.getRegistration().getCertificateByRequestSerial(serial); }Technischer Support sowie eine Testumgebung kann bei der DFN-PCA unter dfnpca@dfn-cert.de angefragt werden.
- Author:
- moennich
-
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionDFNPKIClient
(String CAName) Erstellt eine neue Instanz für die Kommunikation mit der CA. -
Method Summary
Modifier and TypeMethodDescriptionLiefert den Installationsnamen der aktuellen CA.Reserviert für die Zukunft.Liefert die Schnittstelle mit Methoden für öffentliche Funktionen wie z.B.Liefert das geladene RA-Zertifikat.Liefert die komplette Kette des RA-Zertifikats inklusive aller CA-Zertifikate.Liefert den privaten Schlüssel des RA-Zertifikats.Liefert die Schnittstelle mit Methoden für die Registrierungsstelle wie z.B.Liefert die Socket-Fabrik für die aktuelle CA.listCertsWithKeyFromSmartCard
(String pkcs11library, char[] password) Listet alle Objekte auf einem PKCS#11-Gerät auf, denen ein privater Schlüssel zugeordnet werden kann.void
loadRAFromKeystore
(KeyStore store, String alias, char[] password) Läd das RA-Operator Zertifikat aus einem bereits initialisierten KeyStore.void
loadRAFromPKCS12
(InputStream input, char[] password) Läd das RA-Operator Zertifikat als PKCS#12 aus einem InputStream.void
loadRAFromPKCS12
(String filename, char[] password) Läd das RA-Operator Zertifikat aus einer PKCS#12-Datei.void
loadRAFromProvider
(String providerType, String providerName, String entryName, char[] password) Läd das RA-Operator Zertifikat aus einem Provider der eigenen Wahl.void
loadRAFromSmartCard
(String pkcs11library, char[] password, String entryName) Läd ein RA-Operator Zertifikat von einem PKCS#11-Gerät.void
loadRAFromSmartCard
(String pkcs11library, char[] password, String entryName, int slot) Läd ein RA-Operator Zertifikat von einem PKCS#11-Gerät wie z.B. einer SmartCard oder einem USB-Token.void
Setzt den Installationsnamen der aktuellen CA.void
setCheckRevocation
(boolean bCheckRevocation) Schaltet die Prüfung des Revozierungsstatus der Zertifikate beim Aufbau einer SSL-Verbindung an oder aus.void
setPublicHostname
(String Hostname) Setzt den Rechnernamen für die öffentliche Schnittstelle.void
setRAHostname
(String Hostname) Setzt den Rechnernamen für die Registrierungs-Schnittstelle.
-
Field Details
-
PKCS11_PROVIDER_NAME
- See Also:
-
-
Constructor Details
-
DFNPKIClient
Erstellt eine neue Instanz für die Kommunikation mit der CA. Der angegebene Name muss der Installationsname der CA und keine komplette URL sein! Den Namen der CA im Zweifelsfall bitte bei der DFN-PCA erfragen.- Parameters:
CAName
- Installationsname der CA- Throws:
Exception
- Fehlerweiterleitung
-
-
Method Details
-
getPublic
Liefert die Schnittstelle mit Methoden für öffentliche Funktionen wie z.B. Beantragung eines Zertifikats. Es muss vorher kein Zertifikat zur Authentifizierung geladen werden.- Returns:
- Öffentliche Schnittstelle
-
getDomains
Reserviert für die Zukunft. Noch nicht benutzen!- Returns:
- Schnittstelle
-
getRegistration
Liefert die Schnittstelle mit Methoden für die Registrierungsstelle wie z.B. Genehmigen von Zertifikatanträgen. Es muss zuvor über eine der "loadRA"-Methoden ein RA-Zertifikat für die Authentifizierung geladen werden.- Returns:
- Registrieungsstellen-Schnittstelle
-
getCAName
Liefert den Installationsnamen der aktuellen CA.- Returns:
- Installationsname der CA
-
setCAName
Setzt den Installationsnamen der aktuellen CA. Der Name kann bei der DFN-PCA erfragt werden.- Parameters:
CAName
- Installationsname der CA
-
setPublicHostname
Setzt den Rechnernamen für die öffentliche Schnittstelle. Diese Methode muss normalerweise nie verwendet werden, da der interne Standardwertpki.pca.dfn.de
ist.- Parameters:
Hostname
- Rechnername für öffentliche Schnittstelle
-
setRAHostname
Setzt den Rechnernamen für die Registrierungs-Schnittstelle. Diese Methode muss normalerweise nie verwendet werden, da der interne Standardwertra.pca.dfn.de
ist.- Parameters:
Hostname
- Rechnername für Registrierungs-Schnittstelle
-
setCheckRevocation
public void setCheckRevocation(boolean bCheckRevocation) Schaltet die Prüfung des Revozierungsstatus der Zertifikate beim Aufbau einer SSL-Verbindung an oder aus. Der DFNPKIClient setzt keinen Default-Wert- Parameters:
bCheckRevocation
- true: Property com.sun.net.ssl.checkRevocation auf true setzen.
-
getRACertificate
Liefert das geladene RA-Zertifikat.- Returns:
- RA-Zertifikat
-
getRAChain
Liefert die komplette Kette des RA-Zertifikats inklusive aller CA-Zertifikate.- Returns:
- RA-Kette
-
getRAPrivateKey
Liefert den privaten Schlüssel des RA-Zertifikats.- Returns:
- Privater Schlüssel RA-Zertifikat
-
getSocketFactory
Liefert die Socket-Fabrik für die aktuelle CA. Da hier bereits das RA-Zertifikat "freigeschaltet" ist, kann diese Klasse für Authentifizierung an anderer Stelle eingesetzt werden (z.B. JDBC).- Returns:
- Socket-Fabrik
-
loadRAFromKeystore
Läd das RA-Operator Zertifikat aus einem bereits initialisierten KeyStore. Dieser KeyStore muss die MethodengetKey
,getCertificate
undgetCertificateChain
für das RA-Zertifikat bereitstellen.- Parameters:
store
- Initialisierter KeyStorealias
- Alias-Name des RA-Zertifikats im KeyStorepassword
- Passwort des KeyStores (fürgetKey
)- Throws:
Exception
- Fehlerweiterleitung
-
loadRAFromPKCS12
Läd das RA-Operator Zertifikat aus einer PKCS#12-Datei. Dazu wird die Datei mit dem angegebenen Passwort geöffnet und es werden alle Alias Einträge durchlaufen. Der erste Alias-Eintrag, zu dem ein privater Schlüssel existiert, wird als RA-Operator Zertifikat verwendet.- Parameters:
filename
- Dateiname der Dateipassword
- Passwort der Datei- Throws:
Exception
- Fehlerweiterleitung
-
loadRAFromPKCS12
Läd das RA-Operator Zertifikat als PKCS#12 aus einem InputStream.- Parameters:
input
- PKCS12 Eingabestrompassword
- Passwort des PKCS12- Throws:
Exception
- Fehlerweiterleitung
-
loadRAFromProvider
public void loadRAFromProvider(String providerType, String providerName, String entryName, char[] password) throws Exception Läd das RA-Operator Zertifikat aus einem Provider der eigenen Wahl.- Parameters:
providerType
- Typ des Providers (für KeyStore.getInstance)providerName
- Name des Providers (registriert über Security.addProvider)entryName
- Alias des Zertifikats im KeyStorepassword
- Passwort zum Öffnen des KeyStore (KeyStore.load)- Throws:
Exception
- Fehlerweiterleitung
-
loadRAFromSmartCard
public void loadRAFromSmartCard(String pkcs11library, char[] password, String entryName) throws Exception Läd ein RA-Operator Zertifikat von einem PKCS#11-Gerät. WieloadRAFromSmartCard(java.lang.String, char[], java.lang.String, int)
nur dass hier -1 fürslot
übergeben wird, d.h. es wird das Kryptogerät im ersten gefundenen Slot, der ein Gerät enthält, verwendet.- Parameters:
pkcs11library
- Pfad zu der PKCS11-Bibliothekpassword
- Passwort (User-PIN) des GerätsentryName
- Alias des Zertifikats im KeyStore- Throws:
Exception
- Fehlerweiterleitung
-
loadRAFromSmartCard
public void loadRAFromSmartCard(String pkcs11library, char[] password, String entryName, int slot) throws Exception Läd ein RA-Operator Zertifikat von einem PKCS#11-Gerät wie z.B. einer SmartCard oder einem USB-Token. Das Kryptogerät muss zum Zeitpunkt des Aufrufs dieser Methode eingesteckt sein. Warten auf das Einstecken eines Kryptogeräts ist nicht implementiert.- Parameters:
pkcs11library
- Pfad zu der PKCS11-Bibliothekpassword
- Passwort (User-PIN) des GerätsentryName
- Alias auf dem Gerät (z.B. mitlistCertsWithKeyFromSmartCard(java.lang.String, char[])
ermittelt)slot
- Slot des Readers, -1 für den ersten verfügbaren- Throws:
Exception
- Fehlerweiterleitung
-
listCertsWithKeyFromSmartCard
public Vector<String> listCertsWithKeyFromSmartCard(String pkcs11library, char[] password) throws Exception Listet alle Objekte auf einem PKCS#11-Gerät auf, denen ein privater Schlüssel zugeordnet werden kann.- Parameters:
pkcs11library
- Pfad zur PKCS#11-Bibliothekpassword
- Passwort des Geräts- Returns:
- Liste aller Alias-Namen, die einen Schlüssel haben
- Throws:
Exception
- Fehlerweiterleitung
-