如何为IIS网站创建具有主题备用名称(SAN)的自签名SSL证书

Modified on: Tue, 17 Sep 2019 19:20:02 +0800

是否有人知道如何创建自签名SSL证书以用于具有主题备用名称(SAN)的IIS(7)?我需要证书才能验证主机名和IP地址,如下所示:

  • CN = MyServerName
  • IP SAN:192.168.2.2

我一直在关注的一些事情:

  • Windows SDK:makecert.exe(不支持SAN)

  • Windows API CertEnroll(Server 2008):使用PowerShell脚本(我已经能够使用它来使用IIS,但是当我将证书导出到Java密钥库(必须有)时,我得到一个错误keytool错误:'java.lang.Exception:输入不是X.509证书')

以下是使用CertEnroll的PowerShell脚本示例:http://blogs.technet.com/b/vishalagarwal/archive/2009/08/22/generating-a-certificate-self-signed-使用-的powershell和 - certenroll-interfaces.aspx

  • OpenSSL:我还没有考虑过这个......

如果我可以使用我的PowerShell脚本来创建Java使用CertEnroll API识别的证书,那将是很棒的,但是此时有效的任何内容我都会很高兴听到。

最佳答案

我找到了一种使用OpenSSL的方法。我希望使用CertEnroll,但由于它给了我Java的互操作性问题,我只想使用OpenSSL。

以下是我使用OpenSSL为主题替代名称创建IIS证书的方法。

首先创建一个OpenSSL配置文本文件:

[req] distinguished_name = req_distinguished_name x509_extensions = v3_req prompt = no [req_distinguished_name] C = US ST = VA L = SomeCity O = MyCompany OU = MyDivision CN = ANDY [v3_req] keyUsage = keyEncipherment, dataEncipherment extendedKeyUsage = serverAuth subjectAltName = @alt_names [alt_names] DNS.1 = andy DNS.2 = 192.168.2.12 IP.1 = 192.168.2.12 IP.2 = 192.167.20.1

然后运行以下OpenSSL命令:

[req]
distinguished_name  = req_distinguished_name
x509_extensions     = v3_req
prompt              = no
[req_distinguished_name]
C           = US
ST          = VA
L           = SomeCity
O           = MyCompany
OU          = MyDivision
CN          = ANDY
[v3_req] 
keyUsage           = keyEncipherment, dataEncipherment
extendedKeyUsage   = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = andy
DNS.2 = 192.168.2.12
IP.1 = 192.168.2.12
IP.2 = 192.167.20.1

这将在PFX文件中创建一个可以导入到IIS的证书。我使用PowerShell自动执行此操作:

openssl.exe req -x509 -nodes -days 730 -newkey rsa:2048 -keyout C:\cert.pem -out C:\cert.pem -config C:\PathToConfigFileAbove.txt

openssl.exe pkcs12 -export -out C:\cert.pfx -in C:\cert.pem -name "My Cert" -passout pass:mypassword

相关问答

添加新评论