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

1213

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

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

pjohansson
источник
14
Когда вы говорите, что Firefox изначально жалуется на это, вы имеете в виду, что он просит добавить исключение для сертификата? Этого не должно быть, если сертификат установлен правильно. Мне кажется, что все три браузера жалуются, но Firefox позволяет вам отменить его жалобу. Я публикую это как комментарий, так как у меня нет конкретного ответа, но я сделал именно это, и он прекрасно работает во всех трех браузерах. Я бы посоветовал вам сначала попытаться заставить его работать в IE, а затем, когда это будет радо, беспокоиться о двух других. Извините, я не могу помочь!
Starskythehutch
1
Вы должны создать правильно сформированный сертификат, включая способ представления DNS-имен. OpenSSL не представляет их таким образом, чтобы удовлетворить браузеры из коробки. См. Как создать самозаверяющий сертификат с помощью openssl? ,
jww
4
Firefox не использует хранилище системных сертификатов.
любопытный парень
4
Если в подписи вашего сертификата используется SHA-1, последние версии Chrome (около 57) будут отображать предупреждения, даже если вы смогли успешно добавить свой собственный сертификат . Несмотря на это , «Безопасность» панели инструментов разработчика будет говорить более конкретно , в чем проблема , например: net::ERR_CERT_WEAK_SIGNATURE_ALGORITHM.
SeldomNeedy
2
Я просто перестал использовать Chrome в целях разработки, так как он не подходит для разработчиков. Обычно человек, оказавшийся в такой ситуации, все равно знает, что он делает. Спасибо, но не спасибо. Я был достаточно разочарован Chrome!
Г.Т.Доров

Ответы:

66

2020-05-22 : Вы можете выполнить это только с 6 командами оболочки .

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

С помощью следующего кода вы можете (1) стать вашим собственным CA, (2) затем подписать свой сертификат SSL как CA. (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. Стать CA
  2. Подпишите свой сертификат, используя свой ключ CA
  3. Импортировать myCA.pemкак полномочия в настройках Chrome (Настройки> Управление сертификатами> Полномочия> Импорт)
  4. Используйте .crtфайл на вашем сервере

Дополнительные шаги (для 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
JellicleCat
источник
2
Браузеры и операционные системы @maverick поставляются с ограниченным количеством CA, которым они доверяют. Хотя любой может стать центром сертификации, чтобы заставить кого-либо доверять своим сертификатам, им нужно, чтобы люди вручную добавляли их в качестве доверенных центров сертификации (как мы говорим Chrome, когда мы импортируем сертификат вручную).
JellicleCat
2
Большой! Два замечания для Mac пользователей , как я: на последнюю строку, используйте -days 825вместо -days 1825из - за superuser.com/questions/1492643/... , и это стоит отметить , что импортировать корневой сертификат в Key Access Chain, вам нужно не только «Файл > Импортировать файл », но затем, чтобы найти его в списке, щелкните его правой кнопкой мыши, разверните«> Доверие »и выберите« Всегда ».
michielbdejong
2
если вам нужен PEM- файл вместо CRT- файла для локального сервера разработки, не беспокойтесь, просто объедините файлы .crt и .csr и сохраните их как файл .pem , и все готово .
Керем Байдоган
1
ПОСЛЕДНИЙ ЭТО РАБОТАЕТ! BRAVO за этот ответ. Пожалуйста, не забудьте загрузить myCA.pem в Chrome или Firefox (Настройки> Управление сертификатами> Полномочия> Импорт)
Fryser wow
3
Я изменил DNS.1 на IP.1 для своего сервера локальной сети на основе IP. Оно работает. Спасибо.
dw1
767

Для localhostтолько:

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

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

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

Нажмите Enable.

Крис
источник
3
Отключает предупреждение ... но и кеш! bugs.chromium.org/p/chromium/issues/detail?id=103875
Хьюго Вуд
4
это не сработает, если вы используете Chrome в режиме инкогнито (например, для смены идентификаторов), но в остальном очень чисто
Baywet
5
Это - если вы можете выдержать назойливое красное сообщение Not Secure MSG. В противном случае это - часы таинственных заклинаний openssl, а затем попытаться разобраться с внутренним менеджером сертификатов в Chrome.
Тимбо
10
Я не знаю, почему за этот ответ проголосовали, но есть разница между недействительным сертификатом и самозаверяющим сертификатом. Вопрос о самоподписанном сертификате.
Мехди
2
У меня не сработало вообще. Для меня сработало создание самозаверяющего сертификата, включающего subjectAltName, как объясняется в этом ответе: stackoverflow.com/a/42917227/2873507
Vic Seedoubleyew
508

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

  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.
Kellen
источник
143
Я пробовал это на компьютере с Linux, но он сказал, что импорт не удался, потому что xxx.xxx.com: не Центр сертификации.
Мэтт
15
Спасибо @kellen .. однако, при использовании бета-версии Chrome 29.0.1547.57, по-видимому, нигде в информации сертификата нет опции «Экспорт». Тем не менее, есть раздел «Подробности», но он не в форме вкладки. Это выглядит как складной / расширяемый блок. i.imgur.com/dDmNEIh.png
кавалькада
20
В Chrome 37 больше нет полезной описательной Exportкнопки. Кажется, ее заменили на замечательную Copy to fileкнопку. Почему «экспорт» не был сохранен, уму
непостижимо
13
@Jakobud, просто перетащите символ сертификата на рабочий стол или что-то еще, и он будет экспортирован. Однако остальная часть ответа не работает на OS X (Yosemite), насколько я могу судить (Chrome 39).
дБ
33
Начиная с Chrome 56, чтобы получить доступ к настройкам SSL-сертификата в Windows, необходимо использовать Инструменты разработчика (CTRL + SHIFT + i), перейти на вкладку «Безопасность» и нажать кнопку «Просмотреть сертификат».
void.pointer
167

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

Начиная с Chrome 58, возможность идентифицировать хост с использованием только commonName была удалена . Сертификаты теперь должны использовать subjectAltNameдля идентификации своих хостов. Смотрите дальнейшее обсуждение здесь и отслеживание ошибок здесь . Раньше 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

Тобиас Дж
источник
12
Спасибо за публикацию об обновлении Chrome 58+! Для людей, которые хотят создать самоподписанный сертификат, включающий SAN в Windows, одним из простых способов является использование командлета New-SelfSignedCertificate PowerShell. New-SelfSignedCertificate -DnsName localhost -CertStoreLocation cert:\LocalMachine\My
ДанО
3
@ DanO СПАСИБО! Ни один из других обходных путей не работал для меня на Win10. Приятно знать, что хотя бы Powershell генерирует действительные сертификаты!
Брайан Донахью
1
Нашел решение на Reddit для Chrome 58+ и оно работает! В командной строке администратора: reg добавьте HKLM \ Software \ Policies \ Google \ Chrome / v EnableCommonNameFallbackForLocalAnchors / t REG_DWORD / d 1
IrfanClemson
3
Чтобы создать политику в Linux, вам нужно создать файл политики, скажем, /etc/opt/chrome/policies/managed/EnableCommonNameFallbackForLocalAnchors.jsonс таким содержанием: { "EnableCommonNameFallbackForLocalAnchors": true }
seanf
5
Msgstr "В средстве просмотра сертификатов Chrome (которое переместилось на вкладку" Безопасность "в F12) вы должны увидеть его Extensionsкак Certificate Subject Alternative Name". Я не вижу раздела «Расширения», когда открываю вкладку «Безопасность» в инструментах разработчика F12 (Chrome 62). Был ли он перенесен в другое место?
Громовой
143

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

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

В принципе:

  1. дважды щелкните значок замка с помощью X и перетащите значок сертификата на рабочий стол,
  2. откройте этот файл (заканчивающийся расширением .cer); это открывает приложение цепочки для ключей, которое позволяет вам одобрить сертификат.
bjnord
источник
12
Важно отметить, что вам может потребоваться перезапустить Chrome, чтобы это вступило в силу.
Сюн Чямов
10
Мне пришлось отредактировать настройки сертификата и включить доверие по SSL вручную
NeDark
1
Это сработало для меня на Yosemite, 10.10.5, Chrome версии 46.0.2490.80 (64-разрядная версия). Спасибо!
romellem
2
Работал на El Capitan, перезагрузка не требуется. Я добавил сертификат, щелкнул по нему, развернул раскрывающийся список «Доверие» и установил его Always Trustдля раздела SSL. В основном то, что сказал @NeDark.
Том
1
Мне нужно было перетащить сертификат с рабочего стола в связку ключей, а затем сделать утверждение.
JMQ
130

Нажмите в любом месте на странице и введите 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'));
Евгений Афанасьев
источник
6
WTF, спасибо, это сработало для меня Ubuntu 16.04 63.0.3239.84
Gries
8
Этот код был изменен с новой версии. Новая фразаthisisunsafe
Java Guy
6
В Chrome 65 в Windows 10 ввод текста, по- thisisunsafeвидимому, влияет только на добавление этого сайта в исключения. (В адресной строке все еще написано «Не безопасно» красным цветом.)
Райан,
2
это работает, но только для первой загрузки, если вы перемещаетесь по странице, вам нужно снова набрать bupass_squence
talsibony
«thisisunsafe» BYPASS_SEQUENCE была единственной вещью на этой странице, которая работала для меня на Mac Chrome 72. Я чувствую, что мне не нужно было создавать свой самоподписанный сертификат ...!
Джоно
95

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

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

kenorb
источник
Отлично, я люблю ваши сценарии. Хотя вам не нужен QUIT (в любом случае нет такой HTTP-команды, как QUIT), и вам также не нужен sed, инструменты nss могут отфильтровать сертификат между BEGIN и END CERT. Так что это download_cert.shможет быть просто так:echo | openssl s_client -connect $1:443
Пол Тобиас
Я пробовал другие варианты, но только этот в настоящее время работает в Chrome 4x для Linux, он отказался импортировать в любой магазин, используя встроенные инструменты.
Кендрик
93

На 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=825
    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
Брэд Паркс
источник
Получил «Ошибка открытия закрытого ключа rootCA.key» при запуске $ ./create_root_cert_and_key.sh. macOS 10.12.4 и OpenSSL 0.9.8zh 14 января 2016 г.
пончик
1
Запуск $ openssl genrsa -out rootCA.key 2048перед $ ./create_root_cert_and_key.shисправлением ошибки «Ошибка открытия закрытого ключа rootCA.key», с которой я столкнулся.
пончик
@donut - спасибо за указание на это - у меня была дублирована эта строка, так что я уверен, что это вызвало проблему, которую вы видели ...
Брэд Паркс
openssl req -new -newkey rsa:2048 -sha256 -nodes -key device.key -subj "$SUBJECT" -out device.csrвыдает мне сообщение об ошибке «Ошибка открытия PRivate Key device.key». Я думал, что эта команда должна была быть создана device.key, но, похоже, она пытается ее прочитать по какой-то причине
Lenny
2
Выяснил, что решение (в случае, если кто-то еще ударит это) должно было измениться -keyна -keyout...openssl req -new -newkey rsa:2048 -sha256 -nodes -keyout device.key -subj "$SUBJECT" -out device.csr
Ленни
90

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

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

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

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

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

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

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

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

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

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

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

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

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

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

kmgdev
источник
2
@AJeneral Да, Chrome снова изменился. Инструкции в этой статье работали для меня недавно.
kmgdev
2
Эта опция не существует в Mac Chrome последней по состоянию на дату этого комментария.
y3sh
1
@kgrote, Chrome не имеет собственного хранилища сертификатов. Все, что он делает, это добавляет и удаляет Windows. Таким образом, лучший способ - просто использовать certmgr.mscдля добавления и удаления сертификатов.
Pacerier
1
Работал на меня, спасибо. Пришлось перезапустить Chrome и, самое главное, срок действия моего сертификата истек до 2017 года. Материал SHA-1.
ioanb7
1
Хром изменился еще раз! Теперь шаг «В адресной строке, нажмите маленький замок с X. Это вызовет небольшой информационный экран». не работает
Бруно Броноски
59

Если вы на 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
LunaCodeGirl
источник
1
Этот подход работал для меня на OS X Mavericks, не было ни одной опции экспорта, как описано в верхнем ответе выше.
Кевин Лири
Работает отлично. Блокировка перед https все еще вычеркнута, но это нормально, потому что больше нет раздражающего всплывающего окна.
nalply
Это сработало для меня на Mac Catalina. Спасибо! :)
Саураб
58

ОБНОВЛЕНО 23 апреля 2020 года

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

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

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

Существует секретная обходная фраза, которая может быть введена на странице ошибок, чтобы Chrome продолжал работу, несмотря на ошибку безопасности: thisisunsafe (в более ранних версиях Chrome, например , badidea и даже ранее, опасность ). DO NOT USE THIS , если вы понимаете, почему вам это нужно!

Источник:

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)

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

  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 в вашем браузере.

Если ничего не помогает (Решение № 2)

Аналогично «Если ничего не помогает (Решение № 1)», здесь мы настраиваем прокси для нашей локальной службы, используя ngrok . Поскольку вы можете получить доступ к http-туннелям ngrok через TLS (в этом случае ngrok завершает работу с действующим сертификатом) или через конечную точку, отличную от TLS, браузер не будет жаловаться на недействительные сертификаты.

Скачайте и установите ngrok, а затем выставьте его через ngrok.io:

ngrok http https://localhost

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

Раман
источник
10
Как указано на quora.com/… , другой вариант - щелкнуть в любом месте страницы и написать «badidea»
Смиэль,
Любой, кто пытается использовать localhost с https для сервисных работников, первый пункт If-all-fails работал для меня на Chrome 60 Ubuntu 14.04
formatkaka
это все равно будет рассматривать сертификат как недействительный и заставлять пароль отказываться работать
Рэй Фосс
34

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

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

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

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

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

Киран Мур
источник
5
У меня это работало в Windows 8! Я просто щелкнул правой кнопкой мыши на ярлыке chrome> Свойства> Измененное поле «Цель», как это (обратите внимание, что «--ignore-certificate-errors» следует добавить после кавычки и с пробелом): «C: \ Program Files (x86) \ Google \ Chrome \ Application \ chrome.exe "--ignore-certificate-errors
mikhail-t
1
Это не отвечает на вопрос, и это опасно. Вопрос заключался в том, как заставить Chrome доверять самоподписанному сертификату сервера; не как игнорировать предупреждения и ошибки.
jww
1
Это единственное решение, которое работало для меня на Chrome (63.0.3239.108) с Windows 7 (64-разрядная версия). Что касается безопасности, я создал специальный значок на рабочем столе, который я запускаю только при разработке на локальной виртуальной машине. Импорт самозаверяющих локальных сертификатов, настройка chrome: // flags & HSTS domain не помогла. Chrome определенно должен оставить эту старую добрую кнопку «Добавить исключение безопасности» - это избавило бы меня от 2 часов борьбы с бесполезными настройками.
lubosdz
Этот урок работал как шарм! youtube.com/watch?v=qoS4bLmstlk
Джонатан Мартинс
20

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

chrome://restart

DejerNet
источник
Привет! Просто хотел указать, что это то, что исправило это для меня. Я добавлял собственный ЦС в хранилище доверенных сертификатов, он всегда работал для меня таким образом. Я попробовал Firefox и работал без нареканий, но не хром. В конце концов, это произошло потому, что, кажется, вам нужно полностью перезапустить Chrome, как вы упомянули. Возможно, Chrome продолжает использовать одно и то же хранилище доверия, пока эти фоновые процессы все еще работают.
Хосе Сифуэнтес
20

ОКНА ИЮНЬ / 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, это также работает.

UUHHIVS
источник
2
Важно: Запустите OpenSSL от имени администратора.
Хосе
Это лучший ответ и по-прежнему работает для Chrome [71.0.3578.98] по состоянию на январь-2019
ShadeBlack
Вау, это сработало, большое спасибо (на Chrome 75 - июль 2019). Вам не нужен netsh httpшаг, если вы не используете Windows Server. Также я не думаю, что необходимо экспортировать файл сертификата в pfx.
подтвержденная работа: Chrome 81 - май 2020 - Windows 7
petrosmm
15
  1. Добавьте сертификат CA в доверенное корневое хранилище CA.

  2. Зайди в chrome и включи этот флаг!

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

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

  1. Добавить на хост. C: / Windows / System32 / Drivers / и т.д. / хосты

    127.0.0.1 nextwebapp.me

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

Ariel
источник
Кажется, это совпадает с ответом, получившим наибольшее количество голосов .
Майкл - Где Клей Ширки
Я только добавил доменные имена, которые разрешены при локальной разработке, т.е. сайты * .me, в файл хоста в Windows. Люди добавляют сертификат, но иногда хост просто не может подтвердить проверку SSL, даже если сертификат установлен правильно. В этом случае мы создаем новый сеанс. Я только добавил эти советы. Я прошел эту кроличью нору слишком глубоко, поэтому хотел убедиться, что кто-то знает, что делать, если это необходимо.
Ариэль
14

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

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

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

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

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

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

Ира Рейни
источник
Рассматриваемый сайт - localhost , а CN сертификата - localhost. Да, я установил сертификат в хранилище сертификатов Windows. И IE, и Chrome жалуются на сертификат.
pjohansson
Не уверен, используете ли вы IIS или Apache, но проверьте дополнительную ссылку, которую я только что добавил, при создании самозаверяющих сертификатов для IIS.
Ира Рейни
Из-за невероятной разборчивости в проверке доменного имени в части сертификата : кто-то знает об этом больше? У меня проблема (это 2019) на Android 9 с корневым сертификатом, который Google Chrome считает небезопасным. Это нормально для FF и на рабочем столе.
BairDev
7

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

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

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

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

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

Джеймс Оравец
источник
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

TetraDev
источник
7

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

mkcert входит в основные системы управления пакетами для Windows, macOS и нескольких версий Linux.

mkcert

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" ✅
Майкл - Где Клэй Ширки
источник
6

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

введите описание изображения здесь

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

введите описание изображения здесь

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

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

certutil -addstore -user "ROOT" cert.pem
  • ROOT является внутренним именем хранилища сертификатов, упомянутым ранее.
  • cert.pem это название вашего самозаверяющего сертификата.
Der Hochstapler
источник
1
certutil -addstore -user "ROOT" cert.pemтакое винда?
Pacerier
1
@Pacerier: правильно, это для Windows.
Der Hochstapler
У вас это есть, Trusted Root Certification Authoritiesно проблема остается: imgur.com/a/mjlglVz imgur.com/a/n8BFH5S Windows 10, Chrome 78
пытаться Hard
6

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

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

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

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

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

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

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

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

Винчил Бишоп
источник
6

Я перепробовал все, и что заставило его работать: при импорте выберите правильную категорию, а именно Trusted Root Certificate Authorities :

(извините, это немецкий, но просто следуйте за изображением)

введите описание изображения здесь

Ханнес Шнайдермайер
источник
6
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
)
Алекс Ивасюв
источник
1
Это единственный, который работал для меня с Chrome 77. Спасибо за спасение моего дня.
Ромен
Как использовать созданные файлы? Я понимаю, как использовать файлы домена .crt и .key, но для чего нужен файл .csr? И как мне использовать файлы rootCA. *? Пожалуйста, продолжите свой ответ ...
Chiwda
Большое спасибо, вы только что спасли мой день!
Доданс
6

Этот пост уже заполнен ответами, но я создал сценарий bash, основанный на некоторых других ответах, чтобы упростить создание самозаверяющего сертификата TLS, действительного в Chrome (протестировано в Chrome 65.x). Надеюсь, что это полезно для других.

самоподписанный скрипт bls

После установки ( и доверия ) сертификата не забудьте перезапустить Chrome ( chrome://restart)


Еще один инструмент, который стоит проверить - это cfsslинструментарий CloudFlare :

cfssl

логан
источник
6

Чтобы создать в 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 в соответствии с приведенным ниже снимком экрана. введите описание изображения здесь

mpowrie
источник
как это сделать в Mac, пожалуйста? спасибо :)
Artanis Зератул
@mpowrie. Сгенерировав это, как мне связать его с веб-сервером Apache? На локальном сервере.
Ифеди Оконкво,
Ifedi Okonkwo: Я не уверен с веб-сервером Apache, извините, но с IIS вы добавляете привязку сайта типа https, включаете полное имя хоста и выбираете сертификат SSL.
mpowrie
Это работает как шарм. Я скажу, что вам нужно будет сделать еще один шаг, если вы хотите назначить этот сертификат в качестве привязки ... и что сертификат должен быть также в Личных> Сертификатах. Перетаскивание по какой-то причине фактически удалило его из личных сертификатов и поместило в доверенные сертификаты. Поэтому убедитесь, что вы скопировали и вставили его.
СтивенПэдамс
5

SSL / HTTPS localhost исправить на Mac / OSX:

  1. Нажмите на красный замок с крестиком в адресной строке, когда пытаетесь открыть свою локальную среду https. Там откроется окно с некоторой информацией о сертификате.

  2. Нажмите на информационное окно «Детали»

  3. Инструменты разработчика Chrome открываются на вкладке «Безопасность». Нажмите на Просмотр сертификата . Изображение сертификата
  4. Добавьте его в цепочку ключей «Система» (а не в цепочку ключей «Логин», которая выбрана по умолчанию).

  5. Откройте вашу связку ключей (снова) и найдите сертификат. Нажмите на нее и убедитесь, что вы «доверяете» всем.

  6. Перезапустите Chrome, и он должен работать.

cscheltinga
источник
Глупый графический интерфейс может не принять сертификат в MacoOS 10.14.5, но вы можете импортировать его с помощью security import filename.pem -k ~/Library/Keychains/login.keychain. На графике
выдается
5

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

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

Хьюго Вуд
источник
Я также использую localhost, но Chrome не рад этому imgur.com/a/mjlglVz Windows 10, Chrome 78. Я следовал инструкциям здесь: stackoverflow.com/a/44398368/4983983 Я
захожу
использование общего имени "localhost" почти сработало, а затем, наконец, оно сработало, когда я также запустил chrome с опцией--allow-insecure-localhost
pestophagous
5

Начиная с 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, чтобы зеленый замок вернулся.

Адриано Роза
источник
Это работает для поддоменов, api.domain.devно у меня все еще есть страница с предупреждением domain.dev: This server could not prove that it is domain.dev; its security certificate is from *.domain.dev. This may be caused by a misconfiguration or an attacker intercepting your connection.Есть идеи?
Франсуа Ромен
5

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

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

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

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

Соевый боб
источник