Comment puis-je obtenir la clé publique dune page Web telle que verisign, etc. en utilisant le protocole HTTPS?

Commentaires

  • Si je comprends bien votre question, vous pouvez cliquer sur le signe du protocole https dans Chrome ou Firefox (dans le coin gauche de la barre dadresse), vous pouvez y voir une fenêtre montrant des détails sur le certificat incluant sa clé publique.
  • @ Jor-el, I ' m en supposant que openssl que la question porte sur le fait de faire cela avec OpenSSL. Peut-être que la question pourrait être clarifiée.
  • Une page HTTPS na pas de clé de publication; seul un serveur a une adresse de publication et un certificat pour celui-ci, comme expliqué dans les réponses. Cest au moins un nom de domaine, et parfois plus dun. Différentes pages peuvent ' t avoir des clés / certificats différents, car le serveur doit fournir son certificat (et le client l’accepte) avant que le client informe le serveur de ce la page est demandée – le cas échéant; HTTP [S] autorise les requêtes qui ne ' accéder à aucune page.

Réponse

Cette commande vous montrera le certificat (utilisez -showcerts comme paramètre supplémentaire si vous voulez voir la chaîne complète):

openssl s_client -connect the.host.name:443 

Cela obtiendra le certificat et affichera la clé publique:

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

Si vous voulez creuser plus loin, cette question pourrait vous intéresser.

Commentaires

  • Lors de l’exécution de CentOS 7 avec OpenSSL 1.0.2k, la commande ne ' se ferme pas automatiquement après limpression de la clé.

Réponse

Dans Google Chrome, accédez à la page Web https (dites https://mail.google.com ), cliquez sur le cadenas à côté de lURL, puis cliquez sur « informations sur le certificat », cliquez sur longlet « Détails », puis recherchez « Info clé publique du sujet » , qui pour mail.google.com dit Subject Public Key Algorithm: « PKCS # 1 RSA Encryption » et Subject « s Public Key:

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 

Cela correspond aux nombres décimaux N=123045765072979014913511278179231402316770142733119510397469126703890433473616878571037576880489731114142173557070569117331013682110047985574967516701153320350820086344743718518661070276817382223900929884490765709232088941906671668904441902033030813416432622693650320785674286428555963210887699747381872357573

et exponent=65537 utilisés en RSA.

Réponse

En Python 3, SSLSocket.getpeercert peut être utilisé pour obtenir le certificat homologue, qui à son tour peut être analysé par nimporte quel analyseur de certificat DER:

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) 

La variable pubkey est maintenant un RSAPublicKey si la connexion utilisait RSA. Vous pouvez obtenir le module comme ceci:

print(pubkey["modulus"].native) 

Ou le convertir en une clé publique PEM comme ceci:

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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *