Mit Java 7 Update 40 hat Oracle das Feature Java Deployment Rule Set eingeführt, um die Sicherheit und Kompatibilität der Browser-Applets zu erhöhen. Für Desktop Administratoren ermöglicht es die zentrale Verwaltung der Sicherheitseinstellungen auf den Clients. Im folgenden Beispiel verwende ich meine bestehende PKI (Ein einfaches Netzwerk, Teil 6ff) um ein Code Signging Zertifikat auszustellen.
Java Deployment Rule Set mit Microsoft CA digital signieren – Schritte:
- Die Rolle Certification Authority Web Enrollment auf SERVER01 installieren
- Zertifikatsvorlage für Code Signing erstellen und veröffentlichen
- Web Server Zertifikat für SERVER01 anfordern und IIS zur Verwendung von https konfigurieren
- Java 7 Developmentkit herunterladen und installieren
- Java Deployment Rule Set erstellen und digital signieren
- Verteilen der Datei DeploymentRuleSet.jar auf die Clients
Die Rolle Certification Authority Web Enrollment auf SERVER01 installieren
- Als Administrator an SERVER01 anmelden
- Server Manager > Manage > Add Roles and Features
- Add Roles and Features Wizard
- AD CS Configuration
- Alle Fenster schließen
Zertifikatsvorlage für Code Signing erstellen und veröffentlichen
- Server Manager > Tools > Certification Authority
- Haimann Root CA erweitern
- Certificate Templates rechts anklicken > Manage
- Im Detailbereich die Zertifikatsvorlage Code Signing rechts anklicken > Duplicate Template
- Properties of New Template
- Certificate Templates Console schließen
- In der Certificate Authority-Konsole Certificate Templates rechts anklicken > New > Certificate to Issue
- Enable Certificate Templates
- Alle Fenster schließen
Web Server Zertifikat für SERVER01 anfordern und IIS zur Verwendung von https konfigurieren
- Eine MMC als Administrator starten
- Certificates Snap-in für Computer account hinzufügen
- Den Ordner Personal rechts anklicken > All Tasks > Request New Certificate…
- Certificate Enrollment
- MMC schließen
- Server Manager > Tools > IIS Manager
- Default Web Site markieren
- Im Bereich Actions auf Bindings klicken
- Site Bindings > Add…
- Add Site Binding
- IIS Manager schließen
- Im Internet Explorer die Seite https://pki.haimann.local/certsrv/Default.asp aufrufen
Passt so weit! 🙂
Java 7 Developmentkit herunterladen und installieren
- Java SE Development Kit 7 von http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html nach D:\Sourcen herunterladen
- Die Datei D:\Sourcen\jdk-7u67-windows-i586.exe doppelklicken
- Installationswizard folgen
- Die Systemumgebungsvariablen öffnen (Environment Variables)
- Unter System variables die Variable Path mit Edit… zum Bearbeiten öffnen
- Folgenden Pfad an die Variable anhängen (falls nicht vorhanden)
;C:\Program Files (x86)\Java\jdk1.7.0_67\bin
- Fenster mit OK schließen
Java Deployment Rule Set erstellen und digital signieren
Die Erstellung einer signierten DeploymentRuleSet.jar-Datei besteht aus folgenden Schritten:
- Die Datei ruleset.xml mit der Exception Site List erstellen
- Den Keystore mit dem privaten Schlüssel erzeugen
- Den Certificate Signing Request (CSR) erzeugen
- Code Signing Zertifikat ausstellen
- Das Code Signing Zertifikat in den Keystore importieren
- Die Datei DeploymentRuleSet.jar mit der Datei ruleset.xml erstellen
- Signieren der Datei DeploymentRuleSet.jar
Das hört sich jetzt viel an, ist aber in wenigen Minuten erledigt. Vorausgesetzt man kann die eigene CA dafür verwenden. Wenn mit dem CSR bei einem öffentlichen Anbieter ein Code Signing Zertifikat angefordert werden muss, kann das etwas länger dauern und ist auch nicht billig. Bei uns wird die Exception Site List aber ausschließlich intern verteilt. Da sollte es kein Problem geben, solange die CRL erreichbar ist.
In meinen Tests hat sich herausgestellt, dass die folgenden Schritte im Pfad des Programms keytool.exe am besten funktioniert. Und das ist der Installationspfad des JDKs C:\Program Files (x86)\Java\jdk1.7.0_67\bin.
- Im Ordner C:\Program Files (x86)\Java\jdk1.7.0_67\bin mit Notepad++ folgende xml-Datei erstellen
<ruleset version="1.0+"> <rule> <id location="http://*.java.com" /> <action permission="run" /> </rule> <rule> <id location="https://*.java.com" /> <action permission="run" /> </rule> <rule> <id location="http://localhost" /> <action permission="run" /> </rule> <rule> <id /><!-- Because this is both blank and shown last, it will be the default policy. --> <action permission="block"> <message>Blockiert durch eine Unternehmensrichtlinie. Bitte geben Sie ein Ticket im iET auf!</message> </action> </rule> </ruleset>
- Als ruleset.xml speichern
- Command Promt (Admin) starten
- In den Ordner C:\Program Files (x86)\Java\jdk1.7.0_67\bin wechseln
- Mit folgendem Befehl den Keystore mit dem privaten Schlüssel erzeugen
keytool -genkey -alias haimann -keyalg RSA -keysize 4096 -keystore keystore.jks
- Mit folgendem Befehl den Certificate Signing Request (CSR) erzeugen
keytool -certreq -alias haimann -file csr.csr -keystore keystore.jks -keypass Password1
- Command Promt
- Die Date csr.csr mit Notepad++ öffnen und Inhalt kopieren
- Im Internet Explorer die Seite http://pki.haimann.local/certsrv/Default.asp aufrufen
- Request a certificate
- Submit an advanced certificate request
- Submit a certificate request by using a file
- In das Feld Saved Request den kopierten Inhalt aus Notepad++ einfügen
- Certificate Template: Haimann Code Signing > Submit
- Beide Dateien nach C:\Program Files (x86)\Java\jdk1.7.0_67\bin herunterladen (die p7b-Datei enthält das Code Signing Zertifikat und die Zertifikatskette)
- Internet Explorer schließen
- Mit folgendem Befehl das Code Signing Zertifikat in den Keystore importieren
keytool -import -trustcacerts -alias haimann -file certnew.p7b -keystore keystore.jks -storepass Password1
- Command Promt
- Mit folgendem Befehl die Datei DeploymentRuleSet.jar mit der Datei ruleset.xml erstellen
jar -cvf DeploymentRuleSet.jar ruleset.xml
- Command Promt
- Mit folgendem Befehl die Datei DeploymentRuleSet.jar signieren
jarsigner -verbose -keystore keystore.jks -signedjar DeploymentRuleSet.jar DeploymentRuleSet.jar haimann -storepass Password1
- Command Promt
- Mit folgendem Befehl kann die Signatur überprüft werden (optional)
jarsigner -verify -verbose -certs DeploymentRuleSet.jar
- Command Prompt
Passt soweit! 🙂
Verteilen der Datei DeploymentRuleSet.jar auf die Clients
- Die Datei DeploymentRuleSet.jar nach C:\Windows\Sun\Java\Deployment kopieren
- In der Systemsteuerung auf Programs\Java klicken
- Auf den Reiter Security wechseln
- Java Deployment Rule Set
- View Certificate Details
Fertig! 🙂
Die richtige Herausforderung bei der ganzen Sache ist die verstreute Dokumentation. Ich habe einen halben Tag nach brauchbaren Informationen gesucht.
Quellen:
https://blogs.oracle.com/java-platform-group/entry/introducing_deployment_rule_sets
https://www.digicert.com/code-signing/java-code-signing-guide.htm