Получение Chrome для принятия самозаверяющего сертификата localhost - PullRequest
1008 голосов
/ 28 сентября 2011

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

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

Ответы [ 40 ]

573 голосов
/ 09 августа 2015

Только для localhost:

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

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

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

Нажмите Enable.

472 голосов
/ 26 февраля 2013

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

  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. При запросе хранилища сертификации выберите Доверенные корневые центры сертификации
  5. Установите все флажки и нажмите ОК. Перезапустите Chrome.
135 голосов
/ 31 октября 2011

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

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

В основном:

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

ОБНОВЛЕНИЕ ДЛЯ CHROME 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

95 голосов
/ 05 декабря 2017

Щелкните в любом месте страницы и введите 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'));
90 голосов
/ 04 сентября 2013

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

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

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

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

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

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

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

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

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

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

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

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

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

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

88 голосов
/ 18 сентября 2012

Linux

Если вы используете Linux, вы также можете следить за официальными вики-страницами:

В основном:

  • нажмите значок замка с X,
  • выберите информацию сертификата
  • перейти на вкладку Подробности
  • Нажмите на Экспорт ... (сохранить как файл)

Теперь следующая команда добавит сертификат (где 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

P.S. Также убедитесь, что у вас есть 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

75 голосов
/ 27 апреля 2017

На 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 :

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

$ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain rootCA.pem

или с помощью приложения Keychain Access:

  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
56 голосов
/ 14 января 2014

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

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

    Теперь вы должны увидеть это: Different information of course and yours should be marked as trusted yet (otherwise      you probably wouldn't be here)

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

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

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

    В противном случае:

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

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


Редактировать с Вольф

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

  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
    
39 голосов
/ 12 августа 2016

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

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

https://www.chromium.org/Home/chromium-security/deprecating-powerful-features-on-insecure-origins#TOC-Testing-Powerful-Features

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

Существует секретная обходная фраза, которую можно ввести на странице ошибок, чтобы 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

    (и ответ с голосованием https://stackoverflow.com/a/31900210/430128 от @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 в вашем браузере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...