Назад | Перейти на главную страницу

Создание сертификата конечного объекта с помощью OpenSSL для localhost в IIS

Я хотел бы спросить, как сгенерировать сертификат конечного объекта на основе моего собственного корневого сертификата 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 тоже, и изменил привязки для моего веб-приложения, чтобы использовать сертификат сервера, но теперь он не работает ни в Firefox, ни в Chrome.

Firefox говорит: SSL_ERROR_BAD_CERT_DOMAIN,

Chrome говорит: NET :: ERR_CERT_COMMON_NAME_INVALID.

Что я делаю не так?

Мне не удалось сгенерировать сертификат с помощью 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.cer файл из C:\Users\bug_2\Certificates\. Применить изменения и закрыть Консоль управления Microsoft.

  4. Вы можете найти свои новые сертификаты (корневой и серверный) в IIS без каких-либо дополнительных действий. Выберите свой сайт в IIS, нажмите Bindings...->Edit и выберите сертификат сервера (MyCompany). Применять изменения.

  5. Мой сайт сейчас доступен по адресу https://192.168.100.82:997 во всех веб-браузерах (например, Chrome, IE, Edge), кроме Firefox. Для исправления, запускающего Firefox, введите about:config в адресной строке и установите security.enterprise_roots.enabled к истине. Перезапустите Firefox.

Теперь мой локальный веб-сайт доступен во внутренней сети по адресу https://192.168.100.82:997.