Хотя есть похожие вопросы и даже хорошие ответы, они либо не занимаются конкретно локальным хостом или спросите об одном конкретном варианте/решении (самоподписанный или CA).
Какие есть варианты? Как они сравниваются? Как мне это сделать?
Хотя есть похожие вопросы и даже хорошие ответы, они либо не занимаются конкретно локальным хостом или спросите об одном конкретном варианте/решении (самоподписанный или CA).
Какие есть варианты? Как они сравниваются? Как мне это сделать?
tl;dr Создать сертификат, выданный собственным ЦС (см. сценарий ниже)
Вот что я нашел. Поправьте меня, где я не прав.
Есть ЦС (центры сертификации). Они выдают сертификаты (подписывают CSR) для других ЦС (промежуточные ЦС) или серверов (сертификаты конечных объектов). Некоторые из них являются корневыми. У них есть самоподписанные сертификаты, выпущенные ими самими. То есть обычно существует цепочка доверия, которая идет от сертификата сервера к корневому сертификату. А за корневой сертификат никто не поручится. Таким образом, у ОС есть хранилище корневых сертификатов (или хранилище политик доверия), общесистемный список доверенных корневых сертификатов. Браузеры имеют свои собственные списки доверенных сертификатов, которые состоят из общесистемного списка и сертификатов, которым доверяет пользователь.
В Chromium вы управляете сертификатами по адресу chrome://settings/certificates. В Firefox Preferences > Privacy & Security > Certificates > View Certificates
. У обоих есть вкладка «Авторитеты», которая представляет собой список доверенных корневых сертификатов. И вкладка Серверы, список сертификатов доверенных серверов.
Для получения сертификата вы создаете CSR (запрос на подпись сертификата), отправляете его в CA. CA подписывает CSR, превращая его в доверенный сертификат в процессе.
Сертификаты и CSR представляют собой набор полей с информацией и открытым ключом. Некоторые поля называются расширениями. Сертификат ЦС — это сертификат с basicConstraints = CA:true
.
Вы можете проверить ошибки сертификата в Chromium в Developer Tools > Security
.
Когда вы меняете корневое хранилище сертификатов ОС, вам необходимо перезапустить браузер. Вы меняете его с помощью:
# trust anchor path/to/cert.crt
# trust anchor --remove path/to/cert.crt
trust
помещает сертификаты ЦС в категорию "авторитетных" (trust list
) или в категорию "другие записи" в противном случае. Сертификаты ЦС отображаются на вкладке «Центры» в браузерах или на вкладке «Серверы».
Firefox не доверяет сертификатам сервера из корневого хранилища сертификатов ОС, в отличие от Chromium. Оба доверяют сертификатам ЦС из корневого хранилища сертификатов ОС.
В Chromium и Firefox вы можете добавлять (импортировать) сертификаты на вкладку «Уполномоченные». Если вы попытаетесь импортировать сертификат, отличный от центра сертификации, вы получите сообщение «Не центр сертификации». После выбора файла появляется диалоговое окно, в котором можно указать параметры доверия (когда доверять сертификату). Соответствующим параметром для обеспечения работы сайта является «Доверять этому сертификату для идентификации веб-сайтов».
В Chromium вы можете добавлять (импортировать) сертификаты на вкладке Серверы. Но они попадают либо на вкладку «Власти» (сертификаты ЦС, и после выбора файла вам не открывается диалоговое окно настроек доверия), либо на вкладку «Другие» (если сертификат не ЦС).
В Firefox вы не можете точно добавить сертификат на вкладку «Серверы». Вы добавляете исключения. И там можно доверять сертификату вообще без расширений (плохо).
Моя система поставляется со следующими настройками по умолчанию (расширения, которые необходимо добавить) для сертификатов:
basicConstraints = critical,CA:true
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
Взято из /etc/ssl/openssl.cnf, раздел < a href="https://github.com/openssl/openssl/blob/OpenSSLPreferences > Privacy & Security > Certificates > View Certificates
1_0h/apps/openssl.cnf#L224-L255" rel="noreferrer">v3_ca. Подробнее об этом здесь.
Кроме того, Chromium считает сертификат недействительным, если в нем нет subjectAltName = DNS:$domain
.
Из раздела [ usr_cert ]
документа /etc/ssl/openssl.cnf
:
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
Чтобы Chromium доверял самоподписанному сертификату, он должен иметь basicConstraints = CA:true
и subjectAltName = DNS:$domain
. Для Firefox недостаточно даже этого:
basicConstraints = critical,CA:true
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
subjectAltName = DNS:$domain
Firefox не нуждается в расширениях, но Chromium требует subjectAltName
.
openssl
шпаргалкаopenssl genpkey -algorithm RSA -out "$domain".key
— сгенерировать закрытый ключ (man )
openssl req -x509 -key "$domain".key -out "$domain".crt
— создать самоподписанный сертификат (man а>)
Без -subj
он будет задавать вопросы, касающиеся отличительного имени (DN), например, общего имени (CN), организации (O), местности (L). Вы можете ответить на них «заранее»: -subj "/CN=$domain/O=$org"
.
Чтобы добавить расширение subjectAltName
, вам нужно либо иметь конфиг, где все это указано, либо добавить раздел в конфиг и указать openssl
его имя с переключателем -extensions
:
-config <(cat /etc/ssl/openssl.cnf - <<END
[ x509_ext ]
basicConstraints = critical,CA:true
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
subjectAltName = DNS:$domain
END
) -extensions x509_ext
openssl req -new -key "$domain".key -out "$domain".csr
— генерировать CSR, может использоваться опция -subj
(мужчина)
openssl x509 -req -in "$domain".csr -days 365 -out "$domain".crt \
-CA ca.crt -CAkey ca.key -CAcreateserial
- подписать CSR (man)
Без -CAcreateserial
не работает. Он создает файл ca.srl
, в котором хранится серийный номер последнего сгенерированного сертификата. Чтобы добавить subjectAltName
, вам понадобится переключатель -extfile
:
-extfile <(cat <<END
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
subjectAltName = DNS:$domain
END
)
openssl req -in $domain.csr -text -noout
— просмотреть CSR (man)
openssl x509 -in $domain.crt -text -noout
- просмотреть сертификат (man)
(вам понадобится исключение в Firefox, чтобы оно работало)
#!/usr/bin/env bash
set -eu
org=localhost
domain=localhost
sudo trust anchor --remove "$domain".crt || true
openssl genpkey -algorithm RSA -out "$domain".key
openssl req -x509 -key "$domain".key -out "$domain".crt \
-subj "/CN=$domain/O=$org" \
-config <(cat /etc/ssl/openssl.cnf - <<END
[ x509_ext ]
basicConstraints = critical,CA:true
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
subjectAltName = DNS:$domain
END
) -extensions x509_ext
sudo trust anchor "$domain".crt
#!/usr/bin/env bash
set -eu
org=localhost-ca
domain=localhost
sudo trust anchor --remove ca.crt || true
openssl genpkey -algorithm RSA -out ca.key
openssl req -x509 -key ca.key -out ca.crt \
-subj "/CN=$org/O=$org"
openssl genpkey -algorithm RSA -out "$domain".key
openssl req -new -key "$domain".key -out "$domain".csr \
-subj "/CN=$domain/O=$org"
openssl x509 -req -in "$domain".csr -days 365 -out "$domain".crt \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-extfile <(cat <<END
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
subjectAltName = DNS:$domain
END
)
sudo trust anchor ca.crt
Нгинкс:
server {
listen 443 ssl;
ssl_certificate ssl/localhost.crt;
ssl_certificate_key ssl/localhost.key;
...
Морбо:
carton exec morbo --listen='https://*:3000?cert=localhost.crt&key=localhost.key' \
site.pl
P.S. Я использую Chromium 65.0.3325.162, Firefox 59.0 и openssl-1.1.0.g
.
Судя по всему, в Windows нет утилиты trust
. В Windows есть два хранилища: хранилища сертификатов локального компьютера и текущего пользователя. Нет смысла использовать хранилище сертификатов локального компьютера, поскольку мы заставляем его работать только для нашего текущего пользователя. Затем есть подмагазины. Два из них представляют наибольший интерес: доверенные корневые центры сертификации и хранилища промежуточных центров сертификации. Обычно упоминается в командной строке как root и CA.
Вы можете получить доступ к Диспетчеру сертификатов Chrome, перейдя по ссылке chrome://settings/?search=Manage%20certificates, а затем нажав Управление сертификатами. Наибольший интерес представляют вкладки Доверенные корневые центры сертификации и Промежуточные центры сертификации.
Одним из способов управления сертификатами является командная строка. :
>rem list Current User > Trusted Root Certification Authorities store
>certutil.exe -store -user root
>rem list Local Machine > Intermediate Certification Authorities store
>certutil.exe -store -enterprise CA
>rem GUI version of -store command
>certutil.exe -viewstore -user CA
>rem add certificate to Current User > Trusted Root Certification Authorities store
>certutil.exe -addstore -user root path\to\file.crt
>rem delete certificate from Current User > Trusted Root Certification Authorities store by serial number
>certutil.exe -delstore -user root 03259fa1
>rem GUI version of -delstore command
>certutil.exe -viewdelstore -user CA
Результаты следующие (как для локального компьютера, так и для хранилищ сертификатов текущего пользователя):
root
localhost.crt
error
ca.crt
appears in Trusted Root Certification Authorities tab
CA
localhost.crt
doesn't work, appears in Other People tab
ca.crt
doesn't work, appears in Intermediate Certification Authorities tab
Другими вариантами могут быть двойной щелчок по сертификату в проводнике, импорт сертификатов из диспетчера сертификатов Chrome, использование оснастки MMC «Сертификаты» (запустите certmgr.msc
) или использование CertMgr.exe
.
Для тех, у кого установлен grep
, вот как быстро проверить, где находится сертификат:
>certutil.exe -store -user root | grep "localhost\|^root\|^CA" ^
& certutil.exe -store -user CA | grep "locahost\|^root\|^CA" ^
& certutil.exe -store -enterprise root | grep "localhost\|^root\|^CA" ^
& certutil.exe -store -enterprise CA | grep "localhost\|^root\|^CA"
Таким образом, установка сертификата CA в хранилище Current User > Trusted Root Certification Authorities кажется лучшим вариантом. И убедитесь, не забудьте перезапустить браузер.
OpenSSL
genpkey
req
x509
Центр сертификации OpenSSL
Сертификаты для локального хоста< br> iamaCA — Станьте собственным центром сертификации и выдавайте сертификаты
Firefox и самоподписанные сертификаты
< href="https://stackoverflow.com/a/ 47646463/52499">Обход страницы ошибки сертификата в Chrome
easy-rsa
. Я столкнулся с этим при настройке OpenVPN. Это должно упростить получение сертификатов CA (в частности, создание CA и серверных сертификатов). Хотя не пробовал.
- person x-yuri; 17.05.2018
В chrome можно перейти к chrome://flags/#allow-insecure-localhost и включить
Разрешить недействительные сертификаты для ресурсов, загружаемых с локального хоста. вариант
откройте эту ссылку в своем браузере и включите ее: chrome://flags/#temporary- unexpire-flags-m87
затем перезапустите хром и выполните поиск на локальном хосте, вы найдете его там.