Как я могу создать самоподписанный сертификат для localhost?

Я прошел шаги, подробно описанные в разделе Как вы используете https / SSL на локальном хосте? но это устанавливает самоподписанный сертификат для моего имени машины, и при просмотре его через https://localhost/ я получаю предупреждение IE.

Есть ли способ создать самозаверяющий сертификат для "localhost", чтобы избежать этого предупреждения?

15 ответов

Поскольку этот вопрос помечен как IIS и я не могу найти хороший ответ о том, как получить доверенный сертификат, я дам свои 2 цента об этом:

Сначала используйте команду из @AuriRahimzadeh в PowerShell от имени администратора:

New-SelfSignedCertificate -DnsName "localhost" -CertStoreLocation "cert:\LocalMachine\My"

Это хорошо, но сертификат не является доверенным и приведет к следующей ошибке. Это потому, что он не установлен в Trusted Root Certification Authorities,

Решите это, начав mmc.exe,

Затем перейдите к:

Файл -> Добавить или удалить оснастку -> Сертификаты -> Добавить -> Учетная запись компьютера -> Локальный компьютер

Разверните Personal папку, и вы увидите свой localhost сертификат:

Скопируйте это в Trusted Root Certification Authorities - Certificates

Последний шаг - открыть Internet Information Services (IIS) Manager или просто inetmgr.exe, Оттуда перейдите на свой сайт, выберите Bindings... а также Add... или же Edit..., Задавать https и выберите свой сертификат из выпадающего списка.

Вашему сертификату теперь доверяют:

Хотя этот пост является пометкой для Windows, это актуальный вопрос для OS X, ответы на который я не видел в других местах. Вот шаги, чтобы создать самоподписанный сертификат для localhost на OS X:

# Use 'localhost' for the 'Common name'
openssl req -x509 -sha256 -nodes -newkey rsa:2048 -days 365 -keyout localhost.key -out localhost.crt

# Add the cert to your keychain
open localhost.crt

В Keychain Access, дважды щелкните этот новый сертификат localhost. Разверните стрелку рядом с "Доверие" и выберите "Всегда доверять". Chrome и Safari теперь должны доверять этому сертификату. Например, если вы хотите использовать этот сертификат с node.js:

var options = {
    key: fs.readFileSync('/path/to/localhost.key').toString(),
    cert: fs.readFileSync('/path/to/localhost.crt').toString(),
    ciphers: 'ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES256-SHA384',
    honorCipherOrder: true,
    secureProtocol: 'TLSv1_2_method'
};

var server = require('https').createServer(options, app);

Вы можете использовать PowerShell для создания самозаверяющего сертификата с помощью командлета new-selfsignedcertificate:

New-SelfSignedCertificate -DnsName "localhost" -CertStoreLocation "cert:\LocalMachine\My"

Примечание: makecert.exe устарела.

Ссылка на командлет: https://technet.microsoft.com/itpro/powershell/windows/pkiclient/new-selfsignedcertificate

Потратив достаточно много времени на эту проблему, я обнаружил, что всякий раз, когда я следовал советам использовать IIS для создания самозаверяющего сертификата, я обнаружил, что выданный и выданный был неправильным. SelfSSL.exe был ключом к решению этой проблемы. Следующий веб-сайт не только предоставил пошаговый подход к созданию самозаверяющих сертификатов, но также решил проблему "Выдан и выдан". Вот лучшее решение, которое я нашел для создания самозаверяющих сертификатов. Если вы хотите увидеть ту же инструкцию в видео форме, нажмите здесь.

Пример использования SelfSSL будет выглядеть примерно так:

SelfSSL /N:CN=YourWebsite.com / V: 1000 / S: 2

SelfSSL /? предоставит список параметров с пояснениями.

Если вы пытаетесь создать самозаверяющий сертификат, который позволяет вам идти http://localhost/mysiteТогда вот способ создать его

makecert -r -n "CN=localhost" -b 01/01/2000 -e 01/01/2099 -eku 1.3.6.1.5.5.7.3.1 -sv localhost.pvk localhost.cer
cert2spc localhost.cer localhost.spc
pvk2pfx -pvk localhost.pvk -spc localhost.spc -pfx localhost.pfx

От http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/32bc5a61-1f7b-4545-a514-a11652f11200

Я бы порекомендовал инструмент Pluralsight для создания самозаверяющих сертификатов: http://blog.pluralsight.com/selfcert-create-a-self-signed-certificate-interactively-gui-or-programmatically-in-net

Создайте свой сертификат в формате.pfx и импортируйте его в IIS. И добавьте его в качестве доверенного корневого центра сертификации.

Самый быстрый способ сгенерировать сертификат localhost.

      openssl req -x509 -out localhost.crt -keyout localhost.key \
  -newkey rsa:2048 -nodes -sha256 \
  -subj '/CN=localhost' -extensions EXT -config <( \
   printf "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")

И да и нет. Самоподписанные сертификаты приводят к появлению этого предупреждающего сообщения, поскольку сертификат не был подписан доверенным центром сертификации. Есть несколько вариантов удаления этого предупреждения на вашем локальном компьютере. Посмотрите ответы на этот вопрос с самым высоким рейтингом для деталей:

Что мне нужно сделать, чтобы Internet Explorer 8 принял самозаверяющий сертификат?

Надеюсь это поможет!


РЕДАКТИРОВАТЬ:

Извините, я изначально не знал, что вы были привязаны к localhost. Вы можете попытаться следовать указаниям по ссылке ниже, чтобы "Создать самозаверяющий сертификат с правильным общим именем".

http://www.sslshopper.com/article-how-to-create-a-self-signed-certificate-in-iis-7.html

В LAN (локальной сети) у нас есть серверный компьютер, здесь с именем xhost, работающий под управлением Windows 10, IIS активирован как WebServer. Мы должны получить доступ к этому компьютеру через браузер, такой как Google Chrome, не только с localhost через https: // localhost / с самого сервера, но и с других хостов в локальной сети с URL https: // xhost /:

      
https://localhost/
https://xhost/
https://xhost.local/
...

При таком способе доступа у нас здесь не полное доменное имя, а только имя локального компьютера xhost.

Или из WAN:

      
https://dev.example.org/
...

Вы должны заменить xhost на свое настоящее имя локального компьютера.

Ни одно из вышеперечисленных решений не может нас удовлетворить. После нескольких дней попыток мы приняли решение openssl.exe. Мы используем 2 сертификата - сертификат CA (самосертификат центра сертификации) RootCA.crt и xhost.crt, сертифицированный первым. Мы используем PowerShell.

1. Создайте безопасный каталог и перейдите в него:

      cd C:\users\so\crt

2. Создайте RootCA.pem, RootCA.key и RootCA.crt как самосертифицированный центр сертификации:

      
openssl req -x509 -nodes -new -sha256 -days 10240 -newkey rsa:2048 -keyout RootCA.key -out RootCA.pem -subj "/C=ZA/CN=RootCA-CA"
openssl x509 -outform pem -in RootCA.pem -out RootCA.crt

3. сделать запрос на сертификацию: xhost.key, xhost.csr:

      C: Country
ST: State
L: locality (city)
O: Organization Name
Organization Unit
CN: Common Name

    
      
openssl req -new -nodes -newkey rsa:2048 -keyout xhost.key -out xhost.csr -subj "/C=ZA/ST=FREE STATE/L=Golden Gate Highlands National Park/O=WWF4ME/OU=xhost.home/CN=xhost.local"

4. получить сертификат xhost.crt от RootCA.pem:

      
openssl x509 -req -sha256 -days 1024 -in xhost.csr -CA RootCA.pem -CAkey RootCA.key -CAcreateserial -extfile domains.ext -out xhost.crt

с файлом extfile domains.ext, определяющим множество защищенных способов доступа к веб-сайту сервера:

      authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
DNS.2 = xhost
DNS.3 = xhost.local
DNS.4 = dev.example.org
DNS.5 = 192.168.1.2

5. Сделайте xhost.pfx PKCS #12,

объединить частный xhost.key и сертификат xhost.crt, разрешив импорт в iis. На этом шаге запрашивается пароль, пожалуйста, оставьте его пустым, нажав клавишу [RETURN] (без пароля):

      
openssl pkcs12 -export -out xhost.pfx -inkey xhost.key -in xhost.crt

6. импортировать xhost.pfx в iis10

установлен на компьютере xhost (здесь localhost). и перезапустите службу IIS.

      IIS10 Gestionnaire des services Internet (IIS) (%windir%\system32\inetsrv\InetMgr.exe)

7. Свяжите ssl с сертификатом xhost.local на порту 443.

Перезапустите службу IIS.

8. Импортируйте RootCA.crt в доверенные корневые центры сертификации.

через Google Chrome на любом компьютере, который будет заходить на сайт https: // xhost /.

\ Google Chrome /… / Настройки / [Дополнительно] / Конфиденциальность и безопасность / Безопасность / Управление сертификатами

Импортировать RootCA.crt

Браузер покажет это действительное дерево сертификатов:

      
RootCA-CA
  |_____ xhost.local

Ошибка сертификата не появится через LAN, даже через WAN через https://dev.example.org.

Вот весь файл сценария Powershell socrt.ps1 для генерации всех необходимых файлов сертификатов из нуля:

      
#
# Generate:
#   RootCA.pem, RootCA.key RootCA.crt
#
#   xhost.key xhost.csr xhost.crt
#   xhost.pfx
#
# created  15-EEC-2020
# modified 15-DEC-2020
#
#
# change to a safe directory:
#

cd C:\users\so\crt

#
# Generate RootCA.pem, RootCA.key & RootCA.crt as Certification Authority:
#
openssl req -x509 -nodes -new -sha256 -days 10240 -newkey rsa:2048 -keyout RootCA.key -out RootCA.pem -subj "/C=ZA/CN=RootCA-CA"
openssl x509 -outform pem -in RootCA.pem -out RootCA.crt

#
# get RootCA.pfx: permitting to import into iis10: not required.
#
#openssl pkcs12 -export -out RootCA.pfx -inkey RootCA.key -in RootCA.crt

#
# get xhost.key xhost.csr:
#   C: Country
#   ST: State
#   L: locality (city)
#   O: Organization Name
#   OU: Organization Unit
#   CN: Common Name
#
openssl req -new -nodes -newkey rsa:2048 -keyout xhost.key -out xhost.csr -subj "/C=ZA/ST=FREE STATE/L=Golden Gate Highlands National Park/O=WWF4ME/OU=xhost.home/CN=xhost.local"

#
# get xhost.crt certified by RootCA.pem:
# to show content:
#   openssl x509 -in xhost.crt -noout -text
#
openssl x509 -req -sha256 -days 1024 -in xhost.csr -CA RootCA.pem -CAkey RootCA.key -CAcreateserial -extfile domains.ext -out xhost.crt

#
# get xhost.pfx, permitting to import into iis:
#
openssl pkcs12 -export -out xhost.pfx -inkey xhost.key -in xhost.crt

#
# import xhost.pfx in iis10 installed in xhost computer (here localhost).
#

Чтобы установить openSSL для Windows, посетите https://slproweb.com/products/Win32OpenSSL.html

Вот что я сделал, чтобы получить действительный сертификат для локального хоста в Windows:

  1. Загрузите исполняемый файл mkcert (https://github.com/FiloSottile/mkcert/releases) и переименуйте его в mkcert.exe.
  2. Запустите «mkcert-install»
  3. Откройте диспетчер сертификатов Windows (certmgr.msc)
  4. Щелкните правой кнопкой мыши «Доверенные корневые центры сертификации» -> «Импорт».
  5. Импортировать корневой сертификат (rootCA.pem) из C:\Users[имя пользователя]\AppData\Local\mkcert\
  6. Создайте сертификат *.p12 для указанных доменов: "mkcert -pkcs12 [имя1] [имя2]"
  7. Переименуйте сертификат *.p12 в *.pfx
  8. В IIS -> Сертификаты сервера -> Импорт (pfx) в группу «Личные» [пароль по умолчанию: «changeit»]
  9. Назначить сертификат веб-сайту по умолчанию (привязка -> https (443) -> изменить -> сертификат SSL)

Вы можете попробовать mkcert.

macos: brew install mkcert

Если вы используете Visual Studio, здесь описан простой способ настроить и включить SSL с помощью IIS Express.

Самозаверяющий сертификат можно создать одной строкой с помощью сценария PowerShell с помощью приведенного ниже командлета.

Командлет: New-SelfSignedCertificate

Пример: New-SelfSignedCertificate -FriendlyName USProd_Certif -DnsName PRODCD-USCertificate -CertStoreLocation Cert: \ LocalMachine \ My

Пример: http://dotnet-helpers.com/powershell/create-custom-name-self-signed-certificate-using-powershell/

Я сделал веб-инструмент, который генерирует самозаверяющие сертификаты SSL ( http://codeassistant.net/Certificate). По умолчанию он генерирует сертификат для "localhost". Может быть, это то, что вы ищете.

Отказ от ответственности: я "работаю" там.

Решение для Windows 10

Ни один из вышеперечисленных не работал для меня, кроме этого:

1. Выполните следующие действия

      $cert = New-SelfSignedCertificate -Subject local.YourDomain -DnsName local.yourdomain.co.uk

затем

      Format-List -Property *

или шаги в разделе «Создание сертификата с одним субъектом» здесь: https://adamtheautomator.com/new-selfsignedcertificate/

Вы также можете попробовать SAN ( создание сертификата альтернативного имени субъекта (SAN) ).

2. Откройте ммк

Откройте поиск Windows и введите mmc

затем выполните следующие действия:

Откройте «Файл» > «Добавить/удалить оснастку» , выберите «Сертификаты» и нажмите «Добавить» . Выберите учетную запись компьютера , нажмите «Далее» , а затем «Готово» .

3. Скопируйте сертификат из Личного в Доверенный.

Разверните Personal в разделе Certificates в mmc

Скопируйте новый сертификат из Личного в Доверенные корневые центры сертификации.

4. Выберите новый сертификат для привязки вашего домена в IIS.

5. Перезапустите домен/сайт

Другие вопросы по тегам