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.voidloadRAFromKeystore(KeyStore store, String alias, char[] password) Läd das RA-Operator Zertifikat aus einem bereits initialisierten KeyStore.voidloadRAFromPKCS12(InputStream input, char[] password) Läd das RA-Operator Zertifikat als PKCS#12 aus einem InputStream.voidloadRAFromPKCS12(String filename, char[] password) Läd das RA-Operator Zertifikat aus einer PKCS#12-Datei.voidloadRAFromProvider(String providerType, String providerName, String entryName, char[] password) Läd das RA-Operator Zertifikat aus einem Provider der eigenen Wahl.voidloadRAFromSmartCard(String pkcs11library, char[] password, String entryName) Läd ein RA-Operator Zertifikat von einem PKCS#11-Gerät.voidloadRAFromSmartCard(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.voidloadRAFromSmartCard(String pkcs11library, char[] password, String entryName, ArrayList<Integer> slotList) voidSetzt den Installationsnamen der aktuellen CA.voidsetCheckRevocation(boolean bCheckRevocation) Schaltet die Prüfung des Revozierungsstatus der Zertifikate beim Aufbau einer SSL-Verbindung an oder aus.voidsetPublicHostname(String Hostname) Setzt den Rechnernamen für die öffentliche Schnittstelle.voidsetRAHostname(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.deist.- 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.deist.- 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,getCertificateundgetCertificateChainfü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
-
loadRAFromSmartCard
public void loadRAFromSmartCard(String pkcs11library, char[] password, String entryName, ArrayList<Integer> slotList) throws Exception - Throws:
Exception
-
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
-