Saya memiliki file SSL CRT dalam format PEM. Apakah ada cara saya dapat mengekstrak nama umum (CN) dari sertifikat dari baris perintah?
Saya memiliki file SSL CRT dalam format PEM. Apakah ada cara saya dapat mengekstrak nama umum (CN) dari sertifikat dari baris perintah?
Jawaban:
Jika sudah openssl
menginstal, Anda dapat menjalankan:
openssl x509 -noout -subject -in server.pem
openssl x509 -noout -subject -in server.pem | sed -n '/^subject/s/^.*CN=//p'
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.
\*
ke apa yang digunakan @flungo untuk mendukung domain wildcard: sed -e 's/^subject.*CN=\([a-zA-Z0-9\.\-\*]*\).*$/\1/'
( [^/]
berfungsi dalam kasus saya)
sed
perintah 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/\/.*$//'
.
openssl x509 -noout -subject -nameopt multiline | grep commonName
atau hanya untuk nilainya| sed -n 's/ *commonName *= //p'
certtool -i < whatever.pem | egrep "^\s+Subject:"
Perhatikan bahwa mengarahkan file ke input standar via <
, bukan menggunakannya sebagai argumen. Karena egrep
ini 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
certtool
adalah bagian dari gnutl, jika tidak diinstal cari saja. GnuTLS sedikit lebih bagus daripada OpenSSL, IMO.
gnutls-certtool
yang diinstal melaluibrew install gnutls
gnutls-bin
Saya menemukan jawaban di atas, dan menemukan itu sangat berguna, tetapi saya juga menemukan bahwa certtool
sintaks 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 .crt
bukan .pem
... ini tidak relevan.)
... menghasilkan keluaran yang, pada bagian yang relevan, terlihat seperti ini:
Common Name : Foobar
Tidak diragukan lagi, goldilocks benar: certtool
output jauh lebih mudah untuk dikerjakan daripada openssl
dalam kasus ini.
certtool
yang mengambil opsi tanpa operator biasa ( -
atau --
), dan man certtool
untuk 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: