Prinzipiell stehen zwei verschiedene CodeSigning-Zertifikattypen zur Verfügung:

  • OV Code Signing für die Signatur von Java JARs und MS Office Macros.
    • Beantragung per E-Mail-Einladung aus SCM heraus
    • Voraussetzung: Sie müssen einen Yubikey 5 FIPS besitzen
    • Manueller Prozess auf Seiten von Sectigo mit Verzögerungen von wenigen Stunden bis mehrere Tagen. Bitte Support-Ticket mit „Order Number“ erstellen.
  • EV Code Signing für Signaturen, die in Microsoft SmartScreen per Default ein höheres Vertrauen besitzen
    • Kostenpflichtiger Prozess außerhalb von SCM

Vorbereitung der E-Mail-Einladung

Für die Erstellung von OV-Code Signing-Zertifikaten in SCM ist eine gewisse Vorbereitung notwendig. Insbesondere muss ein Account in einem Code Signing certificate enrollment form angelegt werden:

  1. Im SCM unter ☰→Enrollment→Enrollment Forms
    1. Mit dem grünen Button „+“ oben rechts ein neues nur Ihrer Einrichtung zugehöriges Enrollment Form erzeugen
      1. Einen sprechenden Namen vergeben, der auf Ihre Einrichtung hinweist
      2. Als Typ „Code Signing certificate enrollment form“ setzen
      3. Im folgenden Dialog unter Tab „Details“ eine URI Extension setzen oder generieren lassen. Diese URI Extension definiert die URL, unter der später Zertifikate beantragt werden kann: https://cert-manager.com/customer/DFN/cs/<URI Extension>
      4. Mit „Save“ abspeichern
  2. Oben auf „Accounts“ klicken.
    1. Im daraufhin geöffneten Popup-Fenster über mit dem grünen „+“-Button einen neuen „Code Signing Web Form Account“ hinzufügen.
    2. Einen sprechenden Namen für den Code Signing Web Form Account vergeben, der auf Ihre Einrichtung hindeutet.
    3. Als „Organization“ Ihre Einrichtung aus der Drop-Down-Liste auswählen (und ggf. auch ein Department setzen, wenn der Code Signing Web Form Account ausschließlich auf Department-Level eingerichtet werden soll).
    4. Als Zertifikatprofile stehen GÉANT OV Code Signing (Key Attestation) - 1 year, GÉANT OV Code Signing (Key Attestation) - 2 years und GÉANT OV Code Signing (Key Attestation) - 3 years zur Auswahl. Das gewählte Zertifikatsprofil beeinflusst die Zertifikatlaufzeit.
    5. Gewünschtes Zertifikatprofil aus der Drop-Down-Liste auswählen.
    6. Als „CSR Generation Method“ den Wert „Provided by user“ auswählen.
    7. Mit „Save“ abspeichern.

Bitte keine fremden Enrollment Forms löschen!

Alte Enrollment Forms und darin bestehende Code Signing Web Form Accounts sollten nur nach sorgfältiger Abwägung gelöscht werden, da diese unter ihrer URL noch Selbstverwaltungsmöglichkeiten (insb. Sperrung) der bereits unter diesen Enrollment Forms und Account ausgestellten Code Signing-Zertifikate bieten.

Dann zum manuellen Auslösen der einzelnen Einladungs-Mails durch (D)RAOs unterhalb von ☰→Certificates→Code Signing Certificates:

  1. Mit dem „Invitations“-Button oben rechts wird ein Popup-Fenster mit einer Übersicht über die ausstehenden Einladungen für die Beantragung von Code Signing-Zertifikaten angezeigt.
  2. Mit dem grünen „+“-Button in dem Popup-Fenster kann eine einzelne Person (bestimmt durch eine E-Mail-Adresse) zur Beantragung eines Code Signing-Zertifikats per E-Mail eingeladen werden.
    1. Es muss die E-Mail-Adresse angegeben werden, an die die Einladungs-E-Mail verschickt wird.
    2. Es muss der „Enrollment Endpoint“ ausgewählt werden, der im obigen Schritt angelegt worden ist. Hinweis: Die Liste der angezeigten Enrollment Endpoints kann zur Zeit unter Umständen leider auch fremde Endpoints anderer Einrichtungen enthalten.
    3. Es muss einer der vorher von der Einrichtung/Department angelegten „Code Signing Web Form Accounts“ ausgewählt werden.
    4. Abschließend auf den „Send“-Button klicken, um die Einladungs-E-Mail zu versenden.

Die eingegangenen Zertifikatanträge für Code Signing-Zertifikate bzw. die ausgestellten Code Signing-Zertifikate sind im SCM unterhalb von ☰→Certificates→Code Signing Certificates sichtbar und werden automatisch von Sectigo bearbeitet.

Vorgehen bei der Beantragung

Die Einladungs-E-Mail muss dann folgendermaßen bearbeitet werden:

0. Bei der Beschaffung: Unbedingt die Variante Yubikey 5 FIPS wählen. Yubikeys ohne den Zusatz FIPS können die erforderliche Key Attestation nicht erzeugen.

1. Yubikey vorbereiten:

  • PIN setzen. Achtung: Es gibt Werkzeuge, die das Setzen von PINs mit einer Länge von mehr als 8 Zeichen erlauben. Diese werden von der PKCS11-Library ykcs11 nicht unterstützt, dort funktionieren nur PINs mit 6-8 Zeichen.
  • Default PIV Management Key vom Default 010203040506070801020304050607080102030405060708 auf was „richtiges“ umsetzen
  • PUK setzen.

2. Schlüssel erzeugen und den öffentlichen Teil in eine Datei ausgeben:

yubico-piv-tool -a generate --slot=9c --pin-policy=once -k -A ECCP384 -o PublicKeyFile.key

pin-policy=once ermöglicht die Erstellung von mehreren Signaturen hintereinander mit nur einer PIN-Eingabe. Diese Option ist insbesondere für Windows signtool.exe notwendig, wenn MSI signiert werden.

3. CSR erzeugen und in eine Datei ausgeben:

yubico-piv-tool -a verify-pin -a request-certificate --slot=9c  -i PublicKeyFile.key -S <subject dn> -o request.csr

(-S <subject_dn> mit Slash am Ende, z.B. -S „/CN=Jane Doe/“)

Sollte yubico-piv-tool mit der Fehlermeldung Failed signing request. scheitern, kann alternativ das Werkzeug ykman verwendet werden:

ykman piv certificates request -s "CN=Jane Doe" 9c PublicKeyFile.key request.csr 

4. Key Attestation erzeugen:

yubico-piv-tool --action=attest --slot=9c > Slot9cAttestation.pem

(funktioniert nur für nach dieser Anleitung erzeugte Keys, nicht für anderweitig importierte)

5. Intermediate aus dem Yubikey auslesen

yubico-piv-tool --action=read-certificate --slot=f9 > intermediate.pem

6. Attestation-Bundle für Sectigo Webinterface erzeugen

cat Slot9cAttestation.pem intermediate.pem > attestation_bundle.pem
base64 -w 64 attestation_bundle.pem > attestation_bundle.b64

Oder Windows:

type Slot9aAttestation.pem intermediate.pem > attestation.pem
certutil -encode attestation.pem attestation_bundle.pem
findstr /v CERTIFICATE attestation_bundle.pem > attestation_bundle.b64

7. Antrag stellen:

  • Die Datei request.csr aus Schritt 3 als CSR in das per E-Mail-Einladung übermittelte Formular eingeben
  • Den Inhalt der Datei attestation_bundle.b64 aus Schritt 6 in das Feld „Key Attestation“ eingeben

8. Sectigo bearbeitet den Antrag. Mit Stand 2024-01 handelt es sich um einen manuellen Prozess auf Seiten von Sectigo mit Verzögerungen von wenigen Stunden bis mehreren Tagen. Bitte erstellen Sie gegebenenfalls ein Support-Ticket nach Anleitung. Das Ticket muss die „Order Number“ enthalten, die zu dem gestellten Antrag in SCM sichtbar ist.

9. Sectigo stellt das Zertifikat aus und verschickt eine E-Mail mit Links auf Zertifikatdateien

10. Aufspielen der von Sectigo gelieferten Zertifikatdatei aus dem Link „as Certificate only, PEM encoded:“ auf den Yubikey, z.B. mit dem YubiKey Manager

Code Signing mit Yubikey FIPS

Windows: Anleitung von Yubico für Windows Code Signing: https://support.yubico.com/hc/en-us/articles/360016614840-Code-Signing-with-the-YubiKey-on-Windows

Java-Code: Signieren von Java-Code mit jarsigner:

  • Installation der Yubico PKCS#11-Library „ykcs11“
  • Abspeichern des von Sectigo gelieferten Zertifikats per Link aus der Auslieferungs-E-Mail „as Certificate (w/ issuer after)“ als Datei „certchain.pem“
  • Datei ykcs11.conf anlegen mit Inhalt:
name = ykcs11
library = <Pfad zur libykcs11.so>
  • Signieren per Aufruf:
jarsigner -keystore NONE -certchain certchain.pem -storetype PKCS11 -providerClass sun.security.pkcs11.SunPKCS11 -providerArg  ykcs11.conf <Zu signierende JAR>  "X.509 Certificate for Digital Signature"

EV Code Signing-Zertifikate, denen beispielsweise in Microsoft SmartScreen sofort vertraut wird, müssen über einen separaten Antragsweg bestellt und zusätzlich bezahlt werden.

Die Beantragung erfolgt außerhalb des Cert-Managers. Eine Anleitung findet sich unter https://wiki.geant.org/display/TCSNT/TCS+2020+FAQ#TCS2020FAQ-Q:HowDoIOrderEVCodeSigningCertificates? (Hinter dem Link „GUIDE“ versteckt sich eine ausführliche Anleitung als PDF-Dokument)

  • Zuletzt geändert: vor 10 Monaten