Testzertifikat für qualifizierte elektronische Signatur
Damit, mit einer Software wie dem Governikus Signer Webedition oder Data Boreum ein Dokument digital signiert werden kann, wird ein Zertifikat oder eine Signaturkarte benötigt. Zu Testzwecken kann auch ein selbst erstelltes Zertifikat genutzt werden.
Erstellen eines Test-Zertifikats - Schritt-für-Schritt-Anleitung
Die Erstellung eines Keys, der zum Signieren geeignet ist, erfordert, dass im Zertifikat die v3 Extensions mitgeschrieben werden. Diese müssen noch immer über eine eigens erstellte Config-Datei mitgegeben werden.
Vorbereitung und Voraussetzungen
Für die Erstellung des Testzertifikates sollte ein neues Verzeichnis angelegt werden, das ein Unterverzeichnis ./governikus_certifikate enthalten muss, da sonst die Schritte in dieser Anleitung nicht funktionieren. Auf dem System, mit dem das Testzertifikat erstellt wird, muss OpenSSL verfügbar sein.
host19:~$ mkdir -p testzertifikat/governikus_certificate
Directory: C:\Users\PeterMelichar\testzertifikat
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 01.03.2024 09:42 governikus_certificate
host19:~$ openssl version
OpenSSL 3.2.1 30 Jan 2024 (Library: OpenSSL 3.2.1 30 Jan 2024)
Die Schritte sollten unter Linux und Windows funktionieren. Es sollte für die geforderten Passwörter ein möglichst einfachse Passwort, wie “0123456789”, verwendet werden, es handelt sich um ein Testzertifikat.
Erstellen einer CA
Die Werte für die Organisation sind hier nur als Beispiel zu verstehen und können durch eigenen Werte ersetzt werden. Der Schlüssel ca-key.pem wird durch den Parameter -days 3650 mit einer Gültigkeit von 10 Jahren erstellt. Seine Gültigkeit muss länger sein, als die des Zertifikates, das damit unterzeichnet wird.
host19:~$ cd testzertifikat
host19:~/testzertifikat$ openssl genrsa -aes256 -out ca-key.pem 4096
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
host19:~/testzertifikat$ openssl req -x509 -new -extensions v3_ca -key ca-key.pem -out ca-cert.pem -days 3650
Enter pass phrase for ca-key.pem:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:DE
State or Province Name (full name) [Some-State]:Bayern
Locality Name (eg, city) []:Feldkirchen
Organization Name (eg, company) [Internet Widgits Pty Ltd]:FJD Information Technologies AG
Organizational Unit Name (eg, section) []:Service Center
Common Name (e.g. server FQDN or YOUR name) []:FJD AG
Email Address []:service@fjd.de
Nach der Ausführung der beiden Kommandos befinden sich beiden Dateien ca-cert.pem und ca-key.pem im Verzeichnis.
Erstellen einer config-Datei für die v3-Extensions
Die folgende Datei ./governikus_certificate/governikus_test.cnf mit dem nachfolgenden Inhalt anlegen und speichern. Die Werte für die Sektion [req_distinguished_name]
den eigenen Erfordernissen entsprechend anpassen.
config-File für openssl
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
x509_extensions = usr_cert
prompt = no
[req_distinguished_name]
C = DE
ST = Bayern
L = Kirchheim bei Muenchen
O = FJD Information Technologies AG
OU = Service Center
CN = TestsigningKey
[usr_cert]
basicConstraints=CA:FALSE
nsCertType = client, server, email
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection
nsComment = "OpenSSL Generated Certificate"
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
[v3_req]
extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
Erstelle CSR zum Signieren mit der CA
host19:~/testzertifikat$ openssl req -config ./governikus_certificate/governikus_test.cnf -newkey rsa:4096 -nodes -keyout private.key -out ./governikus_certificate/cert-request.csr
..+......+............+...+.+
..................+..+.+.....
.........+.+..............+..
.+...+....+......+.........+.
-----
Signiere CSR mit der zuvor erstellen CA
Mit dem Parameter -days 730 wurde hier die Gültigkeit auf 2 Jahre eingestellt
host19:~/testzertifikat$ openssl x509 -req -extensions v3_req -extfile ./governikus_certificate/governikus_test.cnf -days 730 -in governikus_certificate/cert-request.csr -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out governikus_certificate/cert.crt
Überprüfen des Zertifikates
Vor der Umwandlung in das Format PFX, sollte das erstellte Zertifikat einmal auf die v3-Extensions geprüft werden.
host19:~/testzertifikat$ openssl x509 -text -noout -in ./governikus_certificate/cert.crt
Zertifikat mit v3 Extension
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
34:eb:c2:39:51:e7:98:61:cc:bd:0d:8f:d4:97:38:17:52:e5:7f:7d
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=DE, ST=Bayern, L=Feldkirchen, O=FJD Information Technologies AG, OU=Service Center, CN=FJD AG, emailAddress=service@fjd.de
Validity
Not Before: Jul 3 08:10:01 2024 GMT
Not After : Jul 3 08:10:01 2026 GMT
Subject: C=DE, ST=Bayern, L=Kirchheim bei Muenchen, O=FJD Information Technologies AG, OU=Service Center, CN=TestsigningKey
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (4096 bit)
Modulus:
00:d7:c4:1c:2b:6b:c2:05:69:37:cc:00:33:5f:2d:
7f:32:11:4f:e0:5d:1a:71:d1:02:b8:93:e0:dd:33:
5e:a6:bb:eb:eb:b6:3a:30:ea:4d:09:9d:dd:fc:a7:
e2:cb:60:8b:d0:c9:08:54:6c:e7:b9:22:eb:c3:67:
68:d9:9f:97:99:41:e8:75:8a:b5:48:fe:3b:36:fc:
75:41:b0:77:cf:00:1d:cc:a9:b7:5d:41:5e:0c:6c:
cf:04:68:b2:bf:74:28:a4:c1:2f:85:d8:48:90:3d:
ee:8e:ea:24:0f:2d:23:da:67:3c:ec:0e:78:ee:56:
27:fc:b2:da:c2:c1:bc:44:de:e6:fe:51:14:60:6c:
8f:f9:3a:2c:13:db:7f:ea:88:8a:25:05:9e:26:8d:
14:e0:c3:86:2f:a7:b2:11:92:c4:07:e9:27:af:c5:
c8:7e:a5:12:d1:15:22:67:b2:87:a3:2e:52:b0:53:
9e:61:b5:21:e2:41:ee:7c:ef:9e:0d:c7:7f:aa:4a:
db:3f:58:ce:0c:c4:7a:b1:c2:74:af:87:22:53:02:
7c:09:ad:95:cd:99:d6:a1:6a:bb:bb:10:e3:e3:b4:
b3:b3:ed:2a:92:6a:de:f9:7d:07:25:8b:1a:1e:ad:
a5:44:dd:23:6e:f4:64:fc:19:c2:33:01:f3:06:1a:
0b:19:45:44:89:ab:98:ea:ea:62:6c:46:90:a1:58:
36:83:1f:28:33:88:45:51:97:d7:d6:bd:49:22:16:
8e:6d:2a:2e:f9:29:24:4d:5e:6a:e4:72:83:9f:af:
3a:78:9e:6b:7d:b6:17:a6:ba:71:ae:88:2f:1e:5c:
36:cc:41:40:e7:fc:29:a5:a1:3c:12:53:a4:04:78:
f6:03:69:0a:af:6d:24:c7:d5:3c:3e:4a:6d:a9:1b:
30:6f:e6:83:67:cf:80:d0:37:8c:44:e2:20:d9:d6:
c3:d6:61:ec:a7:ac:49:2d:eb:75:af:2c:ff:0d:59:
82:cd:c0:77:44:fd:9f:b8:68:1e:61:e0:81:13:50:
6a:e9:d2:07:b1:9b:9e:56:86:1b:ad:45:2e:f4:9f:
e4:3f:6c:06:fb:65:ff:92:f9:c5:d3:eb:28:24:2d:
d4:0e:e6:f7:85:a2:df:66:cb:34:3d:67:63:15:b1:
ca:5d:6a:24:9a:79:d1:ee:d2:6c:9d:21:77:c7:1c:
4a:d2:59:50:dc:12:72:13:90:68:eb:9b:40:3a:13:
c3:56:74:5e:8a:1c:de:74:e3:0f:c0:5b:21:49:da:
49:c4:c6:54:53:a3:1e:b2:e1:1a:d3:a3:ba:01:23:
de:72:d9:84:b7:76:8b:41:aa:2c:ac:c6:90:d7:53:
b0:b9:ed
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Extended Key Usage:
TLS Web Server Authentication, TLS Web Client Authentication, Code Signing, E-mail Protection
X509v3 Basic Constraints:
CA:FALSE
X509v3 Key Usage:
Digital Signature, Non Repudiation, Key Encipherment
X509v3 Subject Key Identifier:
CE:00:C8:13:F3:E8:6D:99:E1:6B:87:86:6B:2C:B2:A8:03:E3:A9:0D
X509v3 Authority Key Identifier:
39:DB:2D:9E:34:D5:58:93:04:17:41:C4:FA:7E:73:B7:C6:EB:FF:32
Signature Algorithm: sha256WithRSAEncryption
Signature Value:
22:c1:ab:4a:5a:1c:e6:0b:12:93:7b:93:ed:8b:87:51:f8:9a:
39:b6:62:6f:4c:e6:38:80:1c:91:d9:c3:fb:f3:7d:68:82:d8:
7d:be:7f:ae:f8:fa:60:e5:ea:fb:01:00:87:2c:eb:7f:1e:f9:
87:51:49:b1:ce:1f:38:8a:af:54:6c:8a:9c:1c:54:9a:0b:6f:
df:77:2c:ee:bd:a7:07:63:f5:f3:8d:53:36:6d:58:b5:36:6f:
9b:ba:13:6c:4f:ef:0a:7f:49:18:72:a1:1b:d3:7c:4e:e3:ff:
4c:7f:e8:91:3a:76:e5:4d:c7:d3:7c:43:55:68:3d:48:ff:64:
ae:41:2a:2a:96:72:6b:2f:e9:41:82:69:59:35:bb:8f:1d:a1:
1b:94:d1:2d:32:60:0f:af:0b:d0:ca:cf:e3:73:6f:3a:ca:1e:
e7:66:40:86:e5:1d:91:d4:9d:22:81:60:0f:5b:e7:e1:6c:32:
e2:2f:e8:bd:6f:b7:ef:4c:c2:2a:1b:8f:f6:f6:6c:6a:8c:9f:
72:8f:a2:2a:cc:4b:df:f7:b3:ac:93:da:f3:92:d7:8f:f1:80:
c5:cc:52:39:a4:e0:04:dc:71:03:d4:37:99:57:05:ff:5f:8b:
c6:9b:a9:5f:55:41:f7:64:81:28:ae:65:fe:f6:51:c2:b6:ff:
64:25:dd:87:7d:bc:0d:44:03:b4:aa:e6:ee:9b:29:c8:67:21:
b8:2f:25:70:a5:dd:5e:55:0f:fe:2f:10:75:1d:b1:c3:7e:25:
60:3f:ee:81:10:75:b5:60:69:0b:0f:0f:cd:9d:12:ed:a9:a4:
5b:2a:74:61:f9:c1:54:c1:11:0f:60:66:3d:99:2c:9d:b1:59:
5e:6c:37:29:f3:11:cc:b1:59:f4:4c:f6:21:e3:84:fc:71:9c:
36:41:28:27:bb:e0:46:7a:ef:42:1e:7f:44:03:64:15:af:e0:
cf:9b:18:4d:ab:44:7b:8a:e9:a0:e5:3e:ea:f2:51:cb:b8:e7:
f5:ed:1d:dd:bc:b4:65:a2:ea:90:65:cd:a6:4d:d0:de:19:56:
3e:11:c0:db:b6:69:eb:00:e5:2b:fa:e8:9f:70:2e:40:e4:34:
eb:2e:52:68:50:5d:29:e3:e8:da:70:08:88:99:85:6c:05:eb:
8b:db:bd:b0:35:0f:e6:08:61:4a:88:a8:54:41:eb:dc:72:29:
d2:b7:31:7e:f5:e6:b0:79:a5:4c:1c:8e:fe:eb:ec:5d:cb:9b:
43:67:1b:58:b1:c0:6e:00:22:47:6b:a5:91:6a:33:e1:fc:84:
27:57:84:a7:1a:c8:b8:c3:0e:cb:12:b9:b3:5b:bd:73:73:be:
d3:41:c4:c1:ef:9e:49:41
Das Zertifikat muss eine Sektion x509v3 extensions: enthalten, damit es für eine QES Signatur genutzt werden kann. Es kommt vor allem auf den Bereich X509v3 Key Usage an.
X509v3 Key Usage:
Digital Signature, Non Repudiation, Key Encipherment
Erstellen des PFX-Zertifikats für Governikus Signer
Für den Governikus Signer Web Edition oder Data Boreum von Governikus, wird das Zertifikat in dem Format PFX benötigt und wird im letzten Schritt gewandelt. Das Tertifikat liegt anschließend im Unterordner ./governikus_certificate
host19:~/testzertifikat$ openssl pkcs12 -export -in ./governikus_certificate/cert.crt -inkey private.key -out ./governikus_certificate/testzertifikat.pfx
Enter Export Password:
Verifying - Enter Export Password:
host19:~/testzertifikat$ ls .\governikus_certificate\
Directory: C:\Users\PeterMelichar\testzertifikat\governikus_certificate
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 03.07.2024 10:06 1926 cert-request.csr
-a--- 03.07.2024 10:10 2310 cert.crt
-a--- 03.07.2024 10:05 825 governikus_test.cnf
-a--- 03.07.2024 10:13 4547 testzertifikat.pfx
Das Export Passwort aus diesem letzten Schritt ist auch das Passwort, das später für die Signatur benötigt wird. Am einfachstene ist es, wenn für alle Schritte, Erzeugen, Signieren und Exportieren des Zertifikats dasselbe Passwort genutzt wird. Es ist nur ein Testzertifikat.
Hinweise:
OpenSSL unter Windows
Unter Windows ist das Kommando openssl nicht im regulären Installationsumfang enthalten und muss nachinstalliert werden. Entsprechende Quellen finden sich im Internet.
Alternativ kann unter Windows mittels Windows Subsystem for Linux (WSL) eine Linuxumgebung installiert und genutzt werden. Die meisten gängigen Linux Distributionen wie Ubuntu, Debian oder SuSE enthalten openssl im Installationsumfang.
Ordnerstruktur am Ende des Prozesses:
host19:~/testzertifikat$ ls -laR
.:
total 13
drwxr-xr-x 1 pm UsersGrp 0 Apr 19 15:08 .
drwxr-xr-x 1 pm UsersGrp 0 Apr 21 16:26 ..
-rw-r--r-- 1 pm UsersGrp 2122 Apr 19 15:23 ca-cert.pem
-rw-r--r-- 1 pm UsersGrp 41 Apr 19 17:06 ca-cert.srl
-rw-r--r-- 1 pm UsersGrp 3326 Apr 19 15:02 ca-key.pem
-rw-r--r-- 1 pm UsersGrp 129 Apr 19 15:01 create_ca.bat
drwxr-xr-x 1 pm UsersGrp 0 Apr 19 15:11 governikus_certificate
-rw-r--r-- 1 pm UsersGrp 3272 Apr 19 17:03 private.key
./governikus_certificate:
total 14
drwxr-xr-x 1 pm UsersGrp 0 Apr 19 15:11 .
drwxr-xr-x 1 pm UsersGrp 0 Apr 19 15:08 ..
-rw-r--r-- 1 pm UsersGrp 1878 Apr 19 17:03 cert-request.csr
-rw-r--r-- 1 pm UsersGrp 2126 Apr 19 17:06 cert.crt
-rw-r--r-- 1 pm UsersGrp 816 Apr 19 15:00 governikus_test.cnf
-rw-r--r-- 1 pm UsersGrp 4285 Apr 19 17:07 testzertifikat.pfx