certificate - 使用创建它的用户身份标记 x509 证书的正确方法?
问题描述
我有一个处理证书签名请求以制作证书的 Windows 服务。它还应 Windows 用户的要求制作自签名证书(证书颁发机构)。在任何一种情况下,我都想将请求制作证书的用户的用户帐户名称(NT 帐户字符串,如“域\用户”)放入完成的证书中,以便直接跟踪谁创建了什么。
在证书中粘贴用户帐户字符串的最佳位置在哪里?首先想到的是自定义扩展。这样做最有意义吗?或者也许是该主题的替代领域?我不知道这是否是一种普遍的做法。
解决方案
如果您不承诺使用 NT Account 格式,则可以考虑emailAddress
证书中的属性subjectName
。只需更改Test\Bloggs
为bloggs@test
.
还有pseudonym
可以使用的属性。但是,虽然 OpenSSL 正确显示了此属性的名称,但 Windows 将其显示为2.5.4.65
可能不是您想要的名称。
理论上,subjectAltName
扩展也可以用来存储它。有一个otherName
领域,可以使用。但是,OpenSSL 显示的证书如下:
X509v3 Subject Alternative Name:
DNS:test.example.org, othername:<unsupported>
当 Windows 显示时:
DNS Name=test.example.org
Other Name:
1.3.6.1.4.1.1=0c 0b 54 45 53 54 5c 42 6c 6f 67 67 73
显然,两者都对你没有好处。
因此,要务实——要么使用pseudonym
Windows 显示它的方式,要么更加务实,劫持 OrgnaizationalUnitName (OU) 属性并使用它。您可以拥有多个 OU,因此无需牺牲您可能拥有的任何当前 OU。Digicert、Microsoft 和 Verisign(毫无疑问,还有其他)使用 OU 作为附加文本字段而不会造成任何损害。它可能不是 100% 符合标准,但它可以工作。
如果您确实走后一条路线并且您正在使用名称限制,请确保在创建您的签名请求时这个额外的 OU 在列表中的第一位。也就是说,它不会破坏名称约束的顺序。
推荐阅读
- git - 如何恢复二进制文件上的 git 编码更改
- reactjs - React:SVG 通过 id 或 class 动态添加 CSS
- .net - 使用 bash 中的 find 函数在子文件夹上迭代运行程序
- typescript - 如何在打字稿中搜索类型
- angular - 路由在已部署项目的新窗口中不起作用
- flutter - 处理时调整图像大小非常慢
- java - 如何在 JavaFX 中的 Controller 之间传递信息?
- javascript - 如何在外部 JS 文件中使用 HTML 文件变量
- c - C中的Execv函数不读取作为参数传入的变量
- javascript - 在 ckeditor5 中为 mathjax 模型创建额外的内容