Java Deployment Rule Set mit Microsoft CA digital signieren

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

  1. Als Administrator an SERVER01 anmelden
  2. Server Manager > Manage > Add Roles and Features
  3. Add Roles and Features Wizard
    1. Before You Begin > Next
    2. Installation Type: Role-based or feature-based installation > Next
    3. Server Selection: SERVER01.haimann.local > Next
    4. Server Roles
      1. Active Directory Certificate Services
        1. Certification Authority Web Enrollment > Next
          JAVA-013
    5. Features > Next
    6. Confirmation > Install
    7. Results > Configure Active Directory Certificate Services on the destination server
      JAVA-014
  4. AD CS Configuration
    1. Credentials > Next
      JAVA-016
    2. Role Services: Certification Authority Web Enrollment > Next
      JAVA-017
    3. Confirmation > Configure
      JAVA-018
    4. Results > Close
      JAVA-019
  5. Alle Fenster schließen

Zertifikatsvorlage für Code Signing erstellen und veröffentlichen

  1. Server Manager > Tools > Certification Authority
  2. Haimann Root CA erweitern
  3. Certificate Templates rechts anklicken > Manage
  4. Im Detailbereich die Zertifikatsvorlage Code Signing rechts anklicken > Duplicate Template
    JAVA-001
  5. Properties of New Template
    1. Reiter General
      1. Template display name: Haimann Code Signing
      2. Validity period: 5 years
        JAVA-002
    2. Reiter Subject Name
      1. Subject name format: Common name
        JAVA-003
    3. Reiter Security
      1. Authenticated Users > Allow > Read, Enroll > OK
        JAVA-004
  6. Certificate Templates Console schließen
  7. In der Certificate Authority-Konsole Certificate Templates rechts anklicken > New > Certificate to Issue
  8. Enable Certificate Templates
    1. Haimann Code Signing > OK
      JAVA-005
  9. Alle Fenster schließen

Web Server Zertifikat für SERVER01 anfordern und IIS zur Verwendung von https konfigurieren

  1. Eine MMC als Administrator starten
  2. Certificates Snap-in für Computer account hinzufügen
  3. Den Ordner Personal rechts anklicken > All Tasks > Request New Certificate…
    JAVA-047
  4. Certificate Enrollment
    1. Before You Begin > Next
    2. Select Certificate Enrollment Policy > Next
    3. Request Certificates > Haimann Web Server > More information …
      JAVA-020
    4. Certificate Properties
      1. Reiter Subject
        1. Alternative name:
          1. DNS > pki.haimann.local > Add
            JAVA-021
      2. Reiter General
        1. Friendly name: Web Server Certificate for PKI > OK
          JAVA-022
    5. Haimann Web Server aktivieren > Enroll
    6. Certificate Installation Results > Finish
      JAVA-023
  5. MMC schließen
    JAVA-024
  6. Server Manager > Tools > IIS Manager
  7. Default Web Site markieren
  8. Im Bereich Actions auf Bindings klicken
    JAVA-025
  9. Site Bindings > Add…
  10. Add Site Binding
    1. Type: https
    2. SSL certificate: Web Server Certificate for PKI > OK
      JAVA-026
  11. IIS Manager schließen
  12. Im Internet Explorer die Seite https://pki.haimann.local/certsrv/Default.asp aufrufen
    JAVA-048

Passt so weit! 🙂

Java 7 Developmentkit herunterladen und installieren

  1.  Java SE Development Kit 7 von http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html nach D:\Sourcen herunterladen
  2. Die Datei D:\Sourcen\jdk-7u67-windows-i586.exe doppelklicken
  3. Installationswizard folgen
    JAVA-009
  4. Die Systemumgebungsvariablen öffnen (Environment Variables)
    JAVA-010
  5. Unter System variables die Variable Path mit Edit… zum Bearbeiten öffnen
  6. Folgenden Pfad an die Variable anhängen (falls nicht vorhanden)
    ;C:\Program Files (x86)\Java\jdk1.7.0_67\bin
  7. Fenster mit OK schließen
    JAVA-011

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.

  1. 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>
  2. Als ruleset.xml speichern
    JAVA-027
  3. Command Promt (Admin) starten
  4. In den Ordner C:\Program Files (x86)\Java\jdk1.7.0_67\bin wechseln
  5. Mit folgendem Befehl den Keystore mit dem privaten Schlüssel erzeugen
    keytool -genkey -alias haimann -keyalg RSA -keysize 4096 -keystore keystore.jks
    1. Password: Password1
    2. First and Last name: Dietmar Haimann
    3. Organizational Unit: IT
    4. Organization: Einfaches-Netzwerk
    5. City: Linz
    6. State or Province: Upper Austria
    7. Country Code: AT
    8. Correct: yes
      JAVA-028
  6. Mit folgendem Befehl den Certificate Signing Request (CSR) erzeugen
    keytool -certreq -alias haimann -file csr.csr -keystore keystore.jks -keypass Password1
  7. Command Promt
    JAVA-029
    JAVA-030
  8. Die Date csr.csr mit Notepad++ öffnen und Inhalt kopieren
    JAVA-031
  9. Im Internet Explorer die Seite http://pki.haimann.local/certsrv/Default.asp aufrufen
  10. Request a certificate
    JAVA-032
  11. Submit an advanced certificate request
    JAVA-033
  12. Submit a certificate request by using a fileJAVA-034
  13. In das Feld Saved Request den kopierten Inhalt aus Notepad++ einfügen
  14. Certificate Template: Haimann Code Signing > Submit
    JAVA-035
  15. 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)
    JAVA-049
  16. Internet Explorer schließen
  17. Mit folgendem Befehl das Code Signing Zertifikat in den Keystore importieren
    keytool -import -trustcacerts -alias haimann -file certnew.p7b -keystore keystore.jks -storepass Password1
  18. Command Promt
    JAVA-037
  19. Mit folgendem Befehl die Datei DeploymentRuleSet.jar mit der Datei ruleset.xml erstellen
    jar -cvf DeploymentRuleSet.jar ruleset.xml
  20. Command Promt
    JAVA-038
    JAVA-039
  21. Mit folgendem Befehl die Datei DeploymentRuleSet.jar signieren
    jarsigner -verbose -keystore keystore.jks -signedjar DeploymentRuleSet.jar DeploymentRuleSet.jar haimann -storepass Password1
  22. Command Promt
    JAVA-040
  23. Mit folgendem Befehl kann die Signatur überprüft werden (optional)
    jarsigner -verify -verbose -certs DeploymentRuleSet.jar
  24. Command Prompt
    JAVA-041

Passt soweit! 🙂

Verteilen der Datei DeploymentRuleSet.jar auf die Clients

  1. Die Datei DeploymentRuleSet.jar nach C:\Windows\Sun\Java\Deployment kopieren
    JAVA-042
  2. In der Systemsteuerung auf Programs\Java klicken
  3. Auf den Reiter Security wechseln
    JAVA-043
  4. Java Deployment Rule Set
    JAVA-044
  5. View Certificate Details
    JAVA-046

JAVA-045

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.