public class DFNPKIClient
extends java.lang.Object
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.
Modifier and Type | Field and Description |
---|---|
static java.lang.String |
PKCS11_PROVIDER_NAME |
Constructor and Description |
---|
DFNPKIClient(java.lang.String CAName)
Erstellt eine neue Instanz für die Kommunikation mit der CA.
|
Modifier and Type | Method and 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.
|
public static final java.lang.String PKCS11_PROVIDER_NAME
public DFNPKIClient(java.lang.String CAName) throws java.lang.Exception
CAName
- Installationsname der CAjava.lang.Exception
- Fehlerweiterleitungpublic DFNCERTPublic getPublic()
public DFNCERTDomains getDomains()
public DFNCERTRegistration getRegistration()
public java.lang.String getCAName()
public void setCAName(java.lang.String CAName)
CAName
- Installationsname der CApublic void setPublicHostname(java.lang.String Hostname)
pki.pca.dfn.de
ist.Hostname
- Rechnername für öffentliche Schnittstellepublic void setRAHostname(java.lang.String Hostname)
ra.pca.dfn.de
ist.Hostname
- Rechnername für Registrierungs-Schnittstellepublic void setCheckRevocation(boolean bCheckRevocation)
bCheckRevocation
- true: Property com.sun.net.ssl.checkRevocation auf true setzen.public java.security.cert.X509Certificate getRACertificate()
public java.security.cert.X509Certificate[] getRAChain()
public java.security.PrivateKey getRAPrivateKey()
public javax.net.ssl.SSLSocketFactory getSocketFactory()
public void loadRAFromKeystore(java.security.KeyStore store, java.lang.String alias, char[] password) throws java.lang.Exception
getKey
,
getCertificate
und getCertificateChain
für das RA-Zertifikat bereitstellen.store
- Initialisierter KeyStorealias
- Alias-Name des RA-Zertifikats im KeyStorepassword
- Passwort des KeyStores (für getKey
)java.lang.Exception
- Fehlerweiterleitungpublic void loadRAFromPKCS12(java.lang.String filename, char[] password) throws java.lang.Exception
filename
- Dateiname der Dateipassword
- Passwort der Dateijava.lang.Exception
- Fehlerweiterleitungpublic void loadRAFromPKCS12(java.io.InputStream input, char[] password) throws java.lang.Exception
input
- PKCS12 Eingabestrompassword
- Passwort des PKCS12java.lang.Exception
- Fehlerweiterleitungpublic void loadRAFromProvider(java.lang.String providerType, java.lang.String providerName, java.lang.String entryName, char[] password) throws java.lang.Exception
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)java.lang.Exception
- Fehlerweiterleitungpublic void loadRAFromSmartCard(java.lang.String pkcs11library, char[] password, java.lang.String entryName) throws java.lang.Exception
loadRAFromSmartCard(java.lang.String, char[], java.lang.String, int)
nur dass hier -1 für slot
übergeben wird, d.h. es wird das
Kryptogerät im ersten gefundenen Slot, der ein Gerät enthält, verwendet.pkcs11library
- Pfad zu der PKCS11-Bibliothekpassword
- Passwort (User-PIN) des GerätsentryName
- Alias des Zertifikats im KeyStorejava.lang.Exception
- Fehlerweiterleitungpublic void loadRAFromSmartCard(java.lang.String pkcs11library, char[] password, java.lang.String entryName, int slot) throws java.lang.Exception
pkcs11library
- Pfad zu der PKCS11-Bibliothekpassword
- Passwort (User-PIN) des GerätsentryName
- Alias auf dem Gerät (z.B. mit
listCertsWithKeyFromSmartCard(java.lang.String, char[])
ermittelt)slot
- Slot des Readers, -1 für den ersten verfügbarenjava.lang.Exception
- Fehlerweiterleitungpublic java.util.Vector<java.lang.String> listCertsWithKeyFromSmartCard(java.lang.String pkcs11library, char[] password) throws java.lang.Exception
pkcs11library
- Pfad zur PKCS#11-Bibliothekpassword
- Passwort des Gerätsjava.lang.Exception
- Fehlerweiterleitung