Hogyan szerezhetem be egy weboldal nyilvános kulcsát, például a verisign stb. HTTPS protokoll használatával?

Megjegyzések

  • Ha akkor értem a kérdését, rákattinthat a https protokoll bejelentkezésére krómban vagy Firefoxban (a címsáv bal sarkában), ott láthat egy popot, amely részletesen bemutatja a tanúsítvány, beleértve annak nyilvános kulcsát.
  • @ Jor-el, I ' m feltételezve, hogy a openssl tag, hogy a kérdés az OpenSSL használatával történik. Talán tisztázható lenne a kérdés.
  • A HTTPS oldalon nincs nyilvános kulcs; csak egy szervernek van nyilvános kulcs és tanúsítvány, amint azt a válaszok kifejtik. Ez legalább egy domain név, és néha több is. Különböző oldalak ' t lehetnek különböző kulcsokkal / tanúsítványokkal, mert a szervernek meg kell adnia a tanúsítványát (és az ügyfél elfogadja), mielőtt az ügyfél tájékoztatja a szervert oldalt kérik – ha van; A HTTP [S] lehetővé teszi azokat a kérelmeket, amelyek nem ' egyáltalán nem férnek hozzá egyetlen oldalhoz sem.

Válasz

Ez a parancs megmutatja a tanúsítványt (a -showcerts -t használja extra paraméterként, ha a teljes láncot szeretné látni):

openssl s_client -connect the.host.name:443 

Ezzel megszerzi a tanúsítványt és kinyomtatja a nyilvános kulcsot:

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

Ha tovább akar ásni, ez a kérdés érdekes lehet.

Megjegyzések

  • Amikor ezt futtatja A CentOS 7 OpenSSL 1.0.2k verzióval a parancs nem ' nem lép ki automatikusan a kulcs kinyomtatása után.

Válasz

A google chrome-ban lépjen a https weboldalra (mondja: https://mail.google.com ), kattintson az URL melletti zárra, majd kattintson a “tanúsítvány adatai” elemre, kattintson a “Részletek” fülre, majd keresse meg a “Tárgy nyilvános kulcsadatai” elemet , amely a mail.google.com esetében mondja ki a Tárgy nyilvános kulcs algoritmusát: “PKCS # 1 RSA titkosítás” és a Tárgy nyilvános kulcsa:

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 

Ez megfelel az RSA-ban használt N=123045765072979014913511278179231402316770142733119510397469126703890433473616878571037576880489731114142173557070569117331013682110047985574967516701153320350820086344743718518661070276817382223900929884490765709232088941906671668904441902033030813416432622693650320785674286428555963210887699747381872357573

és exponent=65537 tizedesjegyeknek.

Válasz

A Python 3-ban SSLSocket.getpeercert felhasználható a társaktanúsítvány megszerzésére, amelyet bármely DER tanúsító elemző elemezhet:

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) 

A pubkey most RSAPublicKey, ha a kapcsolat RSA-t használt. Ilyen módon kaphatja meg a modulust:

print(pubkey["modulus"].native) 

Vagy alakítsa át PEM nyilvános kulcsra, mint ez:

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

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük