मेरे पास PEM प्रारूप में एक SSL CRT फ़ाइल है। क्या कोई ऐसा तरीका है जिसे मैं कमांड लाइन से सर्टिफिकेट से आम नाम (CN) निकाल सकता हूं?
मेरे पास PEM प्रारूप में एक SSL CRT फ़ाइल है। क्या कोई ऐसा तरीका है जिसे मैं कमांड लाइन से सर्टिफिकेट से आम नाम (CN) निकाल सकता हूं?
जवाबों:
यदि आपने opensslस्थापित किया है तो आप चला सकते हैं:
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/'सीएन के बाद अतिरिक्त विवरण प्राप्त करने के लिए सिर्फ डोमेन प्राप्त करता था। एक वैध सीएन के लिए इसका सुपर सख्त मिलान नहीं है लेकिन ज्यादातर मामलों में यह काम करता है, आप अधिक सुस्त हो सकते हैं और इसके [a-zA-Z0-9\.\-]साथ बदल सकते हैं [^/]लेकिन मुझे यकीन नहीं है कि हमेशा काम करेगा।
\*वाइल्डकार्ड डोमेन का समर्थन करने के लिए उपयोग किए जाने वाले @flungo में जोड़ें : sed -e 's/^subject.*CN=\([a-zA-Z0-9\.\-\*]*\).*$/\1/' ( [^/]मेरे मामले में काम करता है, हालांकि)
sedयदि प्रमाणपत्र उदाहरण OU (ऑरगेनाइजेशनलयूनिट) के लिए, सापेक्ष विशिष्ट नाम (RDNs) सामान्य नाम (CN) के बाद निर्दिष्ट है या सी (देश) आदेशों ऊपर सुझाए गए काम नहीं करेगा। इस तरह के मामलों के लिए पूरा करने के लिए एक तरह से एक अतिरिक्त होगा sed: openssl x509 -noout -subject -in server.pem | sed 's/^.*CN=//' | sed sed 's/\/.*$//'।
openssl x509 -noout -subject -nameopt multiline | grep commonNameया केवल मान के लिए| sed -n 's/ *commonName *= //p'
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 की तुलना में थोड़ा अच्छा है।
gnutls-certtoolजो के माध्यम से स्थापित किया गया थाbrew install gnutls
gnutls-bin
मैंने उपर्युक्त उत्तर पाया, और इसे बहुत उपयोगी पाया, लेकिन मैंने यह भी पाया कि certtoolकमांड सिंटैक्स (उबंटू लिनक्स पर, आज) गोल्डीलॉक्स द्वारा वर्णित की तुलना में बिल्कुल अलग था, जैसा कि आउटपुट था। इसलिए, मैंने उस उत्कृष्ट उत्तर को अपडेट करने के लिए सोचा जो "आज का संस्करण" हो सकता है।
"i"विकल्प (अब?) के अनुसार के लिए खड़ा है "आयात," man certtoolइसलिए उचित आदेश प्रतीत होता है, "d""प्रदर्शन।" तो, यह आदेश:
certtool d myfoo.crt
(मेरे मामले में फाइल एक्सटेंशन बस होने वाला .crtनहीं .pemहै ... यह प्रासंगिक नहीं है।)
... उत्पादन का उत्पादन करता है, जो प्रासंगिक भाग में दिखता है:
Common Name : Foobar
निर्विवाद रूप से, गोल्डीलॉक्स सही था: इस मामले की तुलना में certtoolआउटपुट काम करना बहुत आसान है openssl।
certtoolकि विकल्पों में से एक संस्करण आम संचालकों ( -या --), और man certtoolवी। 3.5.8 (डेबियन), 3.5.16 (फेडोरा) के लिए है, इसके बाद का एकमात्र संस्करण ऊपर की ओर स्थिर शाखा में 3.5.17 है एक महीने पहले), GnuTLS के ऑनलाइन प्रलेखन और, वास्तव में, Ubuntu 17.10 के लिए ऑनलाइन मैन पेज (वर्तमान डेबियन के समान संस्करण) सभी का उल्लेख है: