我的公司给我发了一份智能手机证书。文件名为“3274634.p12”。该文档说“输入您的用户主体名称 (UPN) 作为登录名”,它描述了如何使用 Internet Explorer 获取此值。
我如何在 Linux (Kubuntu 13.04) 上做同样的事情?
PKCS#12 文件通常包含 X.509 证书及其关联的私钥。所有信息都存储在证书中,因此您需要先提取它:
openssl pkcs12 -in foo.p12 -out foo.pem
Run Code Online (Sandbox Code Playgroud)
(foo.pem将包含证书和私钥。)
UPN 作为特殊类型的“subjectAltName”存储在证书中。不幸的是,OpenSSL 尚不知道如何显示 UPN(以及一些其他类型的名称),因此用于检查证书的常用命令 ( openssl x509 -noout -text < foo.pem) 将不起作用。相反,您将需要低级工具。
将证书分离到自己的文件中(您也可以使用文本编辑器执行此操作):
openssl x509 < foo.pem > foo.cert
Run Code Online (Sandbox Code Playgroud)
将证书打印为 ASN.1 结构:
openssl asn1parse -i -dump < foo.cert
Run Code Online (Sandbox Code Playgroud)
找到描述 subjectAltName 扩展名的行:
742:d=4 hl=3 l= 200 cons: SEQUENCE
745:d=5 hl=2 l= 3 prim: OBJECT :X509v3 Subject Alternative Name
750:d=5 hl=3 l= 192 prim: OCTET STRING [HEX DUMP]:3081BDA036...
Run Code Online (Sandbox Code Playgroud)
asn1parse再次运行,这次告诉它深入挖掘扩展的内容(这是另一个 ASN.1 结构)——在这个例子中,值(“OCTET STRING”行)从偏移 750 开始:
openssl asn1parse -i -dump -strparse 750 < foo.cert
Run Code Online (Sandbox Code Playgroud)
最后,在转储中查找 UPN:
59:d=1 hl=2 l= 40 cons: cont [ 0 ]
61:d=2 hl=2 l= 10 prim: OBJECT :Microsoft Universal Principal Name
73:d=2 hl=2 l= 26 cons: cont [ 0 ]
75:d=3 hl=2 l= 24 prim: UTF8STRING :grawity@NULLROUTE.EU.ORG
Run Code Online (Sandbox Code Playgroud)
如果您安装了 GnuTLS 工具,则有一种更快但不那么可靠的方法。提取证书后,您可以将其提供给certtool -i < foo.cert,它甚至会打印其无法识别的名称的原始内容:
Subject Alternative Name (not critical):
otherName OID: 1.3.6.1.4.1.311.20.2.3
otherName DER: 0c1867726177697479404e554c4c524f5554452e45552e4f5247
otherName ASCII: ..grawity@NULLROUTE.EU.ORG
Run Code Online (Sandbox Code Playgroud)
寻找 OID 1.3.6.1.4.1.311.20.2.3;其后将是名称的原始内容。幸运的是,它们由单个 UTF8String 组成,因此“otherName ASCII”输出很容易理解——只需去除前两个字节(此处显示为点)。
一种更简单的方法是尝试输入您自己的 Windows 登录信息;UPN 始终采用 形式username@domain。
(有点遗憾,在我尝试过的所有工具中,几乎没有人知道如何解释如此简单和常用的——即使是专有的——名称类型。)
| 归档时间: |
|
| 查看次数: |
7877 次 |
| 最近记录: |