it-swarm-eu.dev

Wie erhalte ich den öffentlichen Schlüssel einer sicheren Webseite?

Wie kann ich den öffentlichen Schlüssel einer Webseite wie Verisign usw. mithilfe des HTTPS-Protokolls abrufen?

28
shalki

Dieser Befehl zeigt Ihnen das Zertifikat (verwenden Sie -showcerts als zusätzlicher Parameter, wenn Sie die gesamte Kette sehen möchten):

openssl s_client -connect the.Host.name:443

Dadurch wird das Zertifikat abgerufen und der öffentliche Schlüssel ausgedruckt:

openssl s_client -connect the.Host.name:443 | openssl x509 -pubkey -noout

Wenn Sie weiter graben möchten, könnte diese Frage von Interesse sein.

60
Bruno

Gehen Sie in Google Chrome zur https-Webseite (z. B. https://mail.google.com ), klicken Sie auf das Schloss neben der URL und dann auf "Zertifikatinformationen" und dann auf Registerkarte "Details", und suchen Sie dann "Subject Public Key Info", die für mail.google.com sagt Algorithmus für den öffentlichen Schlüssel des Betreffs: "PKCS # 1 RSA Encryption" und öffentlicher Schlüssel des Betreffs:

Modulus (1024 bits):
AF 39 15 98 68 E4 92 FE 4F 4F F1 BB FF 0D 2E B0
FE 25 AA BD 68 04 67 27 EA 6C 43 4C A7 6D CB C8
8F 7E 81 EE 87 26 25 10 12 54 33 9E AA 3D 9B 8F
8E 92 B3 4B 01 E3 F9 4A 29 C3 0F FD AC B7 D3 4C
97 29 3F 69 55 CF 70 83 04 AF 2E 04 6E 74 D6 0F
17 09 FE 9E 20 24 24 E3 C7 68 9C AC 11 BD 92 E4
B2 1B 09 F2 02 32 BB 55 1B 2D 16 5F 30 12 23 E2
4C 4A 8D C2 DA 3F E1 B8 BF F7 3A B1 86 BE F0 C5

Public Exponent (24 bits):
01 00 01

Dies entspricht den Dezimalzahlen N=123045765072979014913511278179231402316770142733119510397469126703890433473616878571037576880489731114142173557070569117331013682110047985574967516701153320350820086344743718518661070276817382223900929884490765709232088941906671668904441902033030813416432622693650320785674286428555963210887699747381872357573

und exponent=65537 wird in RSA verwendet.

10
dr jimbob

In Python 3, SSLSocket.getpeercert kann verwendet werden, um das Peer-Zertifikat zu erhalten, das wiederum von jedem DER-Zertifikat-Parser analysiert werden kann:

import ssl, socket
from asn1crypto import pem, x509

hostname = 'www.sjoerdlangkemper.nl'
ctx = ssl.create_default_context()
s = ctx.wrap_socket(socket.socket(), server_hostname=hostname)
s.connect((hostname, 443))
der = s.getpeercert(binary_form=True)
cert = x509.Certificate.load(der)
pubkey = cert.public_key.unwrap()
print(pubkey)

Die Variable pubkey ist jetzt ein RSAPublicKey, wenn die Verbindung RSA verwendet. Sie können den Modul wie folgt erhalten:

print(pubkey["modulus"].native)

Oder konvertieren Sie es in einen öffentlichen PEM-Schlüssel wie folgt:

print(pem.armor("PUBLIC KEY", pubkey.contents).decode("ASCII"))
0
Sjoerd