it-swarm-id.com

Bagaimana cara mendapatkan kunci publik dari halaman web yang aman?

Bagaimana saya bisa mendapatkan kunci publik dari halaman web seperti verisign, dll. Menggunakan protokol HTTPS?

28
shalki

Perintah ini akan menunjukkan kepada Anda sertifikat (gunakan -showcerts sebagai parameter tambahan jika Anda ingin melihat rantai penuh):

openssl s_client -connect the.Host.name:443

Ini akan mendapatkan sertifikat dan mencetak kunci publik:

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

Jika Anda ingin menggali lebih jauh, pertanyaan ini mungkin menarik.

60
Bruno

Di google chrome, buka halaman web https (katakanlah https://mail.google.com ), klik kunci di sebelah URL, lalu klik pada "informasi sertifikat", klik pada Tab "Perincian", dan kemudian temukan "Info Kunci Publik Subjek", yang untuk mail.google.com mengatakan Algoritma Kunci Publik Subjek: "Enkripsi RSA # 1 PKCS" dan Kunci Publik Subjek:

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

Ini sesuai dengan angka desimal N=123045765072979014913511278179231402316770142733119510397469126703890433473616878571037576880489731114142173557070569117331013682110047985574967516701153320350820086344743718518661070276817382223900929884490765709232088941906671668904441902033030813416432622693650320785674286428555963210887699747381872357573

dan exponent=65537 digunakan dalam RSA.

10
dr jimbob

Di Python 3, SSLSocket.getpeercert dapat digunakan untuk mendapatkan sertifikat rekan, yang pada gilirannya dapat diuraikan oleh pengurai sertifikat 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)

Variabel pubkey sekarang menjadi RSAPublicKey jika koneksi menggunakan RSA. Anda bisa mendapatkan modulus seperti ini:

print(pubkey["modulus"].native)

Atau mengonversinya menjadi kunci publik PEM seperti ini:

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