Package de.dfncert.tools
Class DFNPKIClient
- java.lang.Object
-
- de.dfncert.tools.DFNPKIClient
-
public class DFNPKIClient extends java.lang.Object
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>/pub
Es 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.
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.String
PKCS11_PROVIDER_NAME
-
Constructor Summary
Constructors Constructor Description DFNPKIClient(java.lang.String CAName)
Erstellt eine neue Instanz für die Kommunikation mit der CA.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description java.lang.String
getCAName()
Liefert den Installationsnamen der aktuellen CA.DFNCERTDomains
getDomains()
Reserviert für die Zukunft.DFNCERTPublic
getPublic()
Liefert die Schnittstelle mit Methoden für öffentliche Funktionen wie z.B.java.security.cert.X509Certificate
getRACertificate()
Liefert das geladene RA-Zertifikat.java.security.cert.X509Certificate[]
getRAChain()
Liefert die komplette Kette des RA-Zertifikats inklusive aller CA-Zertifikate.java.security.PrivateKey
getRAPrivateKey()
Liefert den privaten Schlüssel des RA-Zertifikats.DFNCERTRegistration
getRegistration()
Liefert die Schnittstelle mit Methoden für die Registrierungsstelle wie z.B.javax.net.ssl.SSLSocketFactory
getSocketFactory()
Liefert die Socket-Fabrik für die aktuelle CA.java.util.Vector<java.lang.String>
listCertsWithKeyFromSmartCard(java.lang.String pkcs11library, char[] password)
Listet alle Objekte auf einem PKCS#11-Gerät auf, denen ein privater Schlüssel zugeordnet werden kann.void
loadRAFromKeystore(java.security.KeyStore store, java.lang.String alias, char[] password)
Läd das RA-Operator Zertifikat aus einem bereits initialisierten KeyStore.void
loadRAFromPKCS12(java.io.InputStream input, char[] password)
Läd das RA-Operator Zertifikat als PKCS#12 aus einem InputStream.void
loadRAFromPKCS12(java.lang.String filename, char[] password)
Läd das RA-Operator Zertifikat aus einer PKCS#12-Datei.void
loadRAFromProvider(java.lang.String providerType, java.lang.String providerName, java.lang.String entryName, char[] password)
Läd das RA-Operator Zertifikat aus einem Provider der eigenen Wahl.void
loadRAFromSmartCard(java.lang.String pkcs11library, char[] password, java.lang.String entryName)
Läd ein RA-Operator Zertifikat von einem PKCS#11-Gerät.void
loadRAFromSmartCard(java.lang.String pkcs11library, char[] password, java.lang.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
setCAName(java.lang.String CAName)
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(java.lang.String Hostname)
Setzt den Rechnernamen für die öffentliche Schnittstelle.void
setRAHostname(java.lang.String Hostname)
Setzt den Rechnernamen für die Registrierungs-Schnittstelle.
-
-
-
Field Detail
-
PKCS11_PROVIDER_NAME
public static final java.lang.String PKCS11_PROVIDER_NAME
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
DFNPKIClient
public DFNPKIClient(java.lang.String CAName) throws java.lang.Exception
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:
java.lang.Exception
- Fehlerweiterleitung
-
-
Method Detail
-
getPublic
public DFNCERTPublic 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
public DFNCERTDomains getDomains()
Reserviert für die Zukunft. Noch nicht benutzen!- Returns:
- Schnittstelle
-
getRegistration
public DFNCERTRegistration 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
public java.lang.String getCAName()
Liefert den Installationsnamen der aktuellen CA.- Returns:
- Installationsname der CA
-
setCAName
public void setCAName(java.lang.String CAName)
Setzt den Installationsnamen der aktuellen CA. Der Name kann bei der DFN-PCA erfragt werden.- Parameters:
CAName
- Installationsname der CA
-
setPublicHostname
public void setPublicHostname(java.lang.String Hostname)
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
public void setRAHostname(java.lang.String Hostname)
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
public java.security.cert.X509Certificate getRACertificate()
Liefert das geladene RA-Zertifikat.- Returns:
- RA-Zertifikat
-
getRAChain
public java.security.cert.X509Certificate[] getRAChain()
Liefert die komplette Kette des RA-Zertifikats inklusive aller CA-Zertifikate.- Returns:
- RA-Kette
-
getRAPrivateKey
public java.security.PrivateKey getRAPrivateKey()
Liefert den privaten Schlüssel des RA-Zertifikats.- Returns:
- Privater Schlüssel RA-Zertifikat
-
getSocketFactory
public javax.net.ssl.SSLSocketFactory 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
public void loadRAFromKeystore(java.security.KeyStore store, java.lang.String alias, char[] password) throws java.lang.Exception
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:
java.lang.Exception
- Fehlerweiterleitung
-
loadRAFromPKCS12
public void loadRAFromPKCS12(java.lang.String filename, char[] password) throws java.lang.Exception
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:
java.lang.Exception
- Fehlerweiterleitung
-
loadRAFromPKCS12
public void loadRAFromPKCS12(java.io.InputStream input, char[] password) throws java.lang.Exception
Läd das RA-Operator Zertifikat als PKCS#12 aus einem InputStream.- Parameters:
input
- PKCS12 Eingabestrompassword
- Passwort des PKCS12- Throws:
java.lang.Exception
- Fehlerweiterleitung
-
loadRAFromProvider
public void loadRAFromProvider(java.lang.String providerType, java.lang.String providerName, java.lang.String entryName, char[] password) throws java.lang.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:
java.lang.Exception
- Fehlerweiterleitung
-
loadRAFromSmartCard
public void loadRAFromSmartCard(java.lang.String pkcs11library, char[] password, java.lang.String entryName) throws java.lang.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:
java.lang.Exception
- Fehlerweiterleitung
-
loadRAFromSmartCard
public void loadRAFromSmartCard(java.lang.String pkcs11library, char[] password, java.lang.String entryName, int slot) throws java.lang.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:
java.lang.Exception
- Fehlerweiterleitung
-
listCertsWithKeyFromSmartCard
public java.util.Vector<java.lang.String> listCertsWithKeyFromSmartCard(java.lang.String pkcs11library, char[] password) throws java.lang.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:
java.lang.Exception
- Fehlerweiterleitung
-
-