Saya memiliki file SSL CRT dalam format PEM. Apakah ada cara saya dapat mengekstrak nama umum (CN) dari sertifikat dari baris perintah?
openssl
certificates
Naftuli Kay
sumber
sumber
Jawaban:
Jika sudah
openssl
menginstal, Anda dapat menjalankan:sumber
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 tambahansed
: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'
Perhatikan bahwa mengarahkan file ke input standar via
<
, bukan menggunakannya sebagai argumen. Karenaegrep
ini akan mencetak seluruh sertifikat, tetapi CN ada diSubject:
bidang di dekat bagian atas (waspadalah ada juga nilai CN diIssuer:
bidang itu).certtool
adalah bagian dari gnutl, jika tidak diinstal cari saja. GnuTLS sedikit lebih bagus daripada OpenSSL, IMO.sumber
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," menurutman certtool
, sehingga perintah yang tepat tampaknya"d"
, "layar." Jadi, perintah ini:(Ekstensi file dalam kasus saya kebetulan
.crt
bukan.pem
... ini tidak relevan.)... menghasilkan keluaran yang, pada bagian yang relevan, terlihat seperti ini:
Tidak diragukan lagi, goldilocks benar:
certtool
output jauh lebih mudah untuk dikerjakan daripadaopenssl
dalam kasus ini.sumber
certtool
yang mengambil opsi tanpa operator biasa (-
atau--
), danman 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: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 putihsumber