Zertifikate für Visual Studio Deploys

Heute stand ich vor dem Problem, dass ich ein One-Click-Deploy im Visual Studio 2005 signieren musste, das temporäre Zertifikat vom Visual Studio aber nur für ein Jahr gültig ist. Da mir dieser Zeitraum nicht reichte (Es gibt immer wenn das Zertifikat abläuft Probleme damit) musste eine Lösung her dieses Zertifikat für eine längere Zeit zu generieren. Nach einiger Suche nach Windows-Methoden dafür habe ich es dann aufgegeben und mich der Generierung auf einem Linux-System zugewandt.

Hier ist der Weg um sich ein solches Zertifikat zu generieren, mit dem man seine Deploys und Assemblys signieren kann:

Die Schritte sollten in einem eigenen Ordner durchgeführt werden, damit keine Verwechslungen mit anderen Dateien auftreten können.

Achtung: Die fettgedruckten Befehlszeilen müssen immer in einer Zeile liegen!

Als erstes generieren wir einen privaten Schlüssel für unser Zertifikat. Dazu verwenden wir OpenSSL und einen RSA-Schlüssel ohne Passwort:

$ openssl genrsa -out privkey.pem 2048 Generating RSA private key, 2048 bit long modulus ......+++ .........+++ e is 65537 (0x10001)
Zu diesem Schlüssel wird dann ein Self-Signed-Zertifikat generiert. (An dieser Stelle kann natürlich auch ein CSR für z.B. CaCert erstellt werden)
$ openssl req -new -x509 -key privkey.pem -out cacert.pem -days 4000 [...] Country Name (2 letter code) [AU]:DE State or Province Name (full name) [Some-State]:Niedersachsen Locality Name (eg, city) []:Weyhe Organization Name (eg, company) [Internet Widgits Pty Ltd]:K. Ahlers Organizational Unit Name (eg, section) []:Software Development Common Name (eg, YOUR name) []:K. Ahlers Email Address []:knut@ahlers.me
In diesem Fall wurde ein Zertifikat für 4000 Tage generiert. Die Daten unten sollten natürlich angepasst werden.

Im letzten Schritt wird dann aus den Schlüsseldateien ein PKCS#12-Zertifikat erstellt, welches vom Visual Studio verarbeitet werden kann:

$ openssl pkcs12 -export -in cacert.pem -inkey privkey.pem -out cert.pfx -name "MyAPP" Enter Export Password: Verifying - Enter Export Password:
Achtung: An dieser Stelle muss ein Passwort eingegeben werden. Windows akzeptiert es nicht, wenn eine PKCS#12-Datei nicht passwortgeschützt ist.

Diese Datei wird dann in das Projekt kopiert und im Signierungs-Dialog ausgewählt. Schon ist die Anwendung mit einem Zertifikat signiert, welches nahezu eine Ewigkeit gültig ist ;)