Hvordan kan jeg få den offentlige nøkkelen til en webside som verisign osv. ved hjelp av HTTPS-protokoll?

Kommentarer

  • Hvis jeg forstår spørsmålet ditt akkurat da, kan du klikke på https-protokolltegnet i krom eller Firefox (i venstre hjørne av adresselinjen), der kan du se en pop som viser detaljer om sertifikatet inkludert den offentlige nøkkelen.
  • @ Jor-el, jeg ' jeg antar fra openssl tag at spørsmålet handler om å gjøre dette med OpenSSL. Kanskje kan spørsmålet avklares.
  • En HTTPS -side har ikke en offentlig nøkkel; bare en server har en offentlig nøkkel og et sertifikat for det, som forklart i svarene. Det er minst ett domenenavn, og noen ganger mer enn ett. Ulike sider kan ' t ha forskjellige nøkler / certer, fordi serveren må gi sitt cert (og klienten godtar det) før klienten informerer serveren om hva siden blir bedt om – hvis noen HTTP [S] tillater forespørsler som ikke ' ikke får tilgang til noen side i det hele tatt.

Svar

Denne kommandoen viser sertifikatet (bruk -showcerts som en ekstra parameter hvis du vil se hele kjeden):

openssl s_client -connect the.host.name:443 

Dette får sertifikatet og skriver ut den offentlige nøkkelen:

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

Hvis du vil grave videre, dette spørsmålet kan være av interesse.

Kommentarer

  • Når du kjører dette på CentOS 7 med OpenSSL 1.0.2k, kommandoen ' t avsluttes automatisk etter at du har skrevet ut nøkkelen.

Svar

I google chrome, gå til https-nettsiden (si https://mail.google.com ), klikk på låsen ved siden av URL-en, og klikk deretter på «sertifikatinformasjon», klikk på «Detaljer» -fanen, og finn deretter «Emne offentlig nøkkelinformasjon» , som for mail.google.com sier algoritme for emne offentlig nøkkel: «PKCS # 1 RSA-kryptering» og emne «offentlig nøkkel:

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 

Dette tilsvarer desimaltallene N=123045765072979014913511278179231402316770142733119510397469126703890433473616878571037576880489731114142173557070569117331013682110047985574967516701153320350820086344743718518661070276817382223900929884490765709232088941906671668904441902033030813416432622693650320785674286428555963210887699747381872357573

og exponent=65537 brukt i RSA.

Svar

I Python 3, SSLSocket.getpeercert kan brukes til å skaffe peer-sertifikatet, som igjen kan analyseres av en hvilken som helst DER-sertifikatparser:

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) 

Variabelen pubkey er nå en RSAPublicKey hvis forbindelsen brukte RSA. Du kan få modulen slik:

print(pubkey["modulus"].native) 

Eller konvertere den til en offentlig PEM-nøkkel slik:

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

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *