
Я хочу протестировать свое веб-приложение на https localhost. К сожалению, кажется невозможным удалить предупреждение о сертификате из Chrome. Сначала я сгенерировал сертификат следующим образом:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/localhost-selfsigned.key -out /etc/ssl/certs/localhost-selfsigned.crt
Затем я хотел добавить его в Chrome, настройки > дополнительные > управление сертификатами -> импорт. Я пытаюсь импортировать файл .crt, сгенерированный ранее, и все, что я получаю, это:
Ошибка импорта сертификата: закрытый ключ для этого клиентского сертификата отсутствует или недействителен.
Я погуглил, но ничего полезного не нашел.
Я также пробовал включить флаг allow-insecure-localhost и открыть Chrome, --ignore-certificate-errors
но он все еще показывает предупреждение и сломанный https
Есть ли другие способы или я что-то не так делаю с сертификатом?
решение1
Я думаю, что вы пытаетесь добавить его в неправильное хранилище сертификатов. Если вы пытаетесь добавить его в "Ваши сертификаты", у вас будут плохие времена. Эта вкладка предназначена для добавления сертификатов идентификации; то, что ваш браузер предлагает серверу для установления идентификации браузера.
Я думаю, что вы хотите сделать, основываясь на вашем описании, это то, что вы хотите, чтобы ваш браузер доверял самоподписанному сертификату, который будет на вашем сервере. Если это так, вам нужно добавить его на вкладке "Authorities".
решение2
Для меня сработало следующее:
- настройка центра сертификации
- подписываю свой собственный сертификат с помощью этого CA, а затем
- импорт ключа CA в Chrome (Authorities).
Я получил эту процедуру отэтотответ на SO.
Поскольку моя конкретная проблема заключалась в обслуживании многоуровневых поддоменов, я рассмотрю ее под этим углом зрения.
поддомены:
- bar.fooz.mydomain.com
- foo.fooz.mydomain.com
- Станьте центром сертификации
export CA=myca
# you probably want to have this in its own directory
mdkir /etc/ssl/$CA && cd /etc/ssl/$CA
# generate private key
openssl genrsa -des3 -out $CA.key 2048
# generate root certificate
openssl req -x509 -new -nodes -key $CA.key -sha256 -days 825 -out $CA.pem
- Создание сертификатов, подписанных CA
export NAME=fooz.mydomain.com
# if CA files were in a separate directory
cd .. && mkdir /etc/ssl/$NAME && cd /etc/ssl/$NAME
# generate private key
openssl genrsa -out $NAME.key 2048
# Create a certificate-signing request
# Once prompted, set FQDN to the value of $NAME
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
# Optionally, add additional domains (I've added a subdomain here)
DNS.2 = foo.$NAME
DNS.3 = bar.$NAME
IP.1 = 192.168.0.13 # (Optional, but probably important), 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 $CA.pem -CAkey $CA.key -CAcreateserial -out $NAME.crt -days 825 -sha256 -extfile $NAME.ext
- Загрузите
$CA.pem
файл и импортируйте его как источник в свой браузер:
1. Chrome settings (Settings > Privacy and Security > Security > Manage certificates > Authorities > Import). Check Trust this certificate for identifying websites
2. Firefox: Preferences > Privacy and Security > Certificates > View Certificates > Authorities > import. Check Trust this CA to identify websites
- Перезапустите браузер (Firefox заработал без необходимости перезапуска)
решение3
Chrome ожидает файл в формате PKCS12, который используется для хранения сертификата, любого промежуточного сертификата и закрытого ключа в одном зашифрованном файле. Эти файлы обычно имеют расширения .p12
и .pfx
.
Чтобы сгенерировать его, используйте следующую команду:
openssl pkcs12 -export -inkey ./sample.key -in ./sample.crt -out ./sample.p12
Эта команда запросит пароль, который нам нужно запомнить и использовать при импорте сгенерированного p12
файла в Chrome.