SSL प्रमाणपत्र से सामान्य नाम (CN) प्राप्त करें?


64

मेरे पास PEM प्रारूप में एक SSL CRT फ़ाइल है। क्या कोई ऐसा तरीका है जिसे मैं कमांड लाइन से सर्टिफिकेट से आम नाम (CN) निकाल सकता हूं?


3
हालाँकि, ध्यान दें कि बहु-डोमेन प्रमाणपत्र में, CN में वे सभी शामिल नहीं हैं।
टॉर्स्टन ब्रॉन्जर

जवाबों:


90

यदि आपने opensslस्थापित किया है तो आप चला सकते हैं:

openssl x509 -noout -subject -in server.pem

5
आप इस विषय से CN को बाहर निकाल सकते हैं:openssl x509 -noout -subject -in server.pem | sed -n '/^subject/s/^.*CN=//p'
मैथ्यू बकेट

1
मैंने संशोधित किया कि @MatthewBuckett ने क्या कहा और sed -e 's/^subject.*CN=\([a-zA-Z0-9\.\-]*\).*$/\1/'सीएन के बाद अतिरिक्त विवरण प्राप्त करने के लिए सिर्फ डोमेन प्राप्त करता था। एक वैध सीएन के लिए इसका सुपर सख्त मिलान नहीं है लेकिन ज्यादातर मामलों में यह काम करता है, आप अधिक सुस्त हो सकते हैं और इसके [a-zA-Z0-9\.\-]साथ बदल सकते हैं [^/]लेकिन मुझे यकीन नहीं है कि हमेशा काम करेगा।
flungo

1
\*वाइल्डकार्ड डोमेन का समर्थन करने के लिए उपयोग किए जाने वाले @flungo में जोड़ें : sed -e 's/^subject.*CN=\([a-zA-Z0-9\.\-\*]*\).*$/\1/' ( [^/]मेरे मामले में काम करता है, हालांकि)
bryn

1
sedयदि प्रमाणपत्र उदाहरण OU (ऑरगेनाइजेशनलयूनिट) के लिए, सापेक्ष विशिष्ट नाम (RDNs) सामान्य नाम (CN) के बाद निर्दिष्ट है या सी (देश) आदेशों ऊपर सुझाए गए काम नहीं करेगा। इस तरह के मामलों के लिए पूरा करने के लिए एक तरह से एक अतिरिक्त होगा sed: openssl x509 -noout -subject -in server.pem | sed 's/^.*CN=//' | sed sed 's/\/.*$//'
ओहद श्नाइडर

6
विषय में अन्य RDN / ATVs से CN को अलग करने का आसान तरीका : openssl x509 -noout -subject -nameopt multiline | grep commonNameया केवल मान के लिए| sed -n 's/ *commonName *= //p'
dave_thompson_085

7
certtool -i < whatever.pem | egrep "^\s+Subject:"

सूचना जो फ़ाइल को मानक इनपुट के माध्यम से निर्देशित कर रही है <, उसे तर्क के रूप में उपयोग नहीं करना। Sans egrepयह पूरे प्रमाणपत्र को प्रिंट करेगा, लेकिन CN Subject:शीर्ष के पास फ़ील्ड में है (सावधान रहें कि Issuer:फ़ील्ड में CN मान भी है )।

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

certtoolअगर यह सिर्फ उस के लिए खोज स्थापित नहीं है, तो यह कुपोषण का हिस्सा है। GnuTLS OpenSSL, IMO की तुलना में थोड़ा अच्छा है।


2
अच्छा उत्तर, +1। मैक ओएस एक्स के लिए, मैं का इस्तेमाल किया था gnutls-certtoolजो के माध्यम से स्थापित किया गया थाbrew install gnutls
माइक डी

डेबियन स्थापित परgnutls-bin
rubo77

1

मैंने उपर्युक्त उत्तर पाया, और इसे बहुत उपयोगी पाया, लेकिन मैंने यह भी पाया कि certtoolकमांड सिंटैक्स (उबंटू लिनक्स पर, आज) गोल्डीलॉक्स द्वारा वर्णित की तुलना में बिल्कुल अलग था, जैसा कि आउटपुट था। इसलिए, मैंने उस उत्कृष्ट उत्तर को अपडेट करने के लिए सोचा जो "आज का संस्करण" हो सकता है।

"i"विकल्प (अब?) के अनुसार के लिए खड़ा है "आयात," man certtoolइसलिए उचित आदेश प्रतीत होता है, "d""प्रदर्शन।" तो, यह आदेश:

certtool d myfoo.crt

(मेरे मामले में फाइल एक्सटेंशन बस होने वाला .crtनहीं .pemहै ... यह प्रासंगिक नहीं है।)

... उत्पादन का उत्पादन करता है, जो प्रासंगिक भाग में दिखता है:

Common Name     : Foobar

निर्विवाद रूप से, गोल्डीलॉक्स सही था: इस मामले की तुलना में certtoolआउटपुट काम करना बहुत आसान है openssl


1
मुझे संदेह है कि हम सॉफ्टवेयर के पूरी तरह से अलग टुकड़ों के बारे में बात कर रहे हैं। मैंने कभी नहीं देखा certtoolकि विकल्पों में से एक संस्करण आम संचालकों ( -या --), और man certtoolवी। 3.5.8 (डेबियन), 3.5.16 (फेडोरा) के लिए है, इसके बाद का एकमात्र संस्करण ऊपर की ओर स्थिर शाखा में 3.5.17 है एक महीने पहले), GnuTLS के ऑनलाइन प्रलेखन और, वास्तव में, Ubuntu 17.10 के लिए ऑनलाइन मैन पेज (वर्तमान डेबियन के समान संस्करण) सभी का उल्लेख है:
Goldilocks

"मैं, --certificate-जानकारी: दिए गए प्रमाण पत्र के बारे में जानकारी प्रिंट," जबकि "-d" है "--debug"। बहुत अजीब। O_O?
गोल्डीलॉक्स

-1

मैंने उपयोग किया: यदि आप श्वेत स्थान के साथ नहीं रह सकते openssl x509 -noout -subject -in mycert.crt | awk -F= '{print $NF}'हैं | sed -e 's/^[ \t]*//'तो जोड़ें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.