Lấy tên chung (CN) từ chứng chỉ SSL?


64

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?


3
Tuy nhiên, lưu ý rằng trong các chứng chỉ đa miền, CN không chứa tất cả chúng.
Torsten Bronger

Câu trả lời:


90

Nếu bạn đã opensslcài đặt, bạn có thể chạy:

openssl x509 -noout -subject -in server.pem

5
Bạn có thể trích xuất CN ra khỏi chủ đề với:openssl x509 -noout -subject -in server.pem | sed -n '/^subject/s/^.*CN=//p'
Matthew Buckett

1
Tôi đã sửa đổi những gì @MatthewBuckett đã nói và sử dụng 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.
flungo

1
Thêm \*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)
bryn

1
Các sedlệ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/\/.*$//'.
Ohad Schneider

6
Cách dễ dàng hơn để tách CN khỏi các RDN / ATV khác trong tên Chủ đề: openssl x509 -noout -subject -nameopt multiline | grep commonNamehoặc chỉ cho giá trị| sed -n 's/ *commonName *= //p'
dave_thedom_085

7
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 egrepnà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

certtoollà 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.


2
Câu trả lời hay, +1. Đối với Mac OS X, tôi đã phải sử dụng gnutls-certtoolcài đặt quabrew install gnutls
Mike D

khi cài đặt debiangnutls-bin
rubo77

1

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 certtoolcú 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à .crtkhô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 openssltrong trường hợp này.


1
Tôi nghi ngờ chúng ta đang nói về những phần mềm hoàn toàn khác nhau. Tôi chưa bao giờ thấy một phiên bản certtoolnào có các tùy chọn thay đổi các toán tử thông thường ( -hoặc --) và man certtoolcho 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:
goldilocks

"-I, --certert-information: In thông tin trên chứng chỉ đã cho," trong khi "-d""--debug". Rất lạ. O_o?
goldilocks

-1

Tôi đã sử dụng: openssl x509 -noout -subject -in mycert.crt | awk -F= '{print $NF}'thêm | sed -e 's/^[ \t]*//'Nếu bạn không thể sống với khoảng trắng

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.