Получение Chrome для принятия самозаверяющего сертификата localhost

Я создал самозаверяющий сертификат SSL для локального хоста CN. Firefox принимает этот сертификат после первоначальной жалобы на него, как и ожидалось. Однако Chrome и IE отказываются принять его даже после добавления сертификата в хранилище сертификатов системы в разделе "Доверенные корни". Даже если сертификат указан как правильно установленный, когда я нажимаю "Просмотр информации о сертификате" во всплывающем окне HTTPS в Chrome, он по-прежнему настаивает на том, что сертификат нельзя доверять.

Что я должен сделать, чтобы Chrome принял сертификат и прекратил жаловаться на него?

53 ответа

НЕ ДЛЯ ПРОД

Просто вставьте это в свой хром:

chrome://flags/#allow-insecure-localhost

Вы должны увидеть выделенный текст, говорящий: Разрешить недействительные сертификаты для ресурсов, загруженных с локального хоста

Нажмите Enable,

Это сработало для меня:

  1. Используя Chrome, перейдите на страницу на вашем сервере по протоколу HTTPS и продолжайте проходить мимо красной страницы с предупреждением (если вы этого еще не сделали).
  2. Открыть Chrome Settings > Show advanced settings > HTTPS/SSL > Manage Certificates,
  3. Нажмите на Authorities и перейдите вниз, чтобы найти свой сертификат под названием организации, которое вы дали этому сертификату.
  4. Выберите его, нажмите "Изменить" (ПРИМЕЧАНИЕ. В последних версиях Chrome теперь кнопка "Дополнительно" вместо "Изменить"), установите все флажки и нажмите "ОК". Возможно, вам придется перезапустить Chrome.

Вы должны получить хороший зеленый замок на своих страницах сейчас.

РЕДАКТИРОВАТЬ: я попробовал это снова на новом компьютере, и сертификат не появился в окне Управление сертификатами, просто продолжая со страницы красного ненадежного сертификата. Я должен был сделать следующее:

  1. На странице с ненадежным сертификатом (https:// зачеркнуто красным), нажмите на замок> Информация о сертификате. ПРИМЕЧАНИЕ: на более новых версиях Chrome, вы должны открыть Developer Tools > Securityи выберите View certificate,
  2. Нажмите на Details tab > Export, выберите PKCS #7, single certificate как формат файла.
  3. Затем следуйте моим оригинальным инструкциям, чтобы перейти на страницу управления сертификатами. Нажмите на Authorities tab > Import и выберите файл, в который вы экспортировали сертификат, и обязательно выберите PKCS #7, single certificate как тип файла.
  4. Если запрашивается хранилище сертификатов, выберите Trusted Root Certificate Authorities.
  5. Установите все флажки и нажмите ОК. Перезапустите Chrome.

2020-05-22: всего 5 opensslкоманды, вы можете это сделать.

Пожалуйста, не меняйте настройки безопасности вашего браузера.

С помощью следующего кода вы можете (1) стать своим собственным ЦС, (2) затем подписать свой сертификат SSL как ЦС. (3) Затем импортируйте сертификат CA (не сертификат SSL, который отправляется на ваш сервер) в Chrome/Chromium. (Да, это работает даже в Linux.)

######################
# Become a Certificate Authority
######################

# Generate private key
openssl genrsa -des3 -out myCA.key 2048
# Generate root certificate
openssl req -x509 -new -nodes -key myCA.key -sha256 -days 825 -out myCA.pem

######################
# Create CA-signed certs
######################

NAME=mydomain.com # Use your own domain name
# Generate a private key
openssl genrsa -out $NAME.key 2048
# Create a certificate-signing request
openssl req -new -key $NAME.key -out $NAME.csr
# Create a config file for the extensions
>$NAME.ext cat <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = $NAME # Be sure to include the domain name here because Common Name is not so commonly honoured by itself
DNS.2 = bar.$NAME # Optionally, add additional domains (I've added a subdomain here)
IP.1 = 192.168.0.13 # Optionally, add an IP address (if the connection which you have planned requires it)
EOF
# Create the signed certificate
openssl x509 -req -in $NAME.csr -CA myCA.pem -CAkey myCA.key -CAcreateserial \
-out $NAME.crt -days 825 -sha256 -extfile $NAME.ext

Резюмируем:

  1. Стать центром сертификации
  2. Подпишите свой сертификат, используя свой сертификат CA + ключ
  3. Импортировать myCA.pem в качестве центра в настройках Chrome (Настройки> Управление сертификатами> Центры> Импорт)
  4. Использовать .crt а также .key файлы на вашем сервере

Дополнительные шаги (по крайней мере, для Mac):

  1. Импортируйте сертификат CA в "Файл> Импортировать файл", затем также найдите его в списке, щелкните его правой кнопкой мыши, разверните "> Доверять" и выберите "Всегда".
  2. Добавить extendedKeyUsage=serverAuth,clientAuth ниже basicConstraints=CA:FALSE, и убедитесь, что вы установили для "CommonName" то же самое, что и $NAME когда он просит настройки

Вы можете проверить свою работу

openssl verify -CAfile myCA.pem -verify_hostname bar.mydomain.com mydomain.com.crt

Нажмите в любом месте на странице и введите BYPASS_SEQUENCE.

"thisisunsafe"это BYPASS_SEQUENCE для Chrome версии 65

"badidea"Chrome версии 62 - 64.

"danger"раньше работал в более ранних версиях Chrome

Вам не нужно искать поле ввода, просто введите его. Это странно, но это работает.

Я попробовал это на Mac High Sierra.

Чтобы перепроверить, если они изменили это снова, перейдите к Последнему исходному коду хрома

Чтобы искать BYPASS_SEQUENCE, на данный момент это выглядит так:

var BYPASS_SEQUENCE = window.atob('dGhpc2lzdW5zYWZl');

Теперь они скрыты, но чтобы увидеть настоящий BYPASS_SEQUENCE, вы можете запустить следующую строку в консоли браузера.

console.log(window.atob('dGhpc2lzdW5zYWZl'));

ОБНОВЛЕНИЕ ДЛЯ ХРОМА 58+ (ВЫПУЩЕНО 2017-04-19)

Начиная с Chrome 58, для идентификации хоста используется только commonName удаляется. Смотрите дальнейшее обсуждение здесь и отслеживание ошибок здесь. В прошлом, subjectAltName использовался только для сертификатов с несколькими хостами, поэтому некоторые внутренние инструменты CA могут их не включать.

Если в прошлом ваши самоподписанные сертификаты работали нормально, но внезапно начали генерировать ошибки в Chrome 58, вот почему.

Поэтому, какой бы метод вы ни использовали для создания вашего самоподписанного сертификата (или сертификата, подписанного самоподписанным центром сертификации), убедитесь, что сертификат сервера содержит subjectAltName с надлежащим DNS и / или IP запись / записи, даже если это только для одного хоста.

Для openssl это означает ваш конфиг OpenSSL (/etc/ssl/openssl.cnf в Ubuntu) должно быть что-то похожее на следующее для одного хоста:

[v3_ca]   # and/or [v3_req], if you are generating a CSR
subjectAltName = DNS:example.com

или для нескольких хостов:

[v3_ca]   # and/or [v3_req], if you are generating a CSR
subjectAltName = DNS:example.com, DNS:host1.example.com, DNS:*.host2.example.com, IP:10.1.2.3

В средстве просмотра сертификатов Chrome (которое переместилось на вкладку "Безопасность" в F12) вы должны увидеть его в списке Extensions как Certificate Subject Alternative Name:

Chrome cert viewer


РЕДАКТИРОВАТЬ: временный обходной путь ниже был удален, как планировалось в Chrome 66 (выпущен в апреле 2018 года)

Временное решение

Можно вернуться к старому commonNameповедениедо Chrome 65, используя следующий параметр: EnableCommonNameFallbackForLocalAnchors

В Windows это можно установить на одном ПК с помощью следующей команды реестра (спасибо @Meengla):

reg add HKLM\Software\Policies\Google\Chrome /v EnableCommonNameFallbackForLocalAnchors /t REG_DWORD /d 1

На Mac можно использовать следующую команду (спасибо @BugsBunny):

defaults write com.google.Chrome EnableCommonNameFallbackForLocalAnchors -bool true

В Linux создайте файл политики, такой как /etc/opt/chrome/policies/managed/EnableCommonNameFallbackFor‌​LocalAnchors.json с содержанием:{ "EnableCommonNameFallbackForLocalAnchors": true }(спасибо @seanf)

Более подробную информацию о настройке этих политик для различных платформ, включая настройку их с помощью Windows GPO, можно найти в верхней части связанной страницы, а также в руководстве по шаблонам политик Chromium и в руководстве администратора.


Опять же, эти обходные пути являютсявременными до версии 65!

На Mac вы можете использовать утилиту Keychain Access, чтобы добавить самозаверяющий сертификат в системную цепочку ключей, и Chrome примет его. Я нашел пошаговые инструкции здесь:

Google Chrome, Mac OS X и самоподписанные SSL-сертификаты

В принципе:

  1. дважды щелкните значок замка с помощью X и перетащите значок сертификата на рабочий стол,
  2. откройте этот файл (заканчивающийся расширением.cer); это открывает приложение цепочки для ключей, которое позволяет вам одобрить сертификат.

На Mac вы можете создать сертификат, которому Chrome и Safari полностью доверяют на системном уровне, выполнив следующие действия:

# create a root authority cert
./create_root_cert_and_key.sh

# create a wildcard cert for mysite.com
./create_certificate_for_domain.sh mysite.com

# or create a cert for www.mysite.com, no wildcards
./create_certificate_for_domain.sh www.mysite.com www.mysite.com

Выше используются следующие сценарии и вспомогательный файл v3.ext, чтобы избежать ошибок пропуска альтернативного имени субъекта

Если вы хотите создать новый самозаверяющий сертификат, которому полностью доверяют, используя свои собственные полномочия root, вы можете сделать это с помощью этих сценариев.

create_root_cert_and_key.sh

#!/usr/bin/env bash
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem

create_certificate_for_domain.sh

#!/usr/bin/env bash

if [ -z "$1" ]
then
  echo "Please supply a subdomain to create a certificate for";
  echo "e.g. www.mysite.com"
  exit;
fi

if [ ! -f rootCA.pem ]; then
  echo 'Please run "create_root_cert_and_key.sh" first, and try again!'
  exit;
fi
if [ ! -f v3.ext ]; then
  echo 'Please download the "v3.ext" file and try again!'
  exit;
fi

# Create a new private key if one doesnt exist, or use the xeisting one if it does
if [ -f device.key ]; then
  KEY_OPT="-key"
else
  KEY_OPT="-keyout"
fi

DOMAIN=$1
COMMON_NAME=${2:-*.$1}
SUBJECT="/C=CA/ST=None/L=NB/O=None/CN=$COMMON_NAME"
NUM_OF_DAYS=999
openssl req -new -newkey rsa:2048 -sha256 -nodes $KEY_OPT device.key -subj "$SUBJECT" -out device.csr
cat v3.ext | sed s/%%DOMAIN%%/"$COMMON_NAME"/g > /tmp/__v3.ext
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days $NUM_OF_DAYS -sha256 -extfile /tmp/__v3.ext 

# move output files to final filenames
mv device.csr "$DOMAIN.csr"
cp device.crt "$DOMAIN.crt"

# remove temp file
rm -f device.crt;

echo 
echo "###########################################################################"
echo Done! 
echo "###########################################################################"
echo "To use these files on your server, simply copy both $DOMAIN.csr and"
echo "device.key to your webserver, and use like so (if Apache, for example)"
echo 
echo "    SSLCertificateFile    /path_to_your_files/$DOMAIN.crt"
echo "    SSLCertificateKeyFile /path_to_your_files/device.key"

v3.ext

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = %%DOMAIN%%

Еще один шаг - Как сделать самозаверяющие сертификаты полностью доверенными в Chrome/Safari

Чтобы полностью доверять самозаверяющим сертификатам в Chrome и Safari, вам необходимо импортировать новый центр сертификации в ваш Mac. Для этого следуйте этим инструкциям или более подробным инструкциям по этому общему процессу на веб-сайте mitmproxy:

  1. Открытый доступ к брелку
  2. Выберите "Система" в списке "Брелки"
  3. Выберите "Сертификаты" в списке "Категория"
  4. Выберите "Файл | Импортировать элементы..."
  5. Перейдите к созданному выше файлу "rootCA.pem", выберите его и нажмите "Открыть".
  6. Выберите свой недавно импортированный сертификат в списке "Сертификаты".
  7. Нажмите кнопку "i" или щелкните правой кнопкой мыши свой сертификат и выберите "Получить информацию".
  8. Разверните опцию "Доверие"
  9. Измените "При использовании этого сертификата" на "Всегда доверять"
  10. Закройте диалоговое окно, и вам будет предложено ввести пароль.
  11. Закройте и снова откройте все вкладки, которые используют целевой домен, и он будет загружен безопасно!

и в качестве бонуса, если вам нужны java-клиенты для доверия сертификатам, вы можете сделать это, импортировав свои сертификаты в хранилище ключей java. Обратите внимание, что это приведет к удалению сертификата из хранилища ключей, если он уже существует, поскольку ему необходимо обновить его в случае изменения ситуации. Это, конечно, только для импортируемых сертификатов.

import_certs_in_current_folder_into_java_keystore.sh

KEYSTORE="$(/usr/libexec/java_home)/jre/lib/security/cacerts";

function running_as_root()
{
  if [ "$EUID" -ne 0 ]
    then echo "NO"
    exit
  fi

  echo "YES"
}

function import_certs_to_java_keystore
{
  for crt in *.crt; do 
    echo prepping $crt 
    keytool -delete -storepass changeit -alias alias__${crt} -keystore $KEYSTORE;
    keytool -import -file $crt -storepass changeit -noprompt --alias alias__${crt} -keystore $KEYSTORE
    echo 
  done
}

if [ "$(running_as_root)" == "YES" ]
then
  import_certs_to_java_keystore
else
  echo "This script needs to be run as root!"
fi

Linux

If you're using Linux, you can also follow this official wiki pages:

В принципе:

  • click the lock icon with an X,
  • choose Certificate Information
  • go to Details tab
  • Нажмите на Экспорт... (сохранить как файл)

Теперь следующая команда добавит сертификат (где YOUR_FILE - ваш экспортированный файл):

certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n YOUR_FILE -i YOUR_FILE

Чтобы получить список всех ваших сертификатов, выполните следующую команду:

certutil -d sql:$HOME/.pki/nssdb -L

Если это все еще не работает, эта ошибка может затронуть вас: Проблема 55050: Ошибка Ubuntu SSL 8179

PS Пожалуйста, также убедитесь, что у вас есть libnss3-tools, прежде чем вы можете использовать вышеуказанные команды.

Если у вас его нет, пожалуйста, установите его:

sudo apt-get install libnss3-tools # on Ubuntu
sudo yum install nss-tools # on Fedora, Red Hat, etc.

В качестве бонуса вы можете использовать следующие удобные скрипты:

$ cat add_cert.sh
certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n $1 -i $1
$ cat list_cert.sh
certutil -d sql:$HOME/.pki/nssdb -L # add '-h all' to see all built-in certs
$ cat download_cert.sh
echo QUIT | openssl s_client -connect $1:443 | sed -ne '/BEGIN CERT/,/END CERT/p'

Использование:

add_cert.sh [FILE]
list_cert.sh
download_cert.sh [DOMAIN]

Поиск проблемы

  • Запустите Chrome с --auto-ssl-client-auth параметр

    google-chrome --auto-ssl-client-auth

ОБНОВЛЕНИЕ 11/2017: Этот ответ, вероятно, не будет работать для большинства новых версий Chrome.

ОБНОВЛЕНИЕ 02/2016: Более подробные инструкции для пользователей Mac можно найти здесь.

  1. На сайте, который вы хотите добавить, щелкните правой кнопкой мыши красный значок замка в адресной строке:

    1. Перейдите на вкладку " Соединение" и нажмите " Информация о сертификате".

    2. Перейдите на вкладку Details, нажмите кнопку Copy to File.... Откроется мастер экспорта сертификатов, нажмите кнопку " Далее", чтобы перейти на экран " Формат файла экспорта".

    3. Выберите DER-кодированный двоичный файл X.509 (.CER), нажмите Далее.

    4. Нажмите Обзор... и сохраните файл на свой компьютер. Назовите это что-нибудь описательное. Нажмите Далее, затем нажмите Готово.

    5. Откройте настройки Chrome, прокрутите вниз и нажмите Показать дополнительные настройки...

    6. Под HTTPS / SSL, нажмите Управление сертификатами...

    7. Перейдите на вкладку " Надежные корневые центры сертификации ", затем нажмите кнопку " Импорт...". Откроется мастер импорта сертификатов. Нажмите Далее, чтобы перейти к экрану " Файл для импорта".

    8. Нажмите Обзор... и выберите файл сертификата, который вы сохранили ранее, затем нажмите Далее.

    9. Выберите Поместить все сертификаты в следующем магазине. Выбранный магазин должен быть доверенным корневым центром сертификации. Если это не так, нажмите Обзор... и выберите его. Нажмите Далее и Готово

    10. Нажмите Да в предупреждении безопасности.

    11. Перезапустите Chrome.

ОБНОВЛЕНО 3 апреля 2008

Рекомендовано командой Chromium

https://www.chromium.org/Home/chromium-security/deprecating-powerful-features-on-insecure-origins

Быстрое супер-простое решение

Существует секретная обходная фраза, которую можно ввести на странице ошибок, чтобы Chrome продолжал работу, несмотря на ошибку безопасности: thisisunsafe (в более ранних версиях Chrome, например, badidea и даже раньше, опасность). НЕ ИСПОЛЬЗУЙТЕ ЭТОГО, ЕСЛИ ВЫ НЕ ПОНИМАЕТЕ ТОЧНО, ПОЧЕМУ ВАМ НУЖНО ЭТО!

Источник:

https://chromium.googlesource.com/chromium/src/+/d8fc089b62cd4f8d907acff6fb3f5ff58f168697%5E%21/

(Обратите внимание, что window.atob('dGhpc2lzdW5zYWZl') решает в thisisunsafe)

Самая последняя версия источника: @ https://chromium.googlesource.com/chromium/src/+/refs/heads/master/components/security_interstitials/core/browser/resources/interstitial_large.js и window.atob Функция может быть выполнена в консоли JS.

Чтобы узнать, почему команда Chrome изменила фразу обхода (впервые):

https://bugs.chromium.org/p/chromium/issues/detail?id=581189

Если все остальное терпит неудачу

Для быстрых разовых попыток, если опция "Продолжить в любом случае" недоступна или обходная фраза не работает, этот хак работает хорошо:

  1. Разрешить ошибки сертификата от localhost включив этот флаг (обратите внимание, что Chrome требуется перезагрузка после изменения значения флага):

    chrome://flags/#allow-insecure-localhost

    (и ответ с правом голоса /questions/36571324/poluchenie-chrome-dlya-prinyatiya-samozaveryayuschego-sertifikata-localhost/36571338#36571338 от @Chris)

  2. Если сайт, к которому вы хотите подключиться, localhost Готово. В противном случае настройте TCP-туннель для локального прослушивания порта 8090 и подключения к broken-remote-site.com на порту 443, убедитесь, что у вас есть socat установил и запустил что-то вроде этого в окне терминала:

    socat tcp-listen:8090,reuseaddr,fork tcp:broken-remote-site.com:443

  3. Перейдите на https://localhost:8090/ в вашем браузере.

Если вы на Mac и не видите вкладку экспорта или как получить сертификат, это сработало для меня:

  1. Нажмите на замок перед https://
  2. Перейти на вкладку "Подключение"
  3. Нажмите "Информация о сертификате"

    Теперь вы должны увидеть это: Разная информация и ваша, конечно, должны быть помечены как доверенные (в противном случае вы, вероятно, не были бы здесь

  4. Перетащите этот маленький значок сертификата на свой рабочий стол (или куда угодно).

  5. Дважды щелкните файл.cer, который был загружен, это должно импортировать его в вашу цепочку для ключей и открыть Доступ цепочки для ключей к вашему списку сертификатов.

    В некоторых случаях этого достаточно, и теперь вы можете обновить страницу.

    Иначе:

  6. Дважды щелкните по вновь добавленному сертификату.
  7. В раскрывающемся списке доверия измените параметр "При использовании этого сертификата" на "Всегда доверять".

Теперь перезагрузите страницу, о которой идет речь, и проблема должна быть решена! Надеюсь это поможет.


Редактировать от Wolph

Чтобы сделать это немного проще, вы можете использовать следующий скрипт ( источник):

  1. Сохраните следующий скрипт как whitelist_ssl_certificate.ssh:

    #!/usr/bin/env bash -e
    
    SERVERNAME=$(echo "$1" | sed -E -e 's/https?:\/\///' -e 's/\/.*//')
    echo "$SERVERNAME"
    
    if [[ "$SERVERNAME" =~ .*\..* ]]; then
        echo "Adding certificate for $SERVERNAME"
        echo -n | openssl s_client -connect $SERVERNAME:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | tee /tmp/$SERVERNAME.cert
        sudo security add-trusted-cert -d -r trustRoot -k "/Library/Keychains/System.keychain" /tmp/$SERVERNAME.cert
    else
        echo "Usage: $0 www.site.name"
        echo "http:// and such will be stripped automatically"
    fi
    
  2. Сделайте скрипт исполняемым (из оболочки):

    chmod +x whitelist_ssl_certificate.ssh
    
  3. Запустите скрипт для домена, который вы хотите (просто скопируйте / вставьте полный URL-адрес работает):

    ./whitelist_ssl_certificate.ssh https://your_website/whatever
    

Для тестовой среды

Ты можешь использовать --ignore-certificate-errors в качестве параметра командной строки при запуске Chrome (работает на версии 28.0.1500.52 в Ubuntu).

Это заставит его игнорировать ошибки и подключаться без предупреждения. Если у вас уже запущена версия Chrome, вам необходимо закрыть ее перед повторным запуском из командной строки, иначе откроется новое окно, но параметры будут игнорироваться.

Я настраиваю Intellij для запуска chrome таким образом при выполнении отладки, поскольку тестовые серверы никогда не имеют действительных сертификатов.

Я бы не рекомендовал нормальный просмотр, как этот, поскольку проверки сертификатов являются важной функцией безопасности, но это может быть полезно для некоторых.

Филиппо Валсорда написал кроссплатформенный инструмент, mkcert, чтобы сделать это для многих доверенных магазинов. Я предполагаю, что он написал это по той же причине, по которой существует так много ответов на этот вопрос: больно делать "правильные" вещи дляSubjectAltName сертификаты, подписанные доверенным корневым центром сертификации.

mkcertвключен в основные системы управления пакетами для Windows, macOS и нескольких разновидностей Linux. Это также упоминается в документации Chromium на этапе 4 тестирования мощных функций.

мкцерт

mkcertэто простой инструмент для создания локально доверенных сертификатов разработки. Не требует настройки.

$ mkcert -install
Created a new local CA at "/Users/filippo/Library/Application Support/mkcert" 
The local CA is now installed in the system trust store! ⚡️
The local CA is now installed in the Firefox trust store (requires browser restart)! 

$ mkcert example.com "*.example.com" example.test localhost 127.0.0.1 ::1
Using the local CA at "/Users/filippo/Library/Application Support/mkcert" ✨

Created a new certificate valid for the following names 
 - "example.com"
 - "*.example.com"
 - "example.test"
 - "localhost"
 - "127.0.0.1"
 - "::1"

The certificate is at "./example.com+5.pem" and the key at "./example.com+5-key.pem" ✅

ОКНА ИЮНЬ /2017 Windows Server 2012

Я следовал за ответом @Brad Parks. В Windows вы должны импортировать rootCA.pem в хранилище доверенных корневых сертификатов.

Я сделал следующие шаги:

openssl genrsa -out rootCA.key 4096
openssl req -x509 -new -nodes -key rootCA.key -newkey rsa:4096 -sha256 -days 1024 -out rootCA.pem
openssl req -new -newkey rsa:4096 -sha256 -nodes -keyout device.key -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 2000 -sha256 -extfile v3.ext

Где v3.ext это:

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost
IP.1 = 192.168.0.2
IP.2 = 127.0.0.1

Затем в моем случае у меня есть веб-приложение, размещенное самостоятельно, поэтому мне нужно связать сертификат с IP-адресом и портом, сертификат должен находиться в МОЕМ хранилище с информацией о секретном ключе, поэтому я экспортировал его в формат pfx.

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

С помощью консоли MMC (Файл / Добавить или удалить оснастки / Сертификаты / Добавить / Учетная запись Computert / Локальный компьютер /OK) я импортировал файл pfx в личном хранилище.

Позже я использовал эту команду для привязки сертификата (вы также можете использовать инструмент HttpConfig):

netsh http add sslcert ipport=0.0.0.0:12345 certhash=b02de34cfe609bf14efd5c2b9be72a6cb6d6fe54 appid={BAD76723-BF4D-497F-A8FE-F0E28D3052F4}

certhash = сертификат Thumprint

appid = GUID (ваш выбор)

Сначала я попытался импортировать сертификат "device.crt" в Trusted Root Certificates Authorities по-разному, но я все еще получаю ту же ошибку:

Но я понял, что должен импортировать сертификат корневого центра, а не сертификат для домена. Поэтому я использовал консоль mmc (Файл / Добавить или удалить оснастки / Сертификаты / Добавить / Учетная запись Computert/LocalComputer/OK). Я импортировал файл rootCA.pem в хранилище доверенных корневых сертификатов.

Перезапустите Chrome и т. Д. Это работает.

С localhost:

Или с IP-адресом:

Единственное, чего я не смог добиться, так это того, что у него устаревший шифр (красный квадрат на картинке). Помощь ценится в этом вопросе.

С makecert невозможно добавить информацию SAN. С New-SelfSignedCertificate (Powershell) вы можете добавить информацию SAN, это также работает.

Как кто-то заметил, вам нужно перезапустить ВСЕ Chrome, а не только окна браузера. Самый быстрый способ сделать это - открыть вкладку, чтобы...

chrome://restart

  1. Добавьте сертификат ЦС в хранилище доверенных корневых ЦС.

  2. Перейдите в Chrome и включите этот флаг!

chrome://flags/#allow-insecure-localhost

Наконец, просто используйте домен *.me или любые допустимые домены, такие как *.com и *.net, и сохраните их в файле хоста. Для моих локальных разработчиков я использую *.me или *.com со следующим хост-файлом:

  1. Добавить в хост. C:/ окна /system32/ драйверы / и т. Д. / Хосты

    127.0.0.1 nextwebapp.me

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

Вы уверены, что адрес сайта обслуживается так же, как и сертификат? У меня были те же проблемы с Chrome и самозаверяющим сертификатом, но в итоге я обнаружил, что он просто невероятно требователен к проверке доменного имени на сертификате (как и должно быть).

Chrome не имеет собственного хранилища сертификатов и использует собственный Window. Однако Chrome не позволяет импортировать сертификаты в хранилище, поэтому вы должны добавить их через IE.

Установка сертификатов в Google Chrome

Установка сертификатов в Internet Explorer

Также взгляните на это для нескольких различных подходов к созданию самозаверяющих сертификатов (я предполагаю, что вы используете IIS, как вы не упомянули).

Как создать самоподписанный сертификат в IIS 7

Графический интерфейс для управления SSL-сертификатами в Chromium в Linux НЕ работал должным образом. Тем не менее, их документы дали правильный ответ. Хитрость заключалась в том, чтобы запустить команду ниже, которая импортирует самоподписанный сертификат SSL. Просто обновите название <certificate-nickname> а также certificate-filename.cer, затем перезапустите хром / хром.

Из документов:

В Linux Chromium использует общую базу данных NSS. Если встроенный менеджер не работает для вас, то вы можете настроить сертификаты с помощью инструментов командной строки NSS.

Получить инструменты

  • Debian / Ubuntu: sudo apt-get install libnss3-tools

  • Fedora: su -c "yum install nss-tools"

  • Gentoo: su -c "echo 'dev-libs/nss utils' >> /etc/portage/package.use && emerge dev-libs/nss" (Вам нужно запустить все команды ниже с nss префикс, например, nsscertutil.) Opensuse: sudo zypper install mozilla-nss-tools

Чтобы доверять самоподписанному сертификату сервера, мы должны использовать

certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n <certificate-nickname> -i certificate-filename.cer

Список всех сертификатов

certutil -d sql:$HOME/.pki/nssdb -L

TRUSTARGS - это три строки из нуля или более буквенных символов, разделенных запятыми. Они определяют, как сертификат должен быть доверенным для подписи SSL, электронной почты и объектов, и объясняются в документах certutil или в сообщении Meena о флажках доверия.

Добавьте личный сертификат и закрытый ключ для аутентификации клиента SSL. Используйте команду:

pk12util -d sql:$HOME/.pki/nssdb -i PKCS12_file.p12

импортировать личный сертификат и закрытый ключ, хранящиеся в файле PKCS #12. TRUSTARGS личного сертификата будет установлен на "u, u, u".

Удалить сертификат certutil -d sql:$HOME/.pki/nssdb -D -n <certificate nickname>

Выдержка из: https://chromium.googlesource.com/chromium/src/+/HEAD/docs/linux_cert_management.md

Я начал использовать то, что предлагал bjnord: Google Chrome, Mac OS X и самоподписанные SSL-сертификаты.

То, что показано в блоге, не сработало.

Тем не менее, один из комментариев к блогу был золотой:

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain site.crt

Вам нужно будет следить за блогом о том, как получить файл сертификата, после этого вы можете использовать приведенную выше команду, и все будет хорошо.

Для Fedora и Ubuntu, если вы получаете example.com Not a Certification authority ошибка при добавлении сертификата с помощью графического интерфейса для добавления нового корневого органа.

Попробуйте следующее с сертифицированным экспортированным из chrome, любой формат работает (base64 chain/singe, pkcs 7, der binary и т. Д.). Это сработало для меня, когда все методы графического интерфейса потерпели неудачу.

certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n <certificate nickname> \
-i <certificate filename>

Чтобы позже удалить его, если это необходимо, перейдите в Chrome -> Настройки -> Дополнительно -> Управление сертификатами -> Серверы, он, наконец, появится там, где его можно удалить.

Источник, предупреждение, очень очень пятнистый и частично устаревший: https://chromium.googlesource.com/chromium/src/+/HEAD/docs/linux_cert_management.md

Чтобы создать в Windows самозаверяющий сертификат, которому будет доверять Chrome v58 и новее, запустите Powershell с повышенными привилегиями и введите:

New-SelfSignedCertificate -CertStoreLocation Cert:\LocalMachine\My -Subject "fruity.local" -DnsName "fruity.local", "*.fruity.local" -FriendlyName "FruityCert" -NotAfter (Get-Date).AddYears(10)
#notes: 
#    -subject "*.fruity.local" = Sets the string subject name to the wildcard *.fruity.local
#    -DnsName "fruity.local", "*.fruity.local"
#         ^ Sets the subject alternative name to fruity.local, *.fruity.local. (Required by Chrome v58 and later)
#    -NotAfter (Get-Date).AddYears(10) = make the certificate last 10 years. Note: only works from Windows Server 2016 / Windows 10 onwards!!

После этого сертификат будет сохранен в сертификатах локального компьютера в хранилище личных \ сертификатов.

Вы хотите скопировать этот сертификат в хранилище доверенных корневых центров сертификации \ Сертификаты.

Один из способов сделать это: нажмите кнопку Пуск Windows и введите certlm.msc, Затем перетащите только что созданный сертификат в хранилище Trusted Root Certification Authorities\Certificates в соответствии с приведенным ниже снимком экрана.

Разрешение небезопасного локального хоста нормально работать с помощью этого метода chrome://flags/#allow-insecure-localhost

Просто вам нужно создать ваше имя хоста разработки для xxx.localhost.

По состоянию на март 2020 года в MacOS Catalina с использованием Chrome 81 это изменилось после создания действительного сертификата с помощью openssl, как описано выше.

Сначала я зашел на свой сайт с помощью Safari и щелкнул ссылку внизу страницы с предупреждением, которая позволяет мне в любом случае получить доступ к сайту. Это добавило сертификат в мою связку ключей Mac (например, Keychain.app). Тогда Safari позволит мне просмотреть страницу. Chrome показал, что сертификат является доверенным, но не разрешил мне просмотреть страницу. Я продолжал получать ошибку CERTIFICATE_INVALID.

В Связке ключей выберите Все элементы на панели в левом нижнем углу. Затем найдите DNS-имя вашего локального хоста (например, myhost.example.com).

Дважды щелкните свой сертификат. Откроется диалоговое окно редактирования вашего сертификата.

Измените "При использовании этого сертификата" на "Всегда доверять"

Это было совершенно нелогично, потому что SSL уже был установлен на Always Trust, предположительно Safari, когда был добавлен сертификат. Chrome начал работать только после того, как я глобально изменил его на Always Trust. Когда вернул обратно, перестало работать.

mkdir CA
openssl genrsa -aes256 -out CA/rootCA.key 4096
openssl req -x509 -new -nodes -key CA/rootCA.key -sha256 -days 1024 -out CA/rootCA.crt

openssl req -new -nodes -keyout example.com.key -out domain.csr -days 3650 -subj "/C=US/L=Some/O=Acme, Inc./CN=example.com"
openssl x509 -req -days 3650 -sha256 -in domain.csr -CA CA/rootCA.crt -CAkey CA/rootCA.key -CAcreateserial -out example.com.crt -extensions v3_ca -extfile <(
cat <<-EOF
[ v3_ca ]
subjectAltName = DNS:example.com
EOF
)

Это сработало для меня. Смотрите: http://www.robpeck.com/2010/10/google-chrome-mac-os-x-and-self-signed-ssl-certificates/

В адресной строке нажмите маленький замок с X. Это вызовет небольшой информационный экран. Нажмите кнопку с надписью "Информация о сертификате".

Нажмите и перетащите изображение на рабочий стол. Похоже на маленький сертификат.

Дважды щелкните по нему. Это вызовет утилиту Keychain Access. Введите свой пароль, чтобы разблокировать его.

Обязательно добавьте сертификат в системную цепочку для ключей, а не в цепочку для ключей входа в систему. Нажмите "Всегда доверять", хотя это, похоже, ничего не дает.

После того, как он был добавлен, дважды щелкните по нему. Возможно, вам придется подтвердить подлинность снова.

Разверните раздел "Доверие".

"При использовании этого сертификата" установите "Всегда доверять"

Для Chrome на MacOS, если вы подготовили сертификат:

  • Выйти из Chrome (cmd+Q).
  • Запустите приложение Keychain Access и откройте категорию "Сертификаты".
  • Перетащите файл сертификата в окно доступа к связке ключей и введите пароль для файла сертификата.
  • Дважды щелкните свой сертификат и разверните список "Доверие".
    • В строке "При использовании этого сертификата" выберите "Всегда доверять".
    • Закройте этот материал и введите свой пароль.
  • Запустите Chrome и очистите все кэши.
  • Проверьте, что все в порядке.

Июнь 2021 г. - Windows 10 - Chrome v91 (ПРОСТОЙ)

Следуйте инструкциям по сертификата на сайте созданиюselfsignedcertificate.com :

Пример доменного имени: mydomain.local, замените его своим доменным именем.

Шаг 1) Чтобы сгенерировать ключ:

openssl genrsa -out mydomain.local.key 2048

Шаг 2) Создайте файл конфигурации mydomain.local.conf только со следующим содержанием:

      [req]
distinguished_name=req
[SAN]
subjectAltName=DNS:mydomain.local

Примечание. В subcjectAltName вы можете определить больше доменов (необязательно), например:

subjectAltName=DNS:mydomain.local, DNS:*.mydomain.local, DNS:otherdomain.local, IP:192.168.1.10

Шаг 3) Создайте сертификат:

openssl req -new -x509 -key mydomain.local.key -out mydomain.local.crt -days 3650 -subj /CN=mydomain.local -extensions SAN -config mydomain.local.conf

Шаг 4) Добавьте сертификат в доверенные корневые центры сертификации

Щелкните правой кнопкой мыши файл mydomain.local.crt, выберите Install Certificateиз контекстного меню. Выбирать Local Machineво всплывающем окне. Следующий. Выбирать Place all certificates in the following store. Нажмите Browse. Выбирать Trusted Root Certification Authorities. Нажмите Ok, Next, Finish. Перезагрузите Chrome.

Если щелкнуть маленькую перечеркнутую иконку замка рядом с URL-адресом, появится окно, похожее на это:

После нажатия на ссылку Информация о сертификате вы увидите следующее диалоговое окно:

Он сообщает, какое хранилище сертификатов является правильным, это хранилище доверенных корневых центров сертификации.

Вы можете использовать один из методов, описанных в других ответах, чтобы добавить сертификат в это хранилище, или использовать:

certutil -addstore -user "ROOT" cert.pem
  • ROOT является внутренним именем хранилища сертификатов, упомянутым ранее.
  • cert.pem это название вашего самозаверяющего сертификата.

Начиная с Chrome 58+, я начал получать ошибку сертификата в macOS из-за отсутствия SAN. Вот как снова получить зеленый замок в адресной строке.

  1. Создайте новый сертификат с помощью следующей команды:

    openssl req \
      -newkey rsa:2048 \
      -x509 \
      -nodes \
      -keyout server.key \
      -new \
      -out server.crt \
      -subj /CN=*.domain.dev \
      -reqexts SAN \
      -extensions SAN \
      -config <(cat /System/Library/OpenSSL/openssl.cnf \
          <(printf '[SAN]\nsubjectAltName=DNS:*.domain.dev')) \
      -sha256 \
      -days 720
    
  2. Импортировать server.crt в KeyChain, затем дважды щелкните сертификат, разверните Trust и выберите Always Trust

Обновите страницу https://domain.dev/ в Google Chrome, чтобы зеленый замок вернулся.

У меня возникла та же проблема: я установил сертификат в хранилище Trusted Root Authorities в Windows, и Chrome все еще отказался от сертификата с ошибкой ERR_CERT_COMMON_NAME_INVALID, Обратите внимание, что когда сертификат неправильно установлен в хранилище, ошибка ERR_CERT_AUTHORITY_INVALID,

Как подсказывают имя ошибки, этот комментарий и этот вопрос, проблема заключалась в объявленном доменном имени в сертификате. Когда мне было предложено ввести "Общее имя" при создании сертификата, мне пришлось ввести доменное имя, которое я использовал для доступа к сайту (localhost в моем случае). Я перезапустил Chrome, используя chrome://restart и наконец был счастлив с этим новым сертификатом.

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