Skip to main content
Skip table of contents

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.

CODE
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.

CODE
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
CODE
[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

CODE
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

CODE
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.

CODE
host19:~/testzertifikat$ openssl x509 -text -noout -in ./governikus_certificate/cert.crt
Zertifikat mit v3 Extension
CODE
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

CODE
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:

CODE
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
JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.