使用 OpenSSL 为 IIS 上的本地主机生成最终实体证书

使用 OpenSSL 为 IIS 上的本地主机生成最终实体证书

我想问如何根据我自己的 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 受信任的根证书颁发机构并将 pfx 文件放入IIS 服务器证书

它可以与 Chrome、IE 和 Edge 很好地兼容,但 Firefox 报告我的证书存在问题:MOZILLA_PKIX_ERROR_CA_CERT_USED_AS_END_ENTITY

我谷歌了一下,发现我应该拥有由我的 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 错误代码:BAD_CERT_DOMAIN

Chrome 说:NET::ERR_CERT_COMMON_NAME_INVALID

我做错了什么?

答案1

我无法使用 OpenSSL 为本地网站生成证书(可在内联网 192.168.100.82:997 上使用),因此 - 根据 @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
    
  3. 按 WIN+R 将根证书添加到系统中的受信任的根证书颁发机构,输入:多媒体计算机,按 ENTER。在Microsoft 管理控制台选择File->Add or Remove Snap-ins,然后在新窗口中Certificates -> Add -> OK展开Certificates->Trusted Root Certification Authorities。右键单击证书目录放在里面受信任的根证书颁发机构并选择All Tasks->Import...文件Authority.cerC:\Users\bug_2\Certificates\应用更改并关闭Microsoft 管理控制台

  4. 您无需任何额外步骤即可在 IIS 中找到新证书(根证书和服务器证书)。在 IIS 中选择您的网站,单击Bindings...->Edit并选择服务器证书(MyCompany)。应用更改。

  5. 我的网站现在可在https://192.168.100.82:997除 Firefox 之外的所有网络浏览器(如 Chrome、IE、Edge)上使用。要修复运行 Firefox 的问题,请about:config在地址栏中输入并设置security.enterprise_roots.enabled为 true。重启 Firefox

现在我的本地网站可以在内部网中访问https://192.168.100.82:997

相关内容