Dapatkan nama umum (CN) dari sertifikat SSL?

64

Saya memiliki file SSL CRT dalam format PEM. Apakah ada cara saya dapat mengekstrak nama umum (CN) dari sertifikat dari baris perintah?

Naftuli Kay
sumber
3
Perhatikan, bagaimanapun, bahwa dalam sertifikat multi-domain, CN tidak mengandung semuanya.
Torsten Bronger

Jawaban:

90

Jika sudah opensslmenginstal, Anda dapat menjalankan:

openssl x509 -noout -subject -in server.pem
Jeff Smith
sumber
5
Anda dapat mengekstraksi CN dari subjek dengan:openssl x509 -noout -subject -in server.pem | sed -n '/^subject/s/^.*CN=//p'
Matthew Buckett
1
Saya memodifikasi apa yang dikatakan @MatthewBuckett dan digunakan sed -e 's/^subject.*CN=\([a-zA-Z0-9\.\-]*\).*$/\1/'untuk mendapatkan domain karena saya memiliki detail tambahan setelah CN. Its pencocokan tidak super ketat untuk CN valid tetapi dalam banyak kasus kerjanya, Anda bisa lebih kendur dan mengganti [a-zA-Z0-9\.\-]dengan [^/]tetapi saya tidak yakin bahwa akan selalu bekerja.
flungo
1
Tambahkan \*ke apa yang digunakan @flungo untuk mendukung domain wildcard: sed -e 's/^subject.*CN=\([a-zA-Z0-9\.\-\*]*\).*$/\1/' ( [^/]berfungsi dalam kasus saya)
bryn
1
The sedperintah yang disarankan di atas tidak akan bekerja jika cert memiliki Nama Distinguished Relatif (RDNS) ditentukan setelah Common Name (CN), misalnya OU (OrganizationalUnit) atau C (Negara). Salah satu cara untuk memenuhi kasus tersebut akan menjadi tambahan sed: openssl x509 -noout -subject -in server.pem | sed 's/^.*CN=//' | sed sed 's/\/.*$//'.
Ohad Schneider
6
Cara yang lebih mudah untuk memisahkan CN dari RDN / ATV lain dengan nama Subjek: openssl x509 -noout -subject -nameopt multiline | grep commonNameatau hanya untuk nilainya| sed -n 's/ *commonName *= //p'
dave_thompson_085
7
certtool -i < whatever.pem | egrep "^\s+Subject:"

Perhatikan bahwa mengarahkan file ke input standar via <, bukan menggunakannya sebagai argumen. Karena egrepini akan mencetak seluruh sertifikat, tetapi CN ada di Subject:bidang di dekat bagian atas (waspadalah ada juga nilai CN di Issuer:bidang itu).

X.509 Certificate Information:
    Version: 3
    Serial Number (hex): 01
    Issuer: [...] CN=unixandlinux.ex  <- Not this one.
    Validity: ...
    Subject: CN=goldilocks

certtooladalah bagian dari gnutl, jika tidak diinstal cari saja. GnuTLS sedikit lebih bagus daripada OpenSSL, IMO.

goldilocks
sumber
2
Jawaban bagus, +1. Untuk Mac OS X, saya harus menggunakan gnutls-certtoolyang diinstal melaluibrew install gnutls
Mike D
pada debian instalgnutls-bin
rubo77
1

Saya menemukan jawaban di atas, dan menemukan itu sangat berguna, tetapi saya juga menemukan bahwa certtoolsintaks perintah (di Ubuntu Linux, hari ini) sangat berbeda dari yang dijelaskan oleh goldilocks, seperti juga outputnya. Jadi, saya pikir sebaiknya memperbarui jawaban yang sangat baik dengan apa yang mungkin menjadi "versi hari ini."

The "i"pilihan (sekarang?) Singkatan dari "impor," menurut man certtool, sehingga perintah yang tepat tampaknya "d", "layar." Jadi, perintah ini:

certtool d myfoo.crt

(Ekstensi file dalam kasus saya kebetulan .crtbukan .pem... ini tidak relevan.)

... menghasilkan keluaran yang, pada bagian yang relevan, terlihat seperti ini:

Common Name     : Foobar

Tidak diragukan lagi, goldilocks benar: certtooloutput jauh lebih mudah untuk dikerjakan daripada openssldalam kasus ini.

Mike Robinson
sumber
1
Saya kira kita berbicara tentang perangkat lunak yang sangat berbeda. Saya belum pernah melihat versi certtoolyang mengambil opsi tanpa operator biasa ( -atau --), dan man certtooluntuk v. 3.5.8 (debian), 3.5.16 (fedora, satu-satunya versi setelah itu di cabang upstream stable adalah 3.5.17 dari sebulan yang lalu), dokumentasi online GnuTLS dan, memang, halaman manual online untuk Ubuntu 17.10 (versi yang sama dengan debian saat ini) semuanya merujuk ke:
goldilocks
"-i, --certificate-info: Cetak informasi pada sertifikat yang diberikan," sedangkan "-d" adalah "--debug". Sangat aneh. O_o?
goldilocks
-1

Saya menggunakan: openssl x509 -noout -subject -in mycert.crt | awk -F= '{print $NF}'add | sed -e 's/^[ \t]*//'Jika Anda tidak dapat hidup dengan ruang putih

Djieno
sumber