Змусити Chrome прийняти самопідписаний сертифікат localhost


1206

Я створив самопідписаний сертифікат SSL для локального господаря CN. Firefox приймає цей сертифікат після того, як спочатку скаржився на нього, як очікувалося. Однак Chrome і IE відмовляються приймати його навіть після додавання сертифіката до сховища системних сертифікатів у розділі Trusted Roots. Навіть незважаючи на те, що сертифікат вказаний як правильно встановлений, коли я натискаю "Переглянути інформацію про сертифікат" у спливаючому HTTPS Chrome, він все ще стверджує, що сертифікату не можна довіряти.

Що я повинен зробити, щоб Chrome прийняв сертифікат і перестав скаржитися на нього?


13
Коли ви кажете, що Firefox скаржиться на це спочатку, ви маєте на увазі, що він просить вас додати виняток із сертифікату? Це не повинно статися, якщо сертифікат встановлено правильно. Мені здається, що всі три браузери скаржаться, але Firefox дозволяє скасувати його скаргу. Я публікую це як коментар, оскільки у мене немає конкретної відповіді, але я зробив саме це, і він працює чудово у всіх трьох браузерах. Я б запропонував вам спробувати спробувати спочатку працювати над IE, а потім, як тільки це радіє, турбуйтеся про інших двох. Вибачте, я не міг бути кориснішим!
starskythehutch

1
Ви повинні створити добре сформований сертифікат, включаючи спосіб подання імен DNS. OpenSSL не представляє їх таким чином, щоб задовольнити браузери поза вікном. Див. Як створити сертифікат з власним підписом за допомогою openssl? .
jww

4
Firefox не використовує сховище системних сертифікатів.
curiousguy

4
Якщо у вашому підписі cert використовується SHA-1, останні версії Chrome (приблизно 57) відображатимуть попередження, навіть якщо ви змогли успішно додати свій спеціальний сертифікат . Незважаючи на це , «Безпека» панелі інструментів розробника буде говорити більш конкретно , в чому проблема , наприклад: net::ERR_CERT_WEAK_SIGNATURE_ALGORITHM.
SeldomNeedy

2
Я просто перестав використовувати Chrome для цілей розробки, оскільки це не зручно для розробників. Зазвичай людина, яка опинилася в цій ситуації, знає, що все одно робить. Дякую, але не дякую. У мене вистачило розчарування в Chrome!
Гтодоров

Відповіді:


66

2020-05-22 : маючи лише 6 команд оболонки , ви можете це досягти.

Будь ласка , не змінюйте налаштування безпеки вашого браузера.

За допомогою наступного коду ви можете (1) стати власною ЦА, (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та переконайтесь, що ви встановили "Загальне ім'я" таким самим, як і $NAMEколи він просить налаштування

Ви можете перевірити свою роботу

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

2
Браузери @maverick та операційні системи постачають обмежену кількість ЦА, яким вони довіряють. Хоча будь-хто може стати КА, щоб хто-небудь міг довіряти своїм сертифікатам, їм знадобиться, щоб люди вручну додавали їх як довірену ЦС (як ми це робимо Chrome, коли ми імпортуємо сертифікат вручну).
JellicleCat

2
Чудово! Два зауваження для таких користувачів Mac, як я: В останньому рядку використовуйте -days 825замість -days 1825через superuser.com/questions/1492643/… , і варто зазначити, що для імпорту кореневої cert в Key Chain Access вам потрібно не лише "Файл > Імпортувати файл ", але потім також знайти його у списку, клацніть правою кнопкою миші, розгорніть"> Довіряти "та виберіть" Завжди ".
michielbdejong

2
якщо вам потрібен PEM- файл замість CRT- файлу для вашого локального сервера розробників, не хвилюйтесь, просто комбінуйте .crt і .csr файли та збережіть їх у форматі .pem , і ви готові йти.
Керем Байдоган

1
ОСТАННІ РОБОТИ! БРАВО для цієї відповіді. Будь ласка, не забудьте завантажити myCA.pem на ваш Chrome або Firefox (Налаштування> Керування сертифікатами> Організації> Імпорт)
Fryser wow

3
Я змінив DNS.1 на IP.1 для свого IP-сервера на основі IP. Це працює. Дякую.
dw1

764

Для localhostтільки:

Просто вставте це у свій хром:

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

Ви повинні побачити виділений текст, який говорить: Дозволити недійсні сертифікати для ресурсів, завантажених з localhost

Клацніть Enable.


3
Вимикає попередження ... але також кеш! bugs.chromium.org/p/chromium/isissue/detail?id=103875
Hugo Wood

4
це не спрацює, якщо ви користуєтеся хромом у режимі інкогніто (для переключення ідентифікацій, наприклад), але дуже чистим інакше
baywet

5
Це - якщо ви можете витримати дратівливу червону не захищену повідомлення. Інакше це години таємничих закликів opensl, а потім намагаються мати справу з внутрішнім менеджером cert в Chrome.
тембо

10
Я не знаю, чому за цю відповідь було проголосовано, але є різниця між недійсним сертифікатом та самопідписаним сертифікатом. Питання про самопідписаний cert.
Мехді

2
Не працювали для мене взагалі. Те , що спрацювало для мене було створити власний сертифікат , включаючи SubjectAltName, як пояснює цей відповідь: stackoverflow.com/a/42917227/2873507
Вік Seedoubleyew

507

Це працювало для мене:

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

Ви повинні отримати приємний зелений замок на своїх сторінках зараз.

EDIT: Я знову спробував це на новій машині, і сертифікат не з’явився у вікні Керувати сертифікатами, просто перейшовши на червону сторінку ненадійного сертифіката. Мені довелося зробити наступне:

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

143
Я спробував це на машині Linux, але він сказав, що імпорт не вдався, оскільки xxx.xxx.com: Не Сертифікаційний орган.
мат

15
Дякуємо @kellen .. однак, використовуючи бета-версію Chrome версії 29.0.1547.57, не з’являється опція "Експорт" ніде в Інформацію про сертифікат. Однак, є розділ "Деталі", але це не у формі вкладки. Він відображається як збірний / розширюваний блок. i.imgur.com/dDmNEIh.png
кавалькада

20
У Chrome 37 вже немає корисної описової Exportкнопки. Це, здається, було замінено чудовою Copy to fileкнопкою. Чому "експорт" не зберігався, розум лише буксує
kolin

13
@Jakobud, просто перетягніть символ сертифіката на робочий стіл або щось таке, і воно експортується. Однак решта відповідей не працює на OS X (Yosemite), наскільки я можу сказати (Chrome 39).
дб

33
Як і в Chrome 56, для доступу до параметрів сертифікатів SSL в Windows вам потрібно скористатися Інструментами для розробників (CTRL + SHIFT + i), перейти на вкладку "Безпека" і натиснути кнопку "Переглянути сертифікат".
void.pointer

167

ОНОВЛЕННЯ ДЛЯ ХРОМУ 58+ (ВІДНОВЛЕНО

Станом на Chrome 58 commonName було вилучено можливість ідентифікації лише хоста . Тепер сертифікати повинні використовуватись subjectAltNameдля ідентифікації свого господаря. Дивіться подальшу дискусію тут та програму відстеження помилок тут . У минулому subjectAltNameвикористовувались лише для сертів з декількома хостами, тому деякі внутрішні інструменти CA не включають їх.

Якщо ваші самопідписані сертифікати працювали нормально в минулому, але раптом почали створювати помилки в Chrome 58, ось чому.

Тож незалежно від методу, який ви використовуєте для створення вашої самопідписаної cert (або cert, підписаної самопідписаним CA), переконайтеся, що cert сервера містить а 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


12
Дякуємо за публікацію про оновлення Chrome 58+! Для людей, які прагнуть створити сертифікат, що підписується самостійно, який включає SAN у Windows, один простий спосіб - використовувати команду New-SelfSignedCertificate PowerShell. New-SelfSignedCertificate -DnsName localhost -CertStoreLocation cert:\LocalMachine\My
DanO

3
@ ДАНО ДЯКУЄМО! Жоден з інших обхідних шляхів не працював для мене на 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
«Глядач серт У Chrome (який перейшов в" безпеки " на вкладці під F12) , ви повинні побачити його в списку під , Extensionsяк Certificate Subject Alternative Name». Я не бачу жодного розділу "Розширення", коли я відкриваю вкладку "Захист" в інструментах розробки F12 (Chrome 62). Чи перенесено його в інше місце?
Грім

142

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

Сертифікати Google Chrome, Mac OS X та власні підписи SSL

В основному:

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

12
Що важливо, можливо, вам знадобиться перезапустити Chrome, щоб це набуло чинності.
Xiong Chiamiov

10
Мені довелося відредагувати параметри сертифікатів і дозволити довіряти SSL вручну
NeDark

1
Це працювало для мене на Yosemite, 10.10.5, Chrome Версія 46.0.2490.80 (64-розрядна). Дякую!
romellem

2
Працював над El Capitan, не вимагається перезавантаження. Я додав cert, натиснув на нього, розширив спадне меню Trust і встановив його Always Trustдля розділу SSL. В основному те, що сказав @NeDark.
Том

1
Мені потрібно було перетягнути сертифікат із робочого столу в Keychain, а потім зробити схвалення.
jmq

129

Клацніть будь-де на сторінці та введіть 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
гри

8
Цей код змінено з нової версії. Нова фразаthisisunsafe
«Ява Гай»

6
У Chrome 65 у Windows 10 введення тексту, thisisunsafeздається, впливає лише на додавання цього сайту до винятків. (У адресному рядку все ще написано "Не захищено" червоним кольором.)
Райан

2
це працює, але лише для першого завантаження, якщо ви перейдете на сторінку, вам доведеться знову набрати bupass_squence
talsibony

"thisisunsafe" BYPASS_SEQUENCE було єдиним на цій сторінці, яке працювало на мене на Mac Chrome 72. Я відчуваю, що мені не потрібно було турбуватися, створюючи свій самопідписаний сертифікат ...!
Jono

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


Чудово, я люблю ваші сценарії. Вам не потрібна 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, щоб уникнути помилок у відсутності альтернативних назв теми

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

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.8ж 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.key" Я думав, що цю команду потрібно створити device.key, але, схоже, якимось чином намагаюся її прочитати
Ленні

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. Виберіть двійковий X.509 (.CER) , кодований DER , натисніть кнопку Далі

    4. Клацніть Огляд ... і збережіть файл на комп’ютері. Назвіть це щось описово. Клацніть Далі , потім натисніть кнопку Готово .

    5. Відкрийте налаштування Chrome, прокрутіть донизу та натисніть Показати розширені налаштування ...

    6. У розділі HTTPS / SSL натисніть Управління сертифікатами ...

    7. Натисніть Root Certification Довірені вкладку, а потім натисніть Імпортувати ... кнопку. Відкриється майстер імпорту сертифікатів. Клацніть Далі, щоб перейти до екрана " Файл до імпорту ".

    8. Клацніть Огляд ... і виберіть збережений раніше файл сертифіката, а потім натисніть кнопку Далі .

    9. Виберіть Розмістити всі сертифікати в наступному магазині . Вибраний магазин повинен бути довіреними органами сертифікації кореневих програм . Якщо це не так, натисніть Огляд ... і виберіть його. Клацніть Далі та Готово

    10. Натисніть Так на попередженні безпеки.

    11. Перезавантажте Chrome.


2
@AJeneral Так, Chrome знову змінився. Інструкції в цій статті працювали для мене нещодавно.
kmgdev

2
Ця опція не існує в останньому Mac Chrome на дату цього коментаря.
y3sh

1
@kgrote, Chrome не має власного магазину сертифікатів. Все, що він робить, це додавання та видалення Windows. Таким чином, кращий спосіб - просто використовувати certmgr.mscдля додавання та видалення certs.
Pacerier

1
Зробив для мене спасибі. Довелося перезапустити Chrome, а головне, мій сертифікат повинен був закінчитися до 2017 року. SHA-1.
ioanb7

1
ХРОМ ЗМІНЕНО ВСІ ПРОТИ! Тепер крок "В адресному рядку натисніть на маленький замок із символом X. Це відкриє невеликий інформаційний екран". не працює.
Бруно Броноський

59

Якщо ви перебуваєте на комп'ютері Mac і не бачите вкладки експорту або як отримати сертифікат, це працювало для мене:

  1. Клацніть замок перед https: //
  2. Перейдіть на вкладку "З'єднання"
  3. Натисніть "Інформація про сертифікат"

    Тепер ви повинні побачити це: Різна інформація, звичайно, та ваша, слід позначати як довірену (інакше ви, ймовірно, не були б тут)

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

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

    У деяких випадках цього достатньо, і тепер ви можете оновити сторінку.

    Інакше:

  6. Двічі клацніть нещодавно доданий сертифікат.
  7. У спадному меню "Довіра" змініть параметр "При використанні цього сертифіката" на "Завжди довіряти"

Тепер перезавантажте відповідну сторінку, і це повинно бути вирішено! Сподіваюсь, це допомагає.


Правка від Вольфа

Щоб зробити це трохи простіше, ви можете скористатися наступним сценарієм ( джерелом ):

  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

1
Такий підхід працював для мене на OS X Mavericks, опція експорту не була доступна, як описано у верхній відповіді вище.
Кевін Лірі

Чудово працює. Блокування перед https все-таки перекреслено, але це добре, тому що більше немає дратівливого спливаючого вікна.
напів

Це працювало для мене на Mac Catalina. Дякую! :)
Саураб

58

ОНОВЛЕНО 23.04.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/isissue/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"
smihael

Кожен, хто намагається використовувати localhost з https для службовців, перший пункт If-all-fails працював для мене на chrome 60 ubuntu 14.04
formatkaka

це все ще буде вважати cert недійсним і змусить керувати паролем відмовитись від роботи
Рей Фосс

34

Для тестового середовища

Ви можете використовувати --ignore-certificate-errorsяк параметр командного рядка під час запуску chrome (Робота над версією 28.0.1500.52 на Ubuntu).

Це призведе до ігнорування помилок та підключення без попередження. Якщо у вас вже є версія запуску хрому, вам потрібно буде закрити це перед перезапуском з командного рядка, або воно відкриє нове вікно, але ігнорує параметри.

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

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


5
Це працювало для мене в Windows 8! Я просто клацнув правою клавішею миші на хромовому ярлику> Властивості> Змінено поле "Ціль" на зразок цього (зауважте, що "-ignore-сертифікат-помилки" слід додавати після цитати та з пробілом): "C: \ Program Files (x86) \ Google \ Chrome \ Application \ chrome.exe "- помилки-сертифікат-помилки
mikhail-t

1
Це не дає відповіді на питання, а його небезпечно. Питання полягало в тому, як змусити Chrome довіряти сертифікату сервера, який самостійно підписав; а не як ігнорувати попередження та помилки.
jww

1
Це єдине рішення, яке працювало для мене на Chrome (63.0.3239.108) з Windows 7 (64-розрядні). Що стосується безпеки, я створив спеціальний значок на робочому столі, який запускаю лише при розробці на локальній віртуальній машині. Імпорт самопідписаних локальних сертифікатів, налаштування chrome: // прапорів та домену HSTS не допомогли. Chrome безумовно повинен зберігати цю стару добру кнопку "Додати виняток із безпеки" - це дозволило б заощадити 2 години на боротьбі з марними налаштуваннями.
lubosdz

Цей підручник працював як шарм! youtube.com/watch?v=qoS4bLmstlk
Джонатан Мартінс

20

Як хтось зазначав, вам потрібно перезапустити ВСЕ Chrome, а не лише вікна браузера. Найшвидший спосіб зробити це - відкрити вкладку, щоб ...

chrome://restart


Гей! Просто хотів зазначити, що саме це зафіксувало мене. Я додав власну службу CA в магазин довіри, це завжди працювало для мене таким чином. Я спробував Firefox і працював бездоганно, але не хромований. Зрештою, це було тому, що, здається, вам потрібно повністю перезапустити хром, як ви згадуєте. Можливо, Chrome продовжує користуватися тим самим сховищем довіри, поки ці фонові процеси все ще запущені.
Хосе Сіфуентес

19

WINDOWS JUN / 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 / LocalComputer / ОК) я імпортував 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" для довірених кореневих сертифікатів, але все одно я отримую таку ж помилку:

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

Але я зрозумів, що я повинен імпортувати сертифікат root права, а не сертифікат для домену. Тому я використовував консоль mmc (Файл / Додати або видалити оснастки / сертифікати / Додати / рахунок Computert / LocalComputer / ОК), я імпортував rootCA.pem у магазин довірених кореневих сертифікатів.

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

Перезавантажте Chrome і et voilà, що працює.

З localhost:

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

Або з IP-адресою:

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

Єдиного, чого я не міг досягти, це те, що він має застарілий шифр (червоний квадрат на малюнку). З цього приводу цінується допомога.

З допомогою makecert не можна додати інформацію про SAN. Завдяки New-SelfSignedCertificate (Powershell) ви можете додати інформацію про SAN, вона також працює.


2
Важливо: запустіть OpenSSL як адміністратор.
Хосе А

Це найкраща відповідь і все ще працює для Chrome [71.0.3578.98] станом на січень-2019
ShadeBlack

Нічого не обійшлося, спасибі велике (на Chrome 75 - липень 2019 року). Цей netsh httpкрок вам не потрібен, якщо ви не використовуєте сервер Windows. Також я не думаю, що потрібно експортувати файл cert в pfx.

підтверджено роботу: Chrome 81 - травень 2020 р. - Windows 7
petrosmm

15
  1. Додайте сертифікат CA у надійний кореневий магазин Google Store.

  2. Перейдіть на хром і ввімкніть цей прапор!

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

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

  1. Додати в хост. C: / windows / system32 / драйвери / etc / hosts

    127.0.0.1 nextwebapp.me

Примітка. Якщо веб-переглядач уже відкрито, це буде відображатися помилка. Тож закрийте веб-переглядач і почніть знову. А ще краще - перейти в режим інкогніто або розпочати новий сеанс для негайного ефекту.


Це, здається, те саме, що відповідь на голоси .
Майкл - Де Клей

До хост-файлу в Windows я додав лише доменні імена, дозволені в локальній розробці, тобто * .me сайти. Люди додають сертифікат, але іноді хост просто не може перевірити перевірку SSL, навіть якщо сертифікат встановлений належним чином. У такому випадку ми створюємо новий сеанс. Я лише додав ці поради. Я пройшов через цю кролячу нору занадто глибоко, тому хотів переконатися, що хтось знає, що робити, якщо це знадобиться.
Аріель

14

Ви впевнені, що адреса, на яку подається сайт, така сама, як і у сертифікаті? У мене були ті ж проблеми з Chrome і самопідписаним cert, але врешті-решт я виявив, що це просто неймовірно прискіпливо щодо перевірки доменного імені на cert (як це має бути).

У Chrome немає власного магазину cert і використовує власний Window. Однак Chrome не надає можливості імпортувати серти в магазин, тому вам слід додати їх через IE.

Встановлення сертифікатів у Google Chrome

Встановлення сертифікатів в Internet Explorer

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

Як створити самопідписаний сертифікат у IIS 7


Розглянутий сайт - localhost , а CN сертифіката - "localhost". Так, я встановив сертифікат у магазині сертифікатів Windows. І IE, і Chrome скаржаться на сертифікат.
pjohansson

Не впевнений, що ви використовуєте IIS або Apache, але перевірте додаткове посилання, яке я щойно додав, створюючи сертифікати, що підписуються для IIS.
Ira Rainey

Через неймовірно прискіпливе ставлення до валідації доменного імені в частині cert : хтось знає про це більше? У мене є проблема (це 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

Вам потрібно буде слідкувати за блогом про те, як отримати файл cert, після чого ви можете скористатися командою, наведеною вище, і слід добре пройти.


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,.) Відкрити використання: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


7

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

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 - це назва вашої самопідписаної довідки.

1
certutil -addstore -user "ROOT" cert.pemце Windows?
Pacerier

1
@Pacerier: Правильно, це для Windows.
Der Hochstapler

У вас є Mave, Trusted Root Certification Authoritiesале все ще залишається випуск: imgur.com/a/mjlglVz imgur.com/a/n8BFH5S Windows 10, хром 78
пробуючи Хард

6

Це працювало для мене. Дивіться: http://www.robpeck.com/2010/10/google-chrome-mac-os-x-and-self-signed-ssl-certificate/#.Vcy8_ZNVhBc

В адресному рядку натисніть маленький замок із символом X. Це відкриє невеликий інформаційний екран. Натисніть кнопку із написом "Інформація про сертифікат".

Клацніть та перетягніть зображення на робочий стіл. Це виглядає як невеликий сертифікат.

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

Не забудьте додати сертифікат до системного брелока, а не брелок для входу. Натисніть "Завжди довіряйте", хоча це, здається, нічого не робить.

Після його додавання двічі клацніть його. Можливо, вам доведеться знову підтвердити автентифікацію.

Розгорніть розділ «Довіра».

"Під час використання цього сертифіката" встановіть значення "Завжди довіряти"


6

Я спробував усе, і це змусило його працювати: під час імпорту виберіть потрібну категорію, а саме: Довірені кореневі сертифікати :

(вибачте, що це німець, але просто слідкуйте за зображенням)

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


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
Це єдиний, хто працював на мене з хромом 77. Дякую, що ти врятував мій день.
Ромен

Як можна використовувати створені файли? Я розумію, як використовувати доменні файли .crt та .key, але для чого це .csr файл? І як я можу використовувати файли rootCA. *?
Розкрийте,

Дуже дякую, ви просто врятували мені день!
dodancs

6

Ця публікація вже заповнена відповідями, але я створив сценарій bash на основі деяких інших відповідей, щоб полегшити генерацію самопідписаного сертифіката TLS, дійсного в Chrome (Тестовано у Chrome 65.x). Сподіваюся, це корисно для інших.

самопідписаний-tls баш сценарій

Після того як ви встановите ( і довіряєте ) сертифікат, не забудьте перезапустити 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. Потім перетягніть щойно створений сертифікат до магазину довірених кореневих сертифікатів \ Сертифікати відповідно до наведеного нижче екрана. введіть тут опис зображення


як це зробити в Mac, будь ласка? дякую :)
Артаніс Зератул

@mpowrie. Створивши це, як я пов'язати його з веб-сервером Apache? На сервері localhost.
Іфєді Оконкво

Ifedi Okonkwo: Я не впевнений, що веб-сервер Apache вибачте, але за допомогою IIS ви додаєте прив'язку сайту типу https, включите повністю кваліфіковане ім'я хоста та виберіть сертифікат SSL.
mpowrie

Це працює як шарм. Я скажу, що вам потрібно буде зробити ще один додатковий крок, якщо ви хочете призначити цей cert як прив'язний ... і що cert також повинен бути в Personal> Certificate. Перетягування та випадання чомусь фактично видалили його з Особистого сертифіката і помістили його в Довірені Серти. Тому переконайтеся, що ви скопіювали та вставили.
StephenPAdams

5

SSL / HTTPS виправлення localhost на mac / osx:

  1. Клацніть червоний замок із хрестом у адресному рядку, намагаючись відкрити https localhost-середовище. Відкриється вікно з деякою інформацією про сертифікат.

  2. Клацніть на інформаційному вікні "Деталі"

  3. На вкладці "Безпека" відкриється інструмент для розробників хрому. Клацніть на Переглянути сертифікат . Зображення сертифіката
  4. Додайте його до брелоку "Система" (а не брелок "Логін", який вибрано за замовчуванням).

  5. Відкрийте брелок (знову) і знайдіть сертифікат. Клацніть на ньому і переконайтесь, що ви "довіряєте" всім.

  6. Перезавантажте хром, і він повинен працювати.


Дурний графічний інтерфейс може не приймати сертифікат у MacoOS 10.14.5, але ви можете імпортувати його security import filename.pem -k ~/Library/Keychains/login.keychain. Графіка дає помилку -25294
boatcoder

5

У мене виникла та сама проблема: я встановив сертифікат у магазині довірених кореневих авторитетів Windows, а Chrome все ще відмовився від сертифіката з помилкою ERR_CERT_COMMON_NAME_INVALID. Зауважте, що коли сертифікат неправильно встановлений у магазині, помилка є ERR_CERT_AUTHORITY_INVALID.

Як натякають на ім’я помилки, цей коментар і це питання , проблема лежала в оголошеному доменному імені в сертифікаті. Коли під час генерації сертифікату було запропоновано "Загальне ім'я", мені довелося ввести доменне ім'я, яке я використовував для доступу до сайту ( localhostу моєму випадку). Я перезапустив Chrome за допомогою, chrome://restartі він нарешті був задоволений цим новим сертифікатом.


Я також використовую localhost, але хром це не радий imgur.com/a/mjlglVz Windows 10, Chrome 78. Я дотримувався інструкції звідси: stackoverflow.com/a/44398368/4983983 Я
переходжу

використання загальної назви "localhost" майже спрацювало, а потім, нарешті, воно спрацювало, коли я також запустив хром з опцією--allow-insecure-localhost
пестофаг

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, потім двічі клацніть на сертифікаті, розгорніть довіру та виберіть Завжди довіряти

Оновіть сторінку 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

Дозвіл незахищеного localhost добре працювати за допомогою цього методу chrome: // flags / # enable-insecure-localhost

Просто вам потрібно створити ім'я хоста розробки на xxx.localhost.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.