Ssl-Certificate

使用 OpenSSL 為 IIS 上的 localhost 生成最終實體證書

  • February 18, 2020

請問如何根據自己的CA根證書生成端實體證書?我以這種方式生成了根 CA:

openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes \
   -keyout example.key -out example.crt -subj /CN=MyCompany \
   -addext subjectAltName=IP:192.168.100.82

openssl pkcs12 -export -out cert.pfx -inkey example.key -in example.crt

我已將 cer 文件導入Windows Trusted Root Certification Authorities並將 pfx 文件導入IIS Server Certificates

它適用於 Chrome、IE 和 Edge,但 Firefox 報告我的證書存在問題:MOZILLA_PKIX_ERROR_CA_CERT_USED_AS_END_ENTITY

我用Google搜尋了它,我了解到我應該擁有由我的 CA 根證書籤名的最終實體證書。我試圖生成最終實體證書:

openssl genrsa -out server.key 4096
openssl req -new -key server.key -out server.csr -subj /CN=MyCompanyEE -addext subjectAltName=IP:192.168.100.82
openssl x509 -req -in server.csr -CA cert.pem -CAkey example.key -CAcreateserial -out server.crt -days 3650 -sha256
openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt

OpenSSL 響應:

Signature ok
subject=CN = MyCompanyEE
Getting CA Private Key

我也已將 server.pfx 導入IIS 伺服器證書,並將我的 Web 應用程序的綁定更改為使用伺服器證書,但現在它在 Firefox 或 Chrome 中都不起作用。

Firefox 說:SSL_ERROR_BAD_CERT_DOMAIN

Chrome 說:NET::ERR_CERT_COMMON_NAME_INVALID

我做錯了什麼?

我無法使用 OpenSSL 為本地網站生成證書(可在 192.168.100.82:997 的 Intranet 中獲得)所以 - 根據@Crypt32 的建議 - 我改變了方法並使用了 PowerShell。您可以在下面找到我的工作解決方案:

  1. 以管理員身份執行 PowerShell 。
  2. 使用以下程式碼生成自簽名根授權 (MyCompany CA) 和伺服器 (MyCompany) 證書:
$authorityCert = New-SelfSignedCertificate `
-Subject "CN=MyCompany CA,OU=IT,O=MyCompany Certificate Authority,C=US" `
-KeyAlgorithm RSA `
-KeyLength 4096 `
-KeyUsage CertSign, CRLSign, DigitalSignature, KeyEncipherment, DataEncipherment `
-KeyExportPolicy Exportable `
-NotBefore (Get-Date) `
-NotAfter (Get-Date).AddYears(10) `
-HashAlgorithm SHA256 `
-CertStoreLocation "Cert:\LocalMachine\My" `
-FriendlyName "MyCompany CA" `
-TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.1", "2.5.29.19={critical}{text}ca=1")

$devCert = New-SelfSignedCertificate `
-Subject "CN=MyCompany,OU=App Test,O=MyCompany,C=US" `
-KeyAlgorithm RSA `
-KeyLength 4096 `
-KeyUsage DigitalSignature, KeyEncipherment, DataEncipherment `
-KeyExportPolicy Exportable `
-NotBefore (Get-Date) `
-NotAfter (Get-Date).AddYears(10) `
-HashAlgorithm SHA256 `
-CertStoreLocation "Cert:\LocalMachine\My" `
-FriendlyName "MyCompany" `
-TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.1", "2.5.29.17={text}IPAddress=192.168.100.82") `
-Signer $authorityCert

$directory = "C:\Users\bug_2\Certificates\"
if(!(test-path $directory))
{
 New-Item -ItemType Directory -Force -Path $directory
}
$authorityCertPath = 'Cert:\LocalMachine\My\' + ($authorityCert.ThumbPrint)
$authorityCertFilename = $directory + "Authority.cer"
Export-Certificate -Cert $authorityCertPath -FilePath $authorityCertFilename
$devCertPath = 'Cert:\LocalMachine\My\' + ($devCert.ThumbPrint)
$devCertFilename = $directory + "Dev.cer"
Export-Certificate -Cert $devCertPath -FilePath $devCertFilename
  1. 按 WIN+R 將根證書添加到系統中的受信任的根證書頒發機構,鍵入:mmc,按 ENTER。在Microsoft 管理控制台中選擇File->Add or Remove Snap-ins,然後在新視窗中選擇Certificates -> Add -> OK. 展開Certificates->Trusted Root Certification Authorities。右鍵點擊放置在受信任的根證書頒發機構內的**證書目錄,然後選擇並從中選擇文件。應用更改並關閉Microsoft 管理控制台All Tasks->Import...``Authority.cer``C:\Users\bug_2\Certificates\
  2. 您無需任何額外步驟即可在 IIS 中找到您的新證書(根證書和伺服器證書)。在 IIS 中選擇您的網站,點擊Bindings...->Edit並選擇伺服器證書 (MyCompany)。應用更改。
  3. 我的網站現在可以在https://192.168.100.82:997除 Firefox 之外的所有網路瀏覽器(如 Chrome、IE、Edge)上使用。對於執行 Firefox 的修復,about:config在地址欄中輸入並設置security.enterprise_roots.enabled為 true。重啟火狐

現在我的本地網站在https://192.168.100.82:997的 Intranet 中可用。

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