如何使用
makecert
和“主题备用名称”字段创建证书?
您可以使用 -eku 选项添加 some 字段,例如“增强密钥使用”,我已经尝试过 -san 选项,但 makecert 不喜欢它。
这是一个自签名证书,因此任何使用 IIS 创建发送到 CA 的内容的方法都是不合适的。
更简单的方法是使用 New-SelfSignedCertificate PowerShell commandlet,它默认包含 SAN。您可以使用单个命令创建证书并将其添加到存储中。
New-SelfSignedCertificate -DnsName localhost -CertStoreLocation cert:\LocalMachine\My
请注意,您需要以管理员身份运行 PowerShell。
Makecert 似乎不支持 SAN,因此我创建了一个包含 SAN 的证书,以便使用 OpenSSL 与 IIS 一起使用。查看我的博客文章:
IIS 7 提供了一些易于使用的向导来创建 SSL 证书, 但不是很强大。我需要做的是创建 SSL 包含 x.509 V3 扩展的证书,即 subject 替代名称,又名 SAN。 SAN 的作用是允许网站 用于验证多个 URL 域传入请求的证书 姓名。当 Web 服务器运行 Web 时,这一点非常重要 服务(例如 WCF 服务)以及其他 Web 服务连接到时 它们通过 SSL 连接与面向服务的架构一样。 除非向 Web 服务添加特殊代码来覆盖 默认 SSL 验证处理程序例程,通用名称 (CN) 证书必须与传入请求 URL 域匹配。所以如果 请求是使用 FQDN 发出的,证书的 FQDN 必须为 CN 或 SAN、IP 地址或主机名都会导致 SSL 验证错误,连接将失败。
SAN 来救援……SAN 支持 DNS 名称和 IP 等 地址。因此,通过使用服务器 FQDN 的 SAN 创建证书 和 IP 地址,它增加了其他 Web 服务可以使用的方式 连接。
有很多可以生成证书的工具: makecert.exe、keytool.exe (java)、selfssl.exe 和 openssl.exe。在 此外,从 Windows Vista 和 Server 2008 开始 Microsoft 添加了 CertEnroll API,也可以通过编程方式创建证书 通过 COM 接口。
OpenSSL 最终完成了我需要它做的事情。过程是 相当简单。
- 构建 OpenSSL 配置文件。
[req] 杰出名称 = 要求杰出名称 x509_extensions = v3_req 提示 = no [req_distinguished_name] C = US ST = VAL = 某处 O = MyOrg OU = MyOU CN = MyServerName [v3_req] keyUsage = 密钥加密、数据加密扩展密钥使用 = serverAuth subjectAltName = @alt_names [alt_names] DNS.1 = MyServerName DNS.2 = 10.0.1.34 IP.1 = 10.0.1.34 IP.2 = 192.167.20.1
- 使用 OpenSSL 创建 x509 请求
openssl.exe req -x509 -nodes -days 730 -newkey rsa:2048 -keyout C