CSR-Hash und Cert-Hash sind nicht miteinander verbunden
Der Hash-Typ auf der Anforderung und auf dem tatsächlichen Zertifikat sind nicht miteinander verbunden.
Die Zertifizierungsstelle überprüft die Signatur auf dem CSR. Auf diese Weise kann die Zertifizierungsstelle überprüfen, ob die CSR während der Übertragung nicht geändert wurde. Das ist alles, was die Unterschrift auf dem CSR tut.
Es gibt keine offizielle (oder sogar halboffizielle) In-Band-Methode, um einer CA mitzuteilen, welchen Hash Sie möchten. Stattdessen kann ein CA-Unternehmen mehrere CAs ausführen, von denen eine ausschließlich SHA256 verwendet. Und wenn Sie SHA256 möchten, senden Sie Ihre CSR auf der Website dieser einen bestimmten SHA256-only-CA. (Und nicht auf der Website ihrer SHA1-CA.)
Was oft theoretisiert wird , ist ungefähr so: "Wenn ich eine mit SHA1 signierte CSR einreiche, wird mein Zertifikat mit SHA1 signiert." Dies wird normalerweise nicht gemacht. ( Die einzige CA, von der ich weiß, dass sie dies seit einiger Zeit getan hat, war Gandi.net .)
So signieren Sie eine CSR mit SHA256
Verwenden Sie jedoch den -sha256
Parameter, um Ihre CSR mit SHA256 wie folgt zu signieren:
openssl req -new -newkey rsa: 2048 -nodes -sha256 -out www.example.com.sha256.csr -keyout www.example.com.key -subj "/ C = US / ST = ExampleState / L = ExampleLocation / O. = ExampleOrganisation / CN = www.example.com "
So überprüfen Sie den Hash-Typ eines CSR
Und so ermitteln Sie den Hash-Typ Ihres CSR:
$ openssl req -in www.example.com.sha256.csr -noout -text | grep Signature
Signature Algorithm: sha256WithRSAEncryption
Gut. Es verwendet SHA256 genau so, wie wir es wollten.