Intereting Posts
Red Hat 7 KickStarter Правило Udev, устанавливающее сокет SocketCAN, работает корректно только при запуске вручную Cifs монтирует общий доступ к Windows Параметры переменных окружения из файла Как мне создать каталоги, названные в честь каждого месяца? Как заставить сообщения tmux оставаться дольше? Быстрый инструмент для создания миниатюрных видео галерей для командной строки какая разница bettween / sys / fs / cgroup / systemd / && / sys / fs / cgroup / xxx / Длительная загрузка на экран пароля для зашифрованного диска bash ждет процесса в подстановке процесса, даже если команда недействительна Экспорт переменных из Read Какова наилучшая практика между использованием $ {var} или $ var? Как выполнить скрипт, расположенный в том же каталоге, что и текущий скрипт? Получить среднее значение cpu за последние 5 секунд Проблема с сетью, связанная с виртуальной сетью на ubuntu 16.04

`openssl`: Альтернативное имя субъекта

Я написал этот бит кода, чтобы получить общее имя поля subject в сертификате SSL для данного домена:

$ echo -e "GET / HTTP/1.1\nEOT" | \ openssl s_client -connect google.com:443 2>&1 | \ grep subject subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=*.google.com 

Однако это только дает мне «предметную» ценность. Альтернативные CN могут быть указаны в поле «Альтернативное имя субъекта». Например:

Итак, как я могу получить значение поля альтернативного имени объекта в Bash?

Это может не работать при любых обстоятельствах, но попробуйте

 openssl s_client -connect google.com:443 2> & 1 |  openssl x509 -text |  grep DNS

То, что написал @ stuart-p-bentley, заставило меня задуматься, и я придумал этот способ получить список с разделителями-запятыми «Subject Alternative Names» с помощью openssl , awk и tr . Строка sed в его ответе не работает на FreeBSD на пример.

 openssl s_client -connect google.com:443 2>&1 | openssl x509 -text | awk '/X509v3 Subject Alternative Name/ {getline;gsub(/ /, "", $0); print}' | tr -d "DNS:" 

Вот что вы получаете с google.com

 *.google.com,*.android.com,*.appengine.google.com,*.cloud.google.com,*.google-analytics.com,*.google.ca,*.google.cl,*.google.co.in,*.google.co.jp,*.google.co.uk,*.google.com.ar,*.google.com.au,*.google.com.br,*.google.com.co,*.google.com.mx,*.google.com.tr,*.google.com.vn,*.google.de,*.google.es,*.google.fr,*.google.hu,*.google.it,*.google.nl,*.google.pl,*.google.pt,*.googleadapis.com,*.googleapis.cn,*.googlecommerce.com,*.googlevideo.com,*.gstatic.cn,*.gstatic.com,*.gvt1.com,*.gvt2.com,*.urchin.com,*.url.google.com,*.youtube-nocookie.com,*.youtube.com,*.youtubeeducation.com,*.ytimg.com,android.com,g.co,goo.gl,google-analytics.com,google.com,googlecommerce.com,urchin.com,youtu.be,youtube.com,youtubeeducation.com 

Вот версия, которая будет работать при любых обстоятельствах (и полосах ведущего пространства):

 openssl s_client -connect google.com:443 2>&1 | openssl x509 -text | sed -nr '/^ {12}X509v3 Subject Alternative Name/{n;s/^ *//p}' 

Также используйте переключатель

 -certopt no_pubkey,no_sigdump,no_validity,no_serial,no_header,no_issuer,no_version,no_aux,no_signame,no_subject