Iis

如何為 IIS 網站創建具有主題備用名稱 (SAN) 的自簽名 SSL 證書

  • May 2, 2021

有誰知道如何創建一個自簽名 SSL 證書以與具有主題備用名稱 (SAN) 的 IIS (7) 一起使用?我需要證書才能驗證主機名和 IP 地址,如下所示:

  • CN=我的伺服器名稱
  • IP SAN:192.168.2.2

我一直在看的一些東西:

  • Windows SDK:makecert.exe(不支持 SAN)
  • Windows API CertEnroll(Server 2008):使用 PowerShell 腳本(我已經能夠讓它與 IIS 一起使用,但是當我將證書導出到 Java 密鑰庫(必須具有)時,我收到一個錯誤 keytool 錯誤:‘java.lang .例外:輸入不是 X.509 證書’)

以下是使用 CertEnroll 的 PowerShell 腳本範例:http: //blogs.technet.com/b/vishalagarwal/archive/2009/08/22/generating-a-certificate-self-signed-using-powershell-and-certenroll-介面.aspx

  • OpenSSL:我還沒有研究過這個……

如果我可以讓我的 PowerShell 腳本使用 CertEnroll API 創建一個 Java 可以辨識的證書,那就太好了,但是在這一點上任何有效的東西我都會很高興聽到。

我找到了一種使用 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 命令:

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

這將在可以導入 IIS 的 PFX 文件中為您創建一個證書。我用powershell自動化了這個,如下所示:

   # Get the certificate from the PFX file.
$pfxcert = new-object system.security.cryptography.x509certificates.x509certificate2
$pfxcert.Import(
   "C:\cert.pfx",
   "mypassword",
   [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::MachineKeySet -bor `
   [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable
)

   # Add the certificate to the windows stores.
Get-Item -Path cert:\LocalMachine\My, cert:\LocalMachine\root | ForEach-Object {
   $store = $_
   $store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite)
   $store.Add($pfxcert)
   $store.Close()
}

Add-PSSnapin -Name WebAdministration # IIS 7 Powershell module.
Push-Location -Path IIS:\SslBindings

   # Create new IIS SSL bindings.
Get-Item -Path "cert:\LocalMachine\My\$($pfxcert.Thumbprint)" | New-Item "0.0.0.0!443"

引用自:https://serverfault.com/questions/301655