Создание сертификата * .local ssl

Я пытаюсь создать один сертификат SSL, который сделает любой сайт .local работать над https. У меня есть все .local domains, указывающие на мою локальную машину. Я использую их при разработке веб-сайтов. Множество новых функций (геопозиционирование, работники служб и т. Д.) Требуют SSL.

Я считаю, что для последних версий Chrome / Firefox старый самозанятый сертификат больше не работает.

Ниже приведены шаги, которые я предпринял после выполнения следующих рекомендаций: https://deliciousbrains.com/https-locally-without-browser-privacy-errors/

https://codeghar.wordpress.com/2008/03/17/create-a-certificate-authority-and-certificates-with-openssl/

https://stackoverflow.com/questions/27294589/creating-self-signed-certificate-for-domain-and-subdomains-neterr-cert-commo

Вот мой файл конфигурации:

#.................................. [ ca ] default_ca = CA_default [ CA_default ] dir = /home/*****/Sites/root-ca serial = $dir/serial database = $dir/index.txt new_certs_dir = $dir/certs certificate = $dir/certs/cacert.pem private_key = $dir/private/cakey.pem default_days = 3000 default_md = sha256 preserve = no email_in_dn = no nameopt = default_ca certopt = default_ca policy = policy_match copy_extensions = copyall [ policy_match ] countryName = match stateOrProvinceName = match organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = optional [ req ] default_bits = 2048 # Size of keys default_keyfile = key.pem # name of generated keys default_md = md5 # message digest algorithm string_mask = nombstr # permitted characters distinguished_name = req_distinguished_name req_extensions = v3_req [ req_distinguished_name ] # Variable name Prompt string #------------------------- ---------------------------------- 0.organizationName = Organization Name (company) organizationalUnitName = Organizational Unit Name (department, division) emailAddress = Email Address emailAddress_max = 40 localityName = Locality Name (city, district) stateOrProvinceName = State or Province Name (full name) countryName = Country Name (2 letter code) countryName_min = 2 countryName_max = 2 commonName = Common Name (hostname, IP, or your name) commonName_max = 64 # Default values for the above, for consistency and less typing. # Variable name Value #------------------------ ------------------------------ 0.organizationName_default = ***** localityName_default = ***** stateOrProvinceName_default = ***** countryName_default = ***** emailAddress_default = ***** [ v3_ca ] basicConstraints = CA:TRUE subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer:always subjectAltName = @alternate_names [ v3_req ] subjectKeyIdentifier = hash basicConstraints = CA:FALSE keyUsage = digitalSignature, keyEncipherment subjectAltName = @alternate_names nsComment = "OpenSSL Generated Certificate" [ alternate_names ] DNS.1 = *.local 

Сначала создаю новый центр сертификации:

 openssl req -new -x509 -extensions v3_ca -keyout private/cakey.pem -out certs/cacert.pem -days 3000 -config conf/caconfig.cnf 

Я дал Общее имя здесь, как мое имя

 Common Name (hostname, IP, or your name) []:Jonathan Hodgson 

Файл certs/cacert.pem затем импортирую в хром полномочия, которые работают без проблем.

Затем я создаю запрос сертификата:

 openssl req -extensions v3_req -new -nodes -out local.req.pem -keyout private/local.key.pem -config conf/caconfig.cnf 

Я назвал общее имя здесь как * .local

 Common Name (hostname, IP, or your name) []:*.local 

Затем я подписываю запрос:

 openssl ca -out certs/local.cert.pem -config conf/caconfig.cnf -infiles local.req.pem 

Я добавляю файлы в свой http-конфигуратор:

 <VirtualHost *:80> ServerName test.local ServerAlias *.local VirtualDocumentRoot /home/jonathan/Sites/%-2/public_html CustomLog /home/jonathan/Sites/access.log vhost_combined ErrorLog /home/jonathan/Sites/error.log </VirtualHost> <VirtualHost *:443> ServerName test.local ServerAlias *.local VirtualDocumentRoot /home/jonathan/Sites/%-2/public_html CustomLog /home/jonathan/Sites/access.log vhost_combined ErrorLog /home/jonathan/Sites/error.log SSLEngine On SSLCertificateFile /home/jonathan/Sites/root-ca/certs/local.cert.pem SSLCertificateKeyFile /home/jonathan/Sites/root-ca/private/local.key.pem </VirtualHost> 

Я перезапустил apache, но я все еще получаю NET::ERR_CERT_COMMON_NAME_INVALID

У меня создалось впечатление, что это связано с тем, что мне нужно было добавить subjectAltName в файл конфигурации, который я сделал.

Пожалуйста, дайте мне знать, что я должен делать по-другому.

Заранее благодарю за любую помощь

редактировать

Я думаю, проблема связана с шаблоном. Если я устанавливаю alternate_names в example.local и Common name для запроса example.local, example.local отображается как безопасный как в Chrome, так и в Firefox.

Я попытался установить DNS.1 на local и DNS.2 на *.local , тогда я просто получил ERR_SSL_SERVER_CERT_BAD_FORMAT в chrome и SEC_ERROR_REUSED_ISSUER_AND_SERIAL в firefox. Я обязательно сбрасываю свой серийный файл и файл индекса перед созданием сертификатов.

3 Solutions collect form web for “Создание сертификата * .local ssl”

Вы добавили SAN в CSR, но не ca чтобы включить расширения из CSR в сертификат. См. https://security.stackexchange.com/questions/150078/missing-x509-extensions-with-an-openssl-generated-certificate или copy_extensions страницу для ca также в Интернете по адресу copy_extensions

EDIT: вам также нужно указать x509_extensions в конфиге ca или эквивалентную, но менее удобную x509_extensions из командной строки, в любом случае указывая на существующий раздел, но может быть пустым, если вы не хотите никаких расширений, необходимых для CA. Я не заметил этого сначала, потому что я никогда не пробовал использовать расширения только из CSR, а не config, что нереально для большинства центров сертификации. Если вы укажете copy_extensions отличное от none (и у CSR есть некоторые), но не укажите x509_extensions тогда ca действительно x509_extensions расширения в cert, но не устанавливает версию сертификата версии v3, как это требуется стандартами (например, rfc5280), когда расширения настоящее время.

Это спорно, если это ошибка; x509_extensions/extensions говорит, что x509_extensions/extensions управляет установкой v3, и, не говоря ни слова о copy_extensions что copy_extensions подразумевает, что это не так, но IMHO, это, безусловно, очень субоптимальная функция.

ОДНАКО: в моем тесте это на самом деле не решило вашу проблему. Несмотря на то, что сертификат имеет *.local в SAN и CN и теперь (в настоящее время) действителен, мои Firefox (53.0.2) и Chrome (59.0.3071.109) по-прежнему отклоняют его с помощью SSL_ERROR_CERT_DOMAIN_ERROR и ERR_CERT_COMMON_NAME_INVALID соответственно. Я предположил, что они не могут быть исключены из обычной 2 + -уровневой логики и пробовали *.example.local : Chrome действительно согласен с этим, но Firefox этого не делает. Я также пробовал *.example.org и как Chrome, так и IE11 , но все же не Firefox (и, конечно же, присвоение себе имен в реальных TLD, таких как .org , не так, как должен работать DNS).

Это заставило меня застрять. С некоторой работой OpenSSL можно сделать для создания сертификата, содержащего почти все, что вы хотите, но то, что примет Firefox и Chrome, я не знаю. Я попытаюсь изучить это и обновить, если найду что-нибудь.


Надеюсь, вы имеете в виду, что вы указали *.local как CommonName только для сервера CSR и NOT для сертификата CA (self-signed). Если имена объектов для сертификатов CA и листьев одинаковы, то ничего не будет надежно работать. EDIT: ваш отредактированный Q подтверждает, что они были совершенно разными. Хотя в нем не упоминается также указание страны, государства и организации, как того требует политика ca вы использовали.

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

И Gilles указывает на md5 для алгоритма подписи, также является правильным.

EDIT: «Сброс» серийного номера (и индекса) для настройки openssl ca – плохая идея, если вы навсегда не отмените сертификат CA и имя, для которого они были использованы. Стандарты говорят, что данный ЦС не должен выдавать более одного сертификата с одинаковым серийным значением в сертификате, а серийный файл – способ openssl ca (а также x509 -req ) реализует это. «Реальные» (общедоступные) ЦС в настоящее время больше не используют простой счетчик, но включают энтропию для блокирования атак на столкновение с PKI – google hashclash – но это не проблема для личного CA, подобного вашему. Я с готовностью верю, что браузер (или другой relier) будет недоволен, если он увидит несколько сертификатов с тем же именем серийного номера и CA, хотя я бы не ожидал, что браузер настойчиво сохранит сертификат листа – и, таким образом, увидите как старые, так и новые в одном процессе, если вы не работаете дольше – если вы не импортируете его в соответствующий магазин, в том числе в Firefox, если вы сделаете его постоянным «исключением».

Сертификаты подстановочных знаков не разрешены для доменов верхнего уровня, таких как .local или .com и они также не принимаются Firefox или IE. https://crbug.com/736715 .

По крайней мере одна очевидная проблема заключается в том, что вы создаете сертификат, подписанный с MD5 . MD5 устарел на некоторое время, и он был поврежден в сертификатах специально с 2012 года. Ни один авторитетный сервер не поддерживал его через некоторое время.

Измените default_md md5 на default_md sha256 .

Если вы следуете учебному пособию, рекомендующему MD5, выбросьте его, он слишком стар, чтобы быть полезен.

Обратите внимание, что я не просмотрел, есть ли другие проблемы. Журналы сервера должны быть полезными.

  • Переадресовать цикл с Nginx в качестве обратного прокси и Yii
  • Как удалить сертификат SSL?
  • CVE-2016-2107 Apache
  • Как настроить SSL для Apache2 на OpenSuSE 13.1
  • Ошибка шифрования SSL с завихрением
  • Как убедить dpkg, что libssl1.0.2 is> = libssl1.0.0?
  • SMTP Auth - SASL на Dovecot, Postfix и CentOS 6.2 (и Open-Xchange)
  • Сделать SSL-сертификат доверенным в браузере через SSL Bump Squid
  • Несколько сертификатов сервера RSA не разрешены
  • Как я могу запустить Apache на Arch Linux с помощью systemd с помощью защищенных паролем ключей SSL?
  • Stunnel 5.4 на Centos
  • Interesting Posts

    ncmpc – пробелы в поисковом запросе

    Как сказать, если SSH'd в машину?

    Как найти файлы с разрешениями больше, чем xxx, но игнорировать файлы с помощью SUID и SGID

    Обнаружение этой ошибки / usr / bin / ld: окончательная ссылка не удалась: на устройстве не осталось места

    Как дублировать рабочий стол в Linux с помощью Xrandr?

    Передайте аргумент скрипту, затем переадресовывайте скрипт как вход в bsub

    почему htop meter показывает> 90%, а таблица – 0.0%?

    Debian VPS, не существует никаких устройств loop, modprobe не работает

    Как сохранить последние 50 строк в файле журнала

    Использование диспетчера пакетов apt отказывается от обновления для определенного пакета

    Единая команда для перемещения домена из локальных областей cPanel в файл remotedomains?

    Найти результат, используемый в выражении if

    Поиск уникальных строк на основе только раздела

    Размер файла символа / блока

    Какие видеокарты для настольного компьютера, совместимого с Linux, могут поддерживать Dual Monitors?

    Linux и Unix - лучшая ОС в мире.