Tôi có tệp SSL CRT ở định dạng PEM. Có cách nào để tôi có thể trích xuất tên chung (CN) từ chứng chỉ từ dòng lệnh không?
Tôi có tệp SSL CRT ở định dạng PEM. Có cách nào để tôi có thể trích xuất tên chung (CN) từ chứng chỉ từ dòng lệnh không?
Câu trả lời:
Nếu bạn đã openssl
cài đặt, bạn có thể chạy:
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/'
để chỉ lấy tên miền vì tôi có thêm thông tin chi tiết sau CN. Nó không phải là siêu phù hợp với một CN hợp lệ nhưng trong hầu hết các trường hợp nó hoạt động, bạn có thể chậm chạp hơn và thay thế [a-zA-Z0-9\.\-]
bằng [^/]
nhưng tôi không chắc chắn rằng nó sẽ luôn hoạt động.
\*
vào những gì @flungo đã sử dụng để hỗ trợ các tên miền ký tự đại diện: sed -e 's/^subject.*CN=\([a-zA-Z0-9\.\-\*]*\).*$/\1/'
( [^/]
tuy nhiên hoạt động trong trường hợp của tôi)
sed
lệnh được đề xuất ở trên sẽ không hoạt động nếu chứng chỉ có Tên phân biệt tương đối (RDN) được chỉ định sau Tên chung (CN), ví dụ OU (OrgancombUnit) hoặc C (Quốc gia). Một cách để phục vụ cho những trường hợp như vậy sẽ là một bổ sung sed
: openssl x509 -noout -subject -in server.pem | sed 's/^.*CN=//' | sed sed 's/\/.*$//'
.
openssl x509 -noout -subject -nameopt multiline | grep commonName
hoặc chỉ cho giá trị| sed -n 's/ *commonName *= //p'
certtool -i < whatever.pem | egrep "^\s+Subject:"
Lưu ý rằng điều hướng tệp đến đầu vào tiêu chuẩn thông qua <
, không sử dụng nó làm đối số. Sans egrep
này sẽ in toàn bộ chứng chỉ ra, nhưng CN nằm trong Subject:
trường gần đầu (hãy cẩn thận cũng có giá trị CN trong Issuer:
trường).
X.509 Certificate Information:
Version: 3
Serial Number (hex): 01
Issuer: [...] CN=unixandlinux.ex <- Not this one.
Validity: ...
Subject: CN=goldilocks
certtool
là một phần của gnutls, nếu nó không được cài đặt, chỉ cần tìm kiếm nó. GnuTLS đẹp hơn một chút so với OpenSSL, IMO.
gnutls-certtool
cài đặt quabrew install gnutls
gnutls-bin
Tôi đã tìm thấy câu trả lời ở trên và thấy nó rất hữu ích, nhưng tôi cũng thấy rằng certtool
cú pháp lệnh (trên Ubuntu Linux, ngày nay) khác biệt đáng kể so với mô tả của goldilocks, cũng như đầu ra. Vì vậy, tôi nghĩ tốt nhất nên cập nhật câu trả lời xuất sắc đó với "phiên bản hôm nay".
Các "i"
tùy chọn (bây giờ?) Viết tắt của "nhập khẩu", theo man certtool
, vì vậy các lệnh thích hợp dường như là "d"
, "hiển thị". Vì vậy, lệnh này:
certtool d myfoo.crt
(Phần mở rộng tập tin trong trường hợp của tôi chỉ là .crt
không .pem
... điều này không liên quan.)
... tạo ra kết quả đầu ra, trong phần có liên quan, trông như thế này:
Common Name : Foobar
Rõ ràng, thiếu nữ tóc vàng đã đúng: certtool
đầu ra là nhiều dễ dàng hơn dễ dàng hơn để làm việc với hơn openssl
trong trường hợp này.
certtool
nào có các tùy chọn thay đổi các toán tử thông thường ( -
hoặc --
) và man certtool
cho câu 3.5.8 (debian), 3.5.16 (fedora, phiên bản duy nhất sau đó trong nhánh ổn định ngược dòng là 3.5,17 từ một tháng trước), tài liệu trực tuyến của GnuTLS và, thực sự, trang người dùng trực tuyến cho Ubuntu 17.10 (cùng phiên bản với debian hiện tại) đều đề cập đến: