web-dev-qa-db-ja.com

IISのローカルホスト用にOpenSSLでエンドエンティティ証明書を生成

自分の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サーバー証明書にインポートしました。

これは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_ERROR_BAD_CERT_DOMAIN

Chromeは言う:NET :: ERR_CERT_COMMON_NAME_INVALID

私は何を間違っていますか?

1
bug_2

ローカルWebサイト用のOpenSSL(イントラネットの192.168.100.82:997で利用可能)で証明書を生成できなかったため、@ Crypt32のアドバイスに従って、アプローチを変更してPowerShellを使用しました。以下の私の実用的な解決策を見つけることができます:

  1. PowerShellをadministartorとして実行します。
  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を押して、システムの信頼されたルート証明機関にルート証明書を追加し、次のように入力します:mmc、Enterキーを押します。 Microsoft Management ConsoleFile->Add or Remove Snap-insを選択し、次に新しいウィンドウでCertificates -> Add -> OKを選択します。 Certificates->Trusted Root Certification Authoritiesを展開します。 Certificatesカタログを右クリックして、Trusted Root Certification Authorities内に配置し、All Tasks->Import...を選択して、Authority.cerファイルを選択しますC:\Users\bug_2\Certificates\から。変更を適用してMicrosoft管理コンソールを閉じます。

  4. IIS)で新しい証明書(ルートとサーバー)を見つけることができます。追加の手順は必要ありません。IISでWebサイトを選択し、Bindings...->Editをクリックしてサーバー証明書(MyCompany)を選択します。変更を適用します。

  5. 私のWebサイトは、Firefoxを除くすべてのWebブラウザー(Chrome、IE、Edgeなど)のhttps://192.168.100.82:997で利用できます。 Firefoxを実行する修正プログラムについては、アドレスバーにabout:configと入力し、security.enterprise_roots.enabledをtrueに設定します。 Firefoxを再起動します

これで私のローカルWebサイトはイントラネットの https://192.168.100.82:997 で利用できます。

1
bug_2