Code Signing-Zertifikate
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
OV Code Signing
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:
- Im SCM unter ☰→Enrollment→Enrollment Forms
- Mit dem grünen Button „+“ oben rechts ein neues nur Ihrer Einrichtung zugehöriges Enrollment Form erzeugen
- Einen sprechenden Namen vergeben, der auf Ihre Einrichtung hinweist
- Als Typ „Code Signing certificate enrollment form“ setzen
- 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>
- Mit „Save“ abspeichern
- Oben auf „Accounts“ klicken.
- Im daraufhin geöffneten Popup-Fenster über mit dem grünen „+“-Button einen neuen „Code Signing Web Form Account“ hinzufügen.
- Einen sprechenden Namen für den Code Signing Web Form Account vergeben, der auf Ihre Einrichtung hindeutet.
- 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).
- Als Zertifikatprofile stehen
GÉANT OV Code Signing (Key Attestation) - 1 year
,GÉANT OV Code Signing (Key Attestation) - 2 years
undGÉANT OV Code Signing (Key Attestation) - 3 years
zur Auswahl. Das gewählte Zertifikatsprofil beeinflusst die Zertifikatlaufzeit. - Gewünschtes Zertifikatprofil aus der Drop-Down-Liste auswählen.
- Als „CSR Generation Method“ den Wert „Provided by user“ auswählen.
- 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:
- 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.
- 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.
- Es muss die E-Mail-Adresse angegeben werden, an die die Einladungs-E-Mail verschickt wird.
- 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.
- Es muss einer der vorher von der Einrichtung/Department angelegten „Code Signing Web Form Accounts“ ausgewählt werden.
- 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
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)