Answers:
如果已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/'
了CN后面的其他详细信息,只是用来获取域名。对于有效的CN,它不是非常严格的匹配,但是在大多数情况下,它可以工作,您可能会更加懈怠并用来代替[a-zA-Z0-9\.\-]
,[^/]
但我不确定那将始终有效。
\*
到什么@flungo用于支持通配符域:sed -e 's/^subject.*CN=\([a-zA-Z0-9\.\-\*]*\).*$/\1/'
([^/]
在我的情况下工作,虽然)
sed
如果证书具有在通用名称(CN)之后指定的相对专有名称(RDN),例如OU(OrganizationalUnit)或C(Country),则上述建议的命令将无效。解决这种情况的一种方法是增加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:
接近顶部场(小心也有一个CN值的Issuer:
字段)。
X.509 Certificate Information:
Version: 3
Serial Number (hex): 01
Issuer: [...] CN=unixandlinux.ex <- Not this one.
Validity: ...
Subject: CN=goldilocks
certtool
是gnutls的一部分,如果未安装,则进行搜索。GnuTLS比IMO的OpenSSL更好。
gnutls-certtool
通过brew install gnutls
gnutls-bin
我找到了上面的答案,并发现它非常有用,但是我也发现certtool
命令语法(今天在Ubuntu Linux上)与goldilocks所描述的明显不同,输出也是如此。因此,我认为最好用“今天的版本”更新该出色的答案。
根据,"i"
选项(现在?)代表“导入” man certtool
,因此正确的命令似乎是"d"
“显示”。因此,此命令:
certtool d myfoo.crt
(文件扩展我的情况正好是.crt
不是.pem
...这是不相关的。)
...产生的输出在相关部分看起来像这样:
Common Name : Foobar
毫无疑问,金凤花是正确:certtool
输出是多少比更简单容易使用,openssl
在这种情况下。
certtool
选项的版本,没有普通的运算符(-
或--
),而man certtool
对于3.5.8版(debian),3.5.16版(fedora,上游稳定分支之后的唯一版本是3.5.17版)一个月前)的GnuTLS的在线文档和,的确,为Ubuntu 17.10联机手册页(版本相同电流的Debian)都指: