Как выпустить самоподписанный SSL сертификат и заставить ваш браузер доверять ему / Хабр
Все крупные сайты давно перешли на протокол https. Тенденция продолжается, и многие наши клиенты хотят, чтобы их сайт работал по защищенному протоколу. А если разрабатывается backend для мобильного приложения, то https обязателен. Например, Apple требует, чтобы обмен данными сервера с приложением велся по безопасному протоколу. Это требование введено с конца 2016 года.
На production нет проблем с сертификатами. Обычно хостинг провайдер предоставляет удобный интерфейс для подключения сертификата. Выпуск сертификата тоже дело не сложное. Но во время работы над проектом каждый разработчик должен позаботиться о сертификате сам.
В этой статье я расскажу, как выпустить самоподписанный SSL сертификат и заставить браузер доверять ему.
Чтобы выпустить сертификат для вашего локального домена, понадобится корневой сертификат. На его основе будут выпускаться все остальные сертификаты. Да, для каждого нового top level домена нужно выпускать свой сертификат. Получить корневой сертификат достаточно просто.
openssl genrsa -out rootCA.key 2048
Затем сам сертификат:
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem
Нужно будет ввести страну, город, компанию и т.д. В результате получаем два файла:
rootCA.keyи
rootCA.pemПереходим к главному, выпуск самоподписанного сертификата. Так же как и в случае с корневым, это две команды. Но параметров у команд будет значительно больше. И нам понадобится вспомогательный конфигурационный файл. Поэтому оформим все это в виде bash скрипта
Первый параметр обязателен, выведем небольшую инструкцию для пользователя.
if [ -z "$1" ] then echo "Please supply a subdomain to create a certificate for"; echo "e. g. mysite.localhost" exit; fi
Создадим новый приватный ключ, если он не существует или будем использовать существующий:
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=999
В переменной SUBJECT перечислены все те же вопросы, который задавались при создании корневого сертификата (страна, город, компания и т.д). Все значение, кроме CN можно поменять на свое усмотрение.
Сформируем
openssl req -new -newkey rsa:2048 -sha256 -nodes $KEY_OPT device.key -subj "$SUBJECT" -out device.csr
Формируем файл сертификата. Для этого нам понадобится вспомогательный файл с настройками. В этот файл мы запишем домены, для которых будет валиден сертификат и некоторые другие настройки. Назовем его
v3.ext. Обращаю ваше внимание, что это отдельный файл, а не часть bash скрипта.
authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment subjectAltName = @alt_names [alt_names] DNS.1 = %%DOMAIN%% DNS.2 = *.%%DOMAIN%%
Да, верно, наш сертификат будет валидным для основного домена, а также для всех поддоменов. Сохраняем указанные выше строки в файл
v3.extВозвращаемся в наш bash скрипт. На основе вспомогательного файла v3.ext создаем временный файл с указанием нашего домена:
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
Переименовываем сертификат и удаляем временный файл:
mv device.csr $DOMAIN.csr cp device.crt $DOMAIN.crt # remove temp file rm -f device.crt;
Скрипт готов. Запускаем его:
./create_certificate_for_domain.sh mysite.localhost
Получаем два файла:
mysite.localhost.crtи
device.keyТеперь нужно указать web серверу пути к этим файлам. На примере nginx это будет выглядеть так:
Запускаем браузер, открываем https://mysite. localhost и видим:
Браузер не доверяет этому сертификату. Как быть?
Нужно отметить выпущенный нами сертификат как Trusted. На Linux (Ubuntu и, наверное, остальных Debian-based дистрибутивах) это можно сделать через сам браузер. В Mac OS X это можно сделать через приложение Keychain Access. Запускаем приложение и перетаскиваем в окно файл mysite.localhost.crt. Затем открываем добавленный файл и выбираем Always Trust:
Обновляем страницу в браузере и:
Успех! Браузер доверяет нашему сертификату.
Сертификатом можно поделиться с другими разработчиками, чтобы они добавили его к себе. А если вы используете Docker, то сертификат можно сохранить там. Именно так это реализовано на всех наших проектах.
Делитесь в комментариях, используете ли вы https для локальной разработки?
Максим Ковтун,
Руководитель отдела разработки
Создание SSL-сертификата веб-сервера Apace на Ubuntu 12.04
Что означает красный цвет
В этом руководстве мы будем выделять красным цветом те места, в которых пользователю нужно будет ввести какие-либо данные или внести какие-то изменения. В остальном, предложенные команды можно просто скопировать и вставить в командную строку терминала.
Немного о SSL-сертификатах
SSL-сертификаты используются для шифрования информация на сайте и создания безопасных соединений. Кроме того, такой сертификат может использоваться посетителями для получения информации о VPS-сервере, на котором запущен сайт. SSL-сертификаты могут выдаваться специальные сертификационными центрами, которые уполномочены проверять и подтверждать информацию о сервере, также существуют самоподписанные сертификаты, созданные владельцами сайтов, которые никто не «заверяет».
Настройка
Для того, чтобы сгенерировать сертификат, вам необходимо обладать root-правами на вашем сервере (в системе 1cloud такие права пользователи получают по-умолчанию). Кроме того, необходимо установить веб-сервер Apache (о том, как это сделать написано в нашей статье «Как установить LAMP-стек (Linux, Apache, MySqL, PHP) на сервере с Ubuntu»).
Если Apache еще не установлен на сервере, это можно сделать с помощью специальной команды:
sudo apt-get install apache2
Шаг #1: Активация модуля SSL
Затем нужно активировать модуль SSL на сервере:
sudo a2enmod ssl
И перезапустить Apache, чтобы изменения вступили в силу:
sudo service apache2 restart
Шаг #2: Создание новой директории
Нужно создать новую директорию (то есть папку), где будут хранится ключ сервера и сам сертификат:
sudo mkdir /etc/apache2/ssl
Шаг #3: Создание самоподписанного SSL-сертификата
При «заказе» сертификата можно установить срок, в течение которого он должен оставаться действующим (число 365 в запросе можно поменять на любое другое). Мы создадим сертификат, который будет действителен в течение одного года:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt
С помощью этой команды запускается создание самоподписанного SSL-сертификата, а также серверного ключа для его защиты. Оба этих фала будут храниться в ранее созданной директории.
В процессе создания сертификата система будет задавать вопросы, на которые нужно будет ответить.
Самое важное поле “Common Name” — здесь нужно вбить доменное имя сайта, если у него еще нет домена (или его использование не предполагается), можно вбить IP-адрес.
You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '. ', the field will be left blank. ----- Country Name (2 letter code) [AU]:RU State or Province Name (full name) [Some-State]:Moscow Region Locality Name (eg, city) []:Moscow Organization Name (eg, company) [Internet Widgits Pty Ltd]:OOO Romashka Organizational Unit Name (eg, section) []:Sales Common Name (e.g. server FQDN or YOUR name) []:example.com Email Address []:[email protected]
Шаг #4: Установка сертификата
После того, как проделаны все подготовительные процедуры, необходимо сконфигурировать виртуальные хосты для отображения сертификата. Для этого в текстовом редакторе нужно открыть конфигурационный файл SSL:
nano /etc/apache2/sites-available/default-ssl
Здесь в секции, начинающейся со слов <virtualhost _default_:443=»»>, нужно дописать строку с именем сервера (ServerName):
ServerName example.com:443
Слово example.
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
Затем нужно сохранить изменения и выйти из файла.
Шаг #5: Активация нового виртуального хоста
Прежде чем активировать сайт на 443 порте, нужно включить соответствующий виртуальный хост:
sudo a2ensite default-ssl
После этого нужно перезагрузить Apache:
sudo service apache2 reload
После этого нужно вбить в браузер https://адрес_сайта, чтобы увидеть новый сертификат.
P. S. Другие инструкции:
- Установка SSL-сертификата на Apache (Linux)
- Настройка Apache, PHP, MySQL на WampServer
- Установка SSL-сертификата на Nginx (Linux)
Поделиться в соцсетях:
Средняя оценка: 5,0, всего оценок: 5 Спасибо за Вашу оценку! К сожалению, проголосовать не получилось. Попробуйте позже
ru
191014 Санкт-Петербург ул. Кирочная, 9
+7(812)313-88-33
235 70
1cloud ltd
2018-12-07 Создание SSL-сертификата для Apache на Ubuntu 12.04
191014 Санкт-Петербург ул. Кирочная, 9
+7(812)313-88-33
235 70
1cloud ltd
2018-12-07 Создание SSL-сертификата для Apache на Ubuntu 12. 04
600 auto
что это такое и особенности создания
28672
How-to | – Читать 6 минут |
Прочитать позже
АУДИТ САЙТА — СЕРТИФИКАТ HTTPS
Инструкцию одобрил
SEO-специалист в Luxeo
Илья Беланенко
Самоподписанный сертификат SSL не обеспечивает надежную защиту данных, передаваемых от браузера к серверу. Создавая этот сертификат, вы сами являетесь его заверителем, в отличие от версий, подписанных доверенными центрами сертификации.
Содержание:
- Что собой представляет самоподписанный сертификат SSL?
- Какими бывают самозаверенные сертификаты SSL?
- Преимущества и недостатки самоподписанных сертификатов SSL
- Заключение
Что собой представляет самоподписанный сертификат SSL?
Технически такой сертификат не отличается от версии, подписанной доверенным центром. Разница — в подписи, заверяющей сертификат.
Самозаверенные версии чаще используются для тестирования сайтов и приложений. Их также создают для небольших сайтов, которые нет смысла атаковать со стороны. Ресурсы с большой посещаемостью, а также собирающие личные данные посетителей, должны идентифицироваться исключительно доверенными сертификатами.
Самостоятельно можно создать сколько угодно самоподписанных версий. При загрузке страниц сайтов с такими сертификатами посетителям всегда будет выводиться сообщение подобного содержания:
Такое предупреждение отпугивает людей. Большинство откажутся переходить на такой сайт, в результате чего упадет его посещаемость.
Вывод здесь один: для привлечения посетителей нужно использовать доверенные сертификаты, подписанные известными центрами. Их корневые сертификаты имеются в каждом браузере, который выдает пользователю уведомление о надежности шифрования данных.
Хотите узнать, как с помощью Serpstat найти и исправить технические ошибки на сайте?
Оставьте заявку и наши специалисты проконсультируют вас по продвижению вашего проекта, поделятся учебными материалами и инсайтами рынка!
Заказать бесплатную консультацию |
Какими бывают самозаверенные сертификаты SSL?
Их создают вручную с помощью специальных программ или библиотек. Например, для Windows можно воспользоваться криптографическим хранилищем OpenSSL или консолью PowerShell. Эти инструменты генерируют сертификаты SSL, создают открытые и секретные ключи.
Создание самоподписанного сертификата SSL через OpenSSL подразумевает использование таких команд:
out /home/devuser/cert/cert.crt — место локации сертификата;
newkey rsa:2048 — автоматическое создание ключа, если у вас его нет;
req-x509 — запрос на генерацию самоподписанного сертификата;
keyout /home/devuser/cert/mykey.key — запрос на генерацию ключа.
Затем после ввода пароля необходимо описать данные вашего сервера. Для пропуска определенного параметра оставьте точку «.» в конце командной строки:
Вы можете отметить в своем браузере, что созданный сертификат является безопасным. Тогда на вашем устройстве не будет выскакивать сообщение о незащищенном соединении. Все остальные пользователи по-прежнему будут получать такое сообщение.
Чтобы создать самоподписанный сертификат SSL в Windows с помощью утилиты PowerShell, введите в ней команду:
New-SelfSignedCertificate -DnsName localhost -CertStoreLocation cert:\LocalMachine\My
Это и есть запрос на генерацию самоподписанного сертификата. После создания вы можете переместить его в папку доверенных сертификатов на вашем компьютере. После этого браузер перестанет выдавать уведомление об отсутствии шифрования данных.
Так выглядит самоподписанный сертификат SSL на сервере Nginx:
Где cert.crt означает открытый ключ, а cert.key — секретный ключ.
Самоподписанный сертификат на сервере Apache выглядит так:
Site.ru — домен ресурса, для которого вы генерируете сертификат.
Чтобы быстро узнать какие проблемы есть у твоего сайта и получить рекомендации по их устранению, нажимай на Проверить свой сайт.
Преимущества и недостатки самоподписанных сертификатов SSL
Плюсы самозаверенных версий
Возможность генерировать бесконечное количество сертификатов.
Отсутствие платы за подпись.
Скорость создания. Нет потребности ожидать ответа от центра сертификации.
Недостатки самоподписанных сертификатов
Риск потери данных пользователей.
Постоянное предупреждение о неизвестном издателе.
Отсутствие гарантий, что данные с сайта не попадут в третьи руки.
Отсутствие доверия со стороны людей, так как на сайте нет значка подписи центра сертификации.
Возникновение ошибок в оформлении и отображении сертификата, если он был создан неправильно.
Доверенные центры выдают разные формы сертификатов, которые разнятся между собой по стоимости. Самый простой означает проверку подлинности доменного имени.
Более дорогой выдается после полноценной проверки данных, предоставляемых компанией. Вплоть до того, что могут проверить контакты и документацию заявителя.
После успешной идентификации на сайте появляется соответствующий зеленый значок с логотипом центра. Этот фактор сильно влияет на доверие посетителей к сайту.
Заключение
Сходство между самоподписанным сертификатом и доверенным заканчивается на их технической части. Самозаверенный сертификат создает шифрование данных, передаваемых от браузера к серверу.
Тем не менее, эта информация находится под угрозой захвата третьими лицами и не может быть отозвана. К тому же, на сайте, идентифицированном самоподписанным SSL-сертификатом, всегда будет выскакивать уведомление об опасном соединении. Этот фактор влияет на его посещаемость.
Использовать самописные сертификаты лучше на небольших сайтах, в тестируемых приложениях или внутренних ресурсах малых фирм, где о небезопасном соединении известно всем сотрудникам. Коммерческие ресурсы с высокой посещаемостью должны идентифицироваться исключительно доверенными центрами сертификации.
Но вы можете получить бесплатный сертификат с подпиской, если пока не собираетесь приобретать платную версию. Больше о бесплатных сертификатах можно узнать здесь.
Задавайте вопросы в комментариях или пишите в техподдержку.:) А также вступайте в чат любителей Серпстатить и подписывайтесь на наш канал в Telegram.
Сэкономьте время на изучении Serpstat
Хотите получить персональную демонстрацию сервиса, тестовый период или эффективные кейсы использования Serpstat?
Оставьте заявку и мы свяжемся с вами 😉
Оцените статью по 5-бальной шкале
3.25 из 5 на основе 11 оценок
Нашли ошибку? Выделите её и нажмите Ctrl + Enter, чтобы сообщить нам.
Рекомендуемые статьи
How-to
Анастасия Сотула
Что такое addurl Google и как работает аддурилка
How-to
Анастасия Сотула
Как купить сайт и не облажаться
How-to
Анастасия Сотула
Как проверить отсутствие аффилиатов и выйти из-под аффилиат-фильтра
Кейсы, лайфхаки, исследования и полезные статьи
Не успеваешь следить за новостями? Не беда! Наш любимый редактор подберет материалы, которые точно помогут в работе. Только полезные статьи, реальные кейсы и новости Serpstat раз в неделю. Присоединяйся к уютному комьюнити 🙂
Нажимая кнопку, ты соглашаешься с нашей политикой конфиденциальности.
Поделитесь статьей с вашими друзьями
Вы уверены?
Спасибо, мы сохранили ваши новые настройки рассылок.
Сообщить об ошибке
Отменить
Генерация и использование SSL-сертификатов в Linux
В целях безопасности, в частности во избежание перехвата конфиденциальных, персональных или важных данных. Многие владельцы сайтов в сети защищают трафик с помощью SSL-сертификатов. Естественно, защите подлежит только тот трафик, который связан непосредственно с запросами и передачей данных с определённым адресом — адресом сайта. Системные администраторы, сотрудники техподдержки должны ориентироваться в вопросах, касающихся создания и внедрения SSL-сертификатов для хостов. Поскольку предоставляют соответствующие услуги. Для этих целей в системах Linux существует утилита openssl. Она является свободной реализацией методов защиты, протокола SSL, а также генерации сертификатов.
Содержание
- Как SSL-сертификат помогает защитить данные?
- Общий порядок создания SSL-сертификата, ключи и подпись
- Подписание SSL-сертификатов
- Использование SSL-сертификатов для домена
- Заключение
Как SSL-сертификат помогает защитить данные?
На самом деле схема защиты трафика основана на его шифровании открытым ключом и его расшифровке закрытым ключом. Понятие SSL-сертификата применимо в контексте подтверждения того факта, что открытый ключ действительно принадлежит именно тому домену, с которым происходит соединение. Таким образом, в данной схеме присутствуют две составляющие:
- Пара ключей (открытый и закрытый) — для шифрования/расшифровки трафика;
- Подпись открытого ключа. Гарантирующая, что он подлинный и обслуживает именно тот домен, для которого и был создан.
Обе эти составляющие и представляют собой то, что принято обозначать понятием SSL-сертификат. Подпись является гарантией, поскольку выдаётся авторитетным центрами сертификации. Это доступные всем онлайн-сервисы (достаточно воспользоваться любой поисковой системой), которым можно отправить свой ключ, заполнив соответствующую анкету. Далее сервис (центр сертификации) обрабатывает данные из анкеты и сам ключ и высылает уже подписанный ключ обратно его владельцу. Среди самых популярных на сегодняшний день центров сертификации являются такие как Comodo.
Важно заметить, что зашифрованный открытым ключом трафик возможно расшифровать только соответствующим ему закрытым ключом. В свою очередь подпись для открытого ключа от авторитетного цента говорит, что зашифрованный трафик пришёл от «своего» или подлинного узла и его можно принять в обработку, т. е. расшифровать закрытым ключом.
Общий порядок создания SSL-сертификата, ключи и подпись
Во время создания SSL-сертификата происходит последовательная обработка следующих видов ключей:
- *.key – это сами ключи шифрования, открытий и/или закрытый;
- *. csr – ключ, содержащий сформированный запрос для получения подписи сертификата от центра сертификации, а сам запрос — это открытый ключ и информация о домене и организации, связанной с ним;
- *.crt, *.cer, *.pem – это, собственно, сам сертификат, подписанный центром сертификации по запросу из файла *.csr.
Для начала нужно создать закрытый ключ:
$ openssl genrsa -des3 -out server.key 2048
Здесь команда genrsa генерирует RSA-ключ, опция -des3 указывает алгоритм шифрования ключа. А опция -out указывает, что ключ должен быть получен в виде файла server.key. Число 2048 — это сложность шифрования. При выполнении этой команды пользователю будет предложено ввести пароль для шифрования. Поскольку указан его алгоритм опцией -des3. Если это личный ключ и его планируется использовать на сервере, который можно настроить в собственных целях, то естественно шифрование обязательно. Однако, многие серверы требуют закрытые ключи без шифрования (например хостинг-площадки, поскольку предоставляют универсальную услугу по заказу SSL-сертификатов). Поэтому перед генерацией закрытого ключа нужно определиться, как он будет использоваться.
Теперь нужно создать запрос на подпись — CSR-файл, который будет включать только что сгенерированный ключ server.key:
$ openssl req -new -key server.key -out server.csr
При выполнении этой команды пользователю необходимо ввести информацию о домене и организации. Причём наименование домена следует вводить точно, например, если идентификатор URL сайта https://mycompany.com, то ввести нужно mycompany.com. Для URL-идентификатора www.mycompany.com уже необходим отдельный сертификат.
Теперь файл server.csr со сформированным запросом на подпись можно отправить в выбранный центр сертификации.
Подписание SSL-сертификатов
Получить подписанный сертификат, когда имеется закрытый ключ и запрос на подпись можно несколькими способами: воспользоваться услугой авторитетных центров сертификации, отправив им запрос (CSR-файл) и получив в ответ готовый сертификат *. crt. Либо можно сделать сертификат самоподписанным. Т. е. подписать его тем же ключом, который использовался при создании файла CSR. Для этого следует выполнить команду:
$ openssl x509 -signkey server.key -in server.csr -req -days 365 -out server.crt
Здесь опция -days указывает количество дней, в течение которых выпускаемый сертификат server.crt будет действителен. В данном случае на протяжении одного года.
Также можно создать самоподписанный сертификат из имеющегося закрытого ключа без использования CSR-файла. Но в этом случае нужно вводить информацию CSR-запроса:
$ openssl req -key server.key -new -x509 -days 365 -out server.crt
Параметр -x509 задаёт формат генерируемого сертификата. Он является самым распространённым и используется в большинстве случаев. Опция -new позволяет запрашивать информацию для запроса у пользователя.
Важно отметить, что сертификаты, подписанные авторитетными центрами сертификации известны веб-браузерам. Самоподписанные сертификаты необходимо импортировать в хранилище доверенных сертификатов веб-браузера вручную. Поскольку соединения с доменами, обслуживаемыми такими сертификатами по-умолчанию блокируются.
Использование SSL-сертификатов для домена
Для использования сертификата доменом, для которого он был создан, необходимо соответствующим образом настроить виртуальный хост этого домена. Для начала нужно сохранить файлы *.crt и *.key где-нибудь, где доступ к ним может получить только их владелец. Например в ~/ssl/certs/ нужно поместить файл server.crt, в ~/ssl/private/ — файл server.key. Далее, в конфигурационном файле виртуального хоста нужно определить следующие директивы:
SSLCertificateFile /home/john/ssl/certs/server.crt SSLCertificateKeyFile /home/john/ssl/private/server.key
Важно заметить, что для SSL-соединений домена должен быть отдельный конфигурационный файл (или просто отдельная конфигурация в одном файле) виртуального хоста для него. Это необходимо, поскольку обычные HTTP-соединения обрабатываются по порту 80, а HTTPS (SSL) — по 443. Это отдельные конфигурации одного виртуального хоста (хотя это не совсем верное определение). Также для Apache должен быть включен модуль SSL. Типичная конфигурация может выглядеть следующим образом:
<IfModule mod_ssl.c> <VirtualHost 128.138.243.150:443> ServerName www.mycompany.com ServerAdmin [email protected] DocumentRoot /var/www/htdocs/mycompany ErrorLog logs/www.mycompany.com-ssl-error_log CustomLog logs/www.mycompany.com-ssl-access_log combined ScriptAlias /cgi-bin/ /var/www/cgi-bin/mycompany SSLEngine on SSLCertificateFile /home/john/ssl/certs/server.crt SSLCertificateKeyFile /home/john/ssl/private/server.key </VirtualHost> </IfModule>
Как подключить ssl сертификата в nginx читайте в этой статье.
Заключение
В заключение следует заметить, что генерация и подключение SSL-сертификатов к домену — далеко не самая сложная задача. Однако она требует очень внимательного выполнения отдельных её этапов, поскольку от ошибки зависит безопасность для домена.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Как создать самоподписанный сертификат в Windows?
Большинству администраторов Windows, знакомых с темой PKI, известна утилита MakeCert.exe, с помощью которой можно создать самоподписанный сертификат. Эта утилита включена в состав Microsoft .NET Framework SDK и Microsoft Windows SDK. В современых версиях Windows 10/8.1 и Windows Server 2016/2012R2 вы можете создать самоподписанный сертификат с помощью PowerShell без использования дополнительных утилит.
Содержание:
- New-SelfSignedCertificate: командлет PowerShell для генерации самоподписанного сертификата
- Создать самоподписанный сертфикат типа Code Signing для подписывания кода
- Использование самоподписанного SSL сертификата SHA-256 в IIS
New-SelfSignedCertificate: командлет PowerShell для генерации самоподписанного сертификата
Для создания самоподписанного сертификата в PowerShell нужно использовать командлет New-SelfSignedCertificate, входящий в состав модуля PKI (Public Key Infrastructure).
Чтобы вывести список всех доступных командлетов в модуле PKI, выполните команду:
Get-Command -Module PKI
Самоподписанные сертификаты рекомендуется использовать в тестовых целях или для обеспечения сертификатами внутренних интранет служб (IIS, Exchange, Web Application Proxy, LDAPS, ADRMS, DirectAccess и т.п.), в тех случая когда по какой-то причине приобретение сертификата у внешнего провайдера или разворачивание инфраструктуры PKI/CA невозможны.
Совет. Не забывайте также про возможность использования полноценных бесплатных SSL сертификатов от Let’s Encrypt. Пример, как выпустить SSL сертификат Let’s Encrypt и привязать его к сайту IIS.
Для создания сертификата нужно указать значения –DnsName (DNS имя сервера, имя может быть произвольным и отличаться от имени localhost) и —CertStoreLocation (раздел локального хранилища сертификатов, в который будет помещен сгенерированный сертификат). Командлет можно использовать для создания самоподписанного сертификата в Windows 10 (в нашем примере), Windows 8/8.1 и Windows Server 2019/2016/2012 R2.
Чтобы создать новый SSL сертификат типа SSLServerAuthentication (по умолчанию) для DNS имени test.contoso.com (указывается FQDN имя) и поместить его в список персональных сертификатов компьютера, выполните команду:
New-SelfSignedCertificate -DnsName test.contoso.com -CertStoreLocation cert:\LocalMachine\My
Directory: Microsoft.PowerShell.Security\Certificate::LocalMachine\My
Thumbprint Subject
---------- -------
2779C0490D558B31AAA0CEF2F6EB1A5C2CA83B30 CN=test.contoso.com
По-умолчанию генерируется самоподписанный сертификат со следующим параметрами:
- Криптографический алгоритм: RSA;
- Размер ключа: 2048 бит;
- Допустимые варианты использования ключа: Client Authentication и Server Authentication;
- Сертификат может использоваться для: Digital Signature, Key Encipherment ;
- Срок действия сертификата: 1 год.
Данная команда создаст новый сертификат и импортирует его в персональное хранилище компьютера. Откройте оснастку certlm.msc и проверьте, что в разделе Personal хранилища сертификатов компьютера появился новый сертификат.
Как вы видите, в свойствах сертификата указано, что данный сертификат может использоваться для аутентификации клиентов (Client Authentication). Также он действителен и для аутентификации сервера (Server Authentication).
С помощью командлета Get-ChildItem можно вывести все параметры созданного сертификата по его отпечатку (Thumbprint):
Get-ChildItem -Path "Cert:\LocalMachine\My" | Where-Object Thumbprint -eq DC1A0FDE0120085A45D8E14F870148D1EBCB82AE | Select-Object *
Microsoft.PowerShell.Security\Certificate::LocalMachine\My\DC1A0FDE0120085A45D8E14F870148D1E BCB82AE PSParentPath : Microsoft.PowerShell.Security\Certificate::LocalMachine\My PSChildName : DC1A0FDE0120085A45D8E14F870148D1EBCB82AE PSDrive : Cert PSProvider : Microsoft. PowerShell.Security\Certificate PSIsContainer : False EnhancedKeyUsageList : {Client Authentication (1.3.6.1.5.5.7.3.2), Server Authentication (1.3.6.1.5.5.7.3.1)} DnsNameList : {test.contoso.com} SendAsTrustedIssuer : False EnrollmentPolicyEndPoint : Microsoft.CertificateServices.Commands.EnrollmentEndPointProperty EnrollmentServerEndPoint : Microsoft.CertificateServices.Commands.EnrollmentEndPointProperty PolicyId : Archived : False Extensions : {System.Security.Cryptography.Oid, System.Security.Cryptography.Oid, System.Security.Cryptography.Oid, System.Security.Cryptography.Oid} FriendlyName : IssuerName : System.Security.Cryptography.X509Certificates.X500DistinguishedName NotAfter : 30/10/2021 13:10:44 NotBefore : 30/10/2020 11:50:44 HasPrivateKey : True PrivateKey : PublicKey : System. Security.Cryptography.X509Certificates.PublicKey RawData : {48, 130, 3, 45...} SerialNumber : 165ECC120612668C4D741A28D4BB8203 SubjectName : System.Security.Cryptography.X509Certificates.X500DistinguishedName SignatureAlgorithm : System.Security.Cryptography.Oid Thumbprint : DC1A0FDE0120085A45D8E14F870148D1EBCB82AE Version : 3 Handle : 2834446249312 Issuer : CN=test.contoso.com Subject : CN=test.contoso.com
Можно создать цепочку сертфикатов. Сначала создается корневой сертификат (CA), а на основании него генерируется SSL сертификат сервера:
$rootCert = New-SelfSignedCertificate -Subject "CN=TestRootCA,O=TestRootCA,OU=TestRootCA" -KeyExportPolicy Exportable -KeyUsage CertSign,CRLSign,DigitalSignature -KeyLength 2048 -KeyUsageProperty All -KeyAlgorithm 'RSA' -HashAlgorithm 'SHA256' -Provider "Microsoft Enhanced RSA and AES Cryptographic Provider" `
New-SelfSignedCertificate -CertStoreLocation cert:\LocalMachine\My -DnsName "test2. contoso.com" -Signer $rootCert -KeyUsage KeyEncipherment,DigitalSignature
Для экспорта полученного сертификата c закрытым ключом в pfx файл, защищенный паролем, нужно получить его отпечаток (Thumbprint). Сначала нужно указать пароль защиты сертификата и преобразовать его в формат SecureString. Значение Thumbprint нужно скопировать из результатов выполнения команды New-SelfSignedCertificate.
$CertPassword = ConvertTo-SecureString -String “YourPassword” -Force –AsPlainText
Export-PfxCertificate -Cert cert:\LocalMachine\My\2779C0490D558B31AAA0CEF2F6EB1A5C2CA83B30 -FilePath C:\test.pfx -Password $CertPassword
Можно экспортировать открытый ключ сертификата:
Export-Certificate -Cert Cert:\LocalMachine\My\2779C0490D558B31AAA0CEF2F6EB1A5C2CA83B30 -FilePath C:\testcert.cer
Проверьте, что в указанном каталоге появился cer(PFX)файл сертификата. Если щелкнуть по нему правой клавишей и выбрать пункт меню Install Certificate, можно с помощью мастера импорта сертификатов добавить сертификат в корневые доверенные сертификаты компьютера.
Выберите Store location -> Local Machine, Place all certificates in the following store -> Trusted Root Certification Authorities.
Можно создать сертификат и сразу импортировать его в доверенные корневые сертификаты компьютера командами:$cert=New-SelfSignedCertificate …..
$certFile = Export-Certificate -Cert $cert -FilePath C:\certname.cer
Import-Certificate -CertStoreLocation Cert:\LocalMachine\AuthRoot -FilePath $certFile.FullName
Полученный открытый ключ или сам файл сертификата можно распространить на все компьютеры и сервера в домене с помощью GPO (пример установки сертификата на компьютеры с помощью групповых политик).
Одной из полезных возможностей командлета New-SelfSignedCertificate является возможность создать сертификат с несколькими различными именами Subject Alternative Names (SAN).
Примечание. Утилита Makecert.exe, в отличии от командлета New-SelfSignedCertificate, не умеет создавать сертификаты с SAN.
Если создается сертификат с несколькими именами, первое имя в параметре DnsName будет использоваться в качестве CN (Common Name) сертификата. К примеру, создадим сертификат, у которого указаны следующие имена:
- Subject Name (CN): adfs1.contoso.com
- Subject Alternative Name (DNS): web-gw.contoso.com
- Subject Alternative Name (DNS): enterprise-reg.contoso.com
Команда создания сертификата будет такой:
New-SelfSignedCertificate -DnsName adfs1.contoso.com,web_gw.contoso.com,enterprise_reg.contoso.com -CertStoreLocation cert:\LocalMachine\My
Также можно сгенерировать wildcard сертификат для всего пространства имен домена, для этого в качестве имени сервера указывается *.contoso.com.
New-SelfSignedCertificate -certstorelocation cert:\localmachine\my -dnsname *. contoso.com
Создать самоподписанный сертфикат типа Code Signing для подписывания кода
В PoweShell 3.0 командлет New-SelfSifgnedCertificate позволял генерировать только SSL сертификаты, которые нельзя было использоваться для подписывания кода драйверов и приложений (в отличии сертификатов, генерируемых утилитой MakeCert).
В версии PowerShell 5 новая версия командлета New-SelfSifgnedCertificate теперь может использоваться для выпуска сертификатов типа Code Signing.
Вы можете обновить версию PowerShell согласно инструкции.
Для создания самоподписанного сертфиката для подписывания кода приложений, выполните команду:
$cert = New-SelfSignedCertificate -Subject "Cert for Code Signing” -Type CodeSigningCert -CertStoreLocation cert:\LocalMachine\My
Теперь можно подписать ваш PowerShell скрипт эти сертификатом:
Set-AuthenticodeSignature -FilePath C:\PS\test_script.ps1 -Certificate $cert
Если при выполнении команды появится предупреждение UnknownError, значит этот сертификат недоверенный, т. к. находится в персональном хранилище сертификатов пользователя.
Нужно переместить его в корневые сертификаты (не забывайте периодически проверять хранилище сертификатов Windows на наличие недоверенных сертфикатов и обновлять списки корневых сертификатов):
Move-Item -Path $cert.PSPath -Destination "Cert:\CurrentUser\Root"
После этого вы можете подписать свой PowerShell скрипт с помощью данного самоподписанного сертификата.
Использование самоподписанного SSL сертификата SHA-256 в IIS
Обратите внимание, что при создании самоподписанный сертификат для IIS через консоль Internet Information Manager (пункт меню Create Self-Signed Certificate), создается сертификат с исопльзованием алгоритма шифрования SHA-1. Такие сертификаты многими браузерами считаются недоверенными, поэтому они могут выдавать предубеждение. Командлет New-SelfSignedCertificate позволяет создать более популырный тип сертификата с помощью алгоритма шифрования SHA-256.
Вы можете привязать самоподписанный сертификат SHA-256, созданный в PowerShell, к сайту IIS. Если вы с помощью PowerShell создали SSL сертификат и поместили его в хранилище сертификатов компьютера, он будет автоматически доступен для сайтов IIS.
Запустите консоль IIS Manager, выберите ваш сайт, затем в настройке Site Binding, выберите созданный вами сертификат и сохраните изменения.
IIS — Создание SSL сертификата — Зотов Андрей
Примеры: C# — ЭЦП подпись сертификатом Что такое сертификат? Сертификат это контейнер который может содержать открытый (PUBLIC) и закрытый (PRIVATE) ключи, а также ряд полей информационного характера. В системе сертификаты хранятся в Хранилище сертификатов (Sertificate Store). Хранилище сертификатов на локальном компьютере называется «my». Просмотреть содержимое хранилища можно с помощью MMC добавив оснастку «Sertificates». Кроме того сертификаты могут быть привязаны к компьютеру (LocalMachine), или к учетной записи (CurrentUser). От этого зависит у кого будет доступ к сертификатам, у пользователей компьютера или у владельца учетной записи. Из хранилища можно выгрузить сертификат в файл .CER или .PFX. MMC | Sertificates | Сертификат (выбрать правой кнопкой) | Все задачи | Экспорт… Экспорт закрытого ключа может быть запрещен. В таком случае узнать его уже никак не удастся. Эта опция доступна только на этапе установки или создания ключа в хранилище «Пометить этот ключ как экспортируемый».
Оба типа файлов затем можно установить в хранилище, используя контекстное меню файла пункт «Установить сертификат…» Установка существующего сертификата Step 1: Install SSL certificate
Создание и установка самоподписанного сертификата (Утилита selfssl.exe для SSL в IIS) В свойствах сайта, на вкладке DirectorySecurity в разделе «Secure communications» можно поставить галочку «Requere secure channel (SSL)», а на вкладке «Web Site» можно задать
selfssl.exe /S:1254345 После этого страницу можно запрашивать по: Утилита makecert.exe (для ЭЦП) Утилита входит в состав MS Visual Studio и позволяет генерировать сертификаты: makecert. exe -r -pe -sky exchange -ss my -sr CurrentUser -n «CN=Uralsib.Mso.DigitalSign» Так можно создавать тестовые сертификаты непосредственно в хранилище сертификатов на локальной машине «LocalMachine» или для текущего пользователя «CurrentUser». Поле «Субъект» (Subject) будет заполнено именем «CN=MyCompany.MyProduct.DigitalSign». И имя «MyCompany.MyProduct.DigitalSign» будет выбрано в качестве наименования. Остальные флаги разрешают экспортировать закрытый ключ в файл .PFX — r создать самоподписанный сертификат В MSDN: http://msdn. microsoft.com/ru-ru/library/bfsktky3.aspx IIS 7 — Генерация запроса на сертификат Генерация запроса на получение сертификата: IIS Manager | выбрать узел сервера, а не сайта | Server Sertificates | Create Certificate Request… который предварительно должен быть инсталлирован в виндовс через консоль MMC -> Добавить оснастку -> Сертификаты -> Local Computer -> Personal Чтобы сайт работал через HTTPS в IIS 7.0 нужно прикрепить к узлу сертификат SSL.Делается это IIS Manager | выбрать Веб-узел | Bindings… добавляется запись HTTPS и для нее выбирается сертификат,
|
Как получить сертификат SSL за 7 простых шагов в 2022 г.
Наши независимые исследовательские проекты и беспристрастные обзоры частично финансируются за счет партнерских комиссий без каких-либо дополнительных затрат для наших читателей. Подробнее
Прежде чем ваш веб-сайт сможет превратить посетителей в лояльных читателей, потенциальных клиентов или клиентов, он должен выглядеть профессионально, безопасно и вызывать доверие. Имея в виду эту цель, одним из лучших способов обеспечить безопасность вашего веб-сайта является получение сертификата SSL (Secure Sockets Layer).
SSL-сертификат — это фрагмент кода на вашем веб-сервере, который создает зашифрованное соединение, которое обеспечивает безопасность и безопасность любых данных, отправленных пользователями вашего веб-сайта. На самом деле, если у вас нет SSL-сертификата, популярные веб-браузеры будут предупреждать людей, которые посещают ваш сайт, о том, что сайт защищен , а не .
В этой статье мы обсудим, как получить SSL-сертификат, сделав все максимально просто и без профессионального жаргона — обещаю!
SSL-сертификаты выдаются организацией, известной как центр сертификации (ЦС). Процесс получения SSL-сертификата может быть очень простым, особенно если вы заранее подготовили правильную информацию, требуемую ЦС. Эта информация включает:
Уникальный IP-адрес
В зависимости от того, как работает протокол SSL, для каждого сертификата, который вы хотите получить, потребуется отдельный IP-адрес. В противном случае люди, использующие некоторые старые устройства и веб-браузеры, не смогут использовать ваш веб-сайт. Вы можете использовать этот инструмент, чтобы узнать IP-адрес вашего сайта.
Точная запись WHOIS
Когда вы запрашиваете SSL-сертификат для домена, центр сертификации должен подтвердить, что вы являетесь владельцем доменного имени. Для этого он проверит запись WHOIS домена.
Вы можете использовать инструмент поиска домена, чтобы проверить свою запись WHOIS. Если найденная информация устарела, обязательно обновите ее!
Проверка бизнеса/организации
Если вы запрашиваете высоконадежный сертификат, центр сертификации может проверить государственные базы данных для проверки вашего бизнеса. Кроме того, CA может также попросить вас предоставить документ о государственной регистрации, связанный с вашим бизнесом.
Существует множество различных типов SSL-сертификатов, и их можно классифицировать на основе:
- Уровень проверки : Проверка домена, проверка организации и расширенная проверка
- Защищенные домены : Один домен, групповой и многодоменный домен
Давайте рассмотрим краткий обзор каждого типа: Домен2 Проверка
: это самый дешевый и самый низкий уровень проверки, который просто гарантирует, что ваша компания имеет контроль над доменом. Это лучше всего подходит для малого бизнеса, который обычно не обменивается информацией с пользователями.
Проверка организации : Это средний уровень проверки. Он проверяет не только право собственности на домен, но и сведения об организации, такие как имя и местонахождение. Этот уровень идеально подходит для бизнес-сайтов с формами и функциями захвата лидов.
Расширенная проверка : Это самый дорогой и тщательный уровень проверки. Помимо сведений о владении доменом и организации, он проверяет физическое местонахождение компании и юридическое существование. Это хорошо подходит для веб-сайтов, которые обрабатывают конфиденциальную информацию, например финансовые транзакции.
Один домен : Обеспечивает защиту одного поддомена. Например, SSL-сертификат, приобретенный для johndoe.com, нельзя использовать для поддоменов, таких как blog.johndoe.com
Подстановочный знак : обеспечивает защиту неограниченного количества поддоменов одного домена. Например, SSL-сертификат, приобретенный для johndoe.com, можно применять к любым поддоменам, таким как blog.johndoe.com или shop.johndoe.com.
Многодоменный : Обеспечивает защиту до 100 доменов с помощью одного SSL-сертификата. SSL-сертификат, приобретенный, например, для johndoe.com, можно применить к другим доменам, таким как janedoe.com.
Центр сертификации (ЦС) — это организация, выпускающая SSL-сертификаты. В мире действуют десятки 50 ЦС, но лишь немногие из них владеют большей частью мирового рынка SSL. Эти более крупные игроки включают GoDaddy и GlobalSign.
Источник изображения: О SSL
Вы хотите выбрать авторитетный ЦС, который может предоставить необходимый вам тип SSL-сертификата, а также в соответствии с вашим бюджетом и бизнес-целями.
Запрос на подпись сертификата (CSR) — это файл, который создается на вашем веб-сервере перед тем, как вы запросите SSL-сертификат из ЦС. ЦС затем будет использовать информацию в этом файле для выпуска вашего SSL-сертификата.
Процесс создания CSR зависит от веб-сервера и хостинга, который использует ваш веб-сайт. Мы рекомендуем связаться с вашим веб-хостингом, чтобы узнать, есть ли в их базе знаний инструкции по созданию CSR.
Теперь, когда вы сгенерировали CSR, следующий шаг — перейти на веб-сайт выбранного вами ЦС и приобрести нужный тип SSL-сертификата.
После завершения процесса проверки ЦС попросит вас отправить файл CSR, созданный на предыдущем шаге.
В зависимости от типа приобретаемого вами SSL-сертификата центру сертификации может потребоваться от пары часов до нескольких дней для проверки ваших данных и выдачи SSL-сертификата вашего сайта.
Например, получение сертификата проверки домена обычно занимает пару минут, а расширенная проверка может занять несколько дней.
После того как ЦС обработает ваш запрос на сертификат SSL, он отправит вам электронное письмо, позволяющее получить доступ к вашему сертификату SSL. Кроме того, вы можете загрузить его из учетной записи пользователя, которую вы создали при покупке сертификата.
Процесс установки SSL-сертификата зависит от ОС (операционной системы) веб-сервера, на котором размещен ваш сайт. Свяжитесь с вашим веб-хостом для получения дополнительной информации об этом или проверьте, предоставил ли он какие-либо онлайн-инструкции по установке вашего SSL-сертификата.
Да, можно. Большинство ведущих хостинг-провайдеров, включая Bluehost, HostGator и InMotion, предоставляют вам бесплатный SSL-сертификат как часть вашего хостинг-пакета.
Показательный пример: Bluehost. Когда вы зарегистрируете учетную запись хостинга в Bluehost, вы обнаружите, что Let’s Encrypt SSL автоматически включается в ваш пакет. Чтобы активировать сертификат SSL, просто:
- Перейдите в панель управления Bluehost
- Перейдите к Мои сайты > Управление сайтом
3. На вкладке Безопасность включите сертификат SSL все, что нужно
’s 900! После того, как вы включили переключатель SSL, активация может занять несколько часов, поэтому не беспокойтесь, если это не произойдет мгновенно.Как мы уже говорили, получение SSL-сертификата включает следующие шаги:
- Убедитесь, что у вас есть верная информация о веб-сайте
- Определите тип SSL-сертификата, который вам нужен
- Выберите центр сертификации (ЦС)
- Сгенерируйте запрос на подпись сертификата (CSR)
- Отправьте CSR в центр сертификации (ЦС)
- Дождитесь проверки ЦС
- Установите свой SSL-сертификат
SSL-сертификат имеет большое значение для обеспечения удобного взаимодействия с пользователем, улучшения SEO и соответствия вашего бизнеса отраслевым стандартам. Итак, приступайте к выполнению этих шагов — удачи!
Пример: SSL-сертификат — создание ключа и CSR
Важно! Этот пример предназначен для предоставления общих рекомендаций ИТ-специалистам, которые имеют опыт работы с требованиями и настройкой SSL. Процедура, описанная в этой статье, является лишь одним из многих доступных методов, которые вы можете использовать для создания необходимых файлов. Описанный здесь процесс следует рассматривать как пример, а не как рекомендацию.
Когда вы настраиваете Tableau Server для использования шифрования Secure Sockets Layer (SSL), это помогает обеспечить безопасность доступа к серверу и защиту данных, пересылаемых между Tableau Server и Tableau Desktop.
Ищете сервер Tableau для Linux? См. пример: SSL-сертификат – создание ключа и CSR (ссылка открывается в новом окне).
Сервер Tableau использует Apache, который включает OpenSSL(ссылка открывается в новом окне). Вы можете использовать набор инструментов OpenSSL для создания файла ключа и запроса на подпись сертификата (CSR), который затем можно использовать для получения подписанного сертификата SSL.
Действия по созданию ключа и CSR
Чтобы настроить Tableau Server для использования SSL, у вас должен быть SSL-сертификат. Чтобы получить SSL-сертификат, выполните следующие действия:
- Задайте переменную среды конфигурации OpenSSL (необязательно).
- Сгенерируйте ключевой файл.
- Создайте запрос на подпись сертификата (CSR).
- Отправьте CSR в центр сертификации (ЦС), чтобы получить сертификат SSL.
- Используйте ключ и сертификат, чтобы настроить Tableau Server для использования SSL.
Дополнительную информацию можно найти на странице часто задаваемых вопросов по SSL (ссылка открывается в новом окне) на веб-сайте Apache Software Foundation.
Настройте сертификат для нескольких доменных имен
Tableau Server разрешает SSL для нескольких доменов. Чтобы настроить эту среду, вам необходимо изменить файл конфигурации OpenSSL, openssl.conf, и настроить сертификат альтернативного имени субъекта (SAN) на сервере Tableau. См. раздел Для сертификатов SAN: измените файл конфигурации OpenSSL ниже.
Установите переменную среды конфигурации OpenSSL (необязательно)
Чтобы избежать использования аргумента -config
при каждом использовании openssl.exe, вы можете использовать переменную среды OPENSSL_CONF
, чтобы убедиться, что используется правильный файл конфигурации и все изменения конфигурации выполненные в последующих процедурах этой статьи, приведут к ожидаемым результатам (например, вы должны установить переменную среды, чтобы добавить SAN в свой сертификат).
Откройте командную строку от имени администратора и выполните следующую команду:
. установить OPENSSL_CONF=c:\Program Files\Tableau\Tableau Server\packages\apache.<код_версии>\conf\openssl.cnf
Примечание . При настройке переменной среды конфигурации Open SSL не заключайте путь к файлу в кавычки.
Сгенерировать ключ
Создайте файл ключа, который вы будете использовать для создания запроса на подпись сертификата.
Откройте командную строку от имени администратора и перейдите в каталог Apache для сервера Tableau. Например, выполните следующую команду:
CD C:\Program Files\Tableau\Tableau Server\packages\apache. <код_версии>\bin
Выполните следующую команду, чтобы создать файл ключа:
openssl.exe genrsa -out
.key 4096 Примечание: Эта команда использует для ключа длину 4096 бит. Вы должны выбрать битовую длину не менее 2048 бит, потому что связь, зашифрованная с более короткой битовой длиной, менее безопасна. Если значение не указано, используется 512 бит.
Создайте запрос на подпись сертификата для отправки в центр сертификации
Используйте файл ключа, созданный в описанной выше процедуре, для создания запроса на подпись сертификата (CSR). Вы отправляете CSR в центр сертификации (CA) для получения подписанного сертификата.
Важно: Если вы хотите настроить сертификат SAN для использования SSL для нескольких доменов, сначала выполните шаги, описанные в разделе Для сертификатов SAN: измените файл конфигурации OpenSSL ниже, а затем вернитесь сюда, чтобы создать CSR.
Выполните следующую команду, чтобы создать файл запроса на подпись сертификата (CSR):
openssl.exe req -new -key yourcertname.key -out yourcertname.csr
Если вы не установили переменную среды конфигурации OpenSSL,
OPENSSL_CONF
, вы можете увидеть одно из следующих сообщений:Сообщение об ошибке о невозможности загрузки информации о конфигурации. В этом случае повторите приведенную выше команду со следующим параметром:
-config ..\conf\openssl.cnf
.Предупреждение о том, что каталог
/usr/local/ssl
не найден. Этот каталог не существует в Windows, и вы можете просто проигнорировать это сообщение. Файл успешно создан.
Чтобы установить переменную среды конфигурации OpenSSL, см. раздел Установка переменной среды конфигурации OpenSSL (необязательно) в этой статье.
При появлении запроса введите необходимую информацию.
Примечание: Для Обычное имя введите имя сервера Tableau. Имя сервера Tableau — это URL-адрес, который будет использоваться для доступа к серверу Tableau. Например, если вы попадете на сервер Tableau, набрав
tableau.example.com
в адресной строке браузера, тоtableau.example.com
будет общим именем. Если общее имя не соответствует имени сервера, возникнут ошибки, когда браузер или рабочий стол Tableau попытаются подключиться к серверу Tableau.
Отправьте CSR в центр сертификации для получения SSL-сертификата
Отправьте CSR в коммерческий центр сертификации (CA) для запроса цифрового сертификата. Дополнительную информацию см. в статье Википедии Центр сертификации (ссылка открывается в новом окне) и во всех связанных статьях, которые помогут вам решить, какой центр сертификации использовать.
Используйте ключ и сертификат для настройки Tableau Server
Если у вас есть и ключ, и сертификат от ЦС, вы можете настроить Tableau Server для использования SSL. Инструкции см. в разделе Настройка внешнего SSL.
Для сертификатов SAN: измените файл конфигурации OpenSSL
При стандартной установке OpenSSL некоторые функции не включены по умолчанию. Чтобы использовать SSL с несколькими доменными именами, перед созданием CSR выполните следующие действия, чтобы изменить файл openssl.cnf 9.файл 0037.
Откройте проводник Windows и перейдите в папку Apache conf для сервера Tableau.
Например:
C:\Program Files\Tableau\Tableau Server\<код_версии>\apache\conf
Откройте openssl.cnf в текстовом редакторе и найдите следующую строку:
req_extensions = v3_req
Эта строка может быть закомментирована знаком решетки (#) в начале строки.
Если строка закомментирована, раскомментируйте ее, удалив # и пробел символов с начала строки.
Перейти к [ v3_req ] раздел файла. Первые несколько строк содержат следующий текст:
# Расширения для добавления к запросу сертификата
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEnciphermentПосле строки keyUsage вставьте следующую строку:
subjectAltName = @alt_names
Если вы создаете самозаверяющий сертификат SAN, выполните следующие действия, чтобы дать сертификату право подписывать сертификат:
Добавьте
cRLSign
иkeyCertSign
в строку keyUsage , чтобы она выглядела следующим образом:keyUsage = nonRepudiation, digitalSignature, keyEncipherment, cRLSign, keyCertSign
После строки keyUsage добавьте следующую строку:
subjectAltName = @alt_names
В [alt_names] укажите доменные имена, которые вы хотите использовать с SSL.
DNS.1 = [домен1]
DNS.2 = [домен2]
DNS.3 = [и т. д.]На следующем изображении показаны выделенные результаты с текстом-заполнителем, который вы должны заменить своими доменными именами.
Сохраните и закройте файл.
Выполните шаги в разделе Создание запроса на подпись сертификата для отправки в центр сертификации выше.
Если вы предпочитаете использовать другую версию OpenSSL, вы можете загрузить ее с сайта Open SSL для Windows (ссылка откроется в новом окне).
Как создать собственный центр сертификации SSL для локальной разработки HTTPS
В 2018 году Google начал выступать за то, чтобы сайты использовали шифрование HTTPS, помечая сайты, не использующие сертификат SSL, как «небезопасные» в своем браузере Chrome. Это было широко признано хорошей идеей, поскольку защита веб-трафика защищает как владельца сайта, так и его клиентов.
Несмотря на то, что Let’s Encrypt и его API значительно упростили создание и установку SSL-сертификатов на своих серверах, это мало помогает разработчикам с HTTPS в их средах разработки. Создание локального SSL-сертификата для обслуживания ваших сайтов разработки через HTTPS может оказаться сложной задачей. Даже если вам удастся сгенерировать самозаверяющий сертификат, вы все равно получите ошибки конфиденциальности браузера.
В этой статье мы рассмотрим создание собственного центра сертификации (ЦС) для ваших локальных серверов, чтобы вы могли без проблем запускать сайты HTTPS локально.
- Почему HTTPS локально?
- Как это работает
- Стать (маленьким) центром сертификации
- Установка корневого сертификата
- Создание сертификатов, подписанных ЦС, для ваших сайтов разработки
- Сценарий оболочки
- Альтернативы
- Заключение
Если вы предпочитаете учиться визуально, наш видеопродюсер Томас создал для вас видео, в котором рассказывается об этапах создания собственного локального ЦС. Он также создал видеоролики, демонстрирующие процесс для пользователей Linux и Windows.
Почему HTTPS локально?
Почему бы просто не использовать обычный HTTP локально? Потому что, если ваш рабочий сайт поддерживает только HTTPS и вы ведете локальную разработку по обычному HTTP, ваша среда разработки и рабочая среда не так похожи, как могли бы быть.
Например, моя среда разработки для этого сайта (и SpinupWP) работает как сервер Ubuntu на виртуальной машине VMware (ВМ) на моем Mac. Рабочий сайт представляет собой сервер Ubuntu, работающий на DigitalOcean, с почти идентичной конфигурацией.
Вы определенно хотите, чтобы ваша среда разработки была максимально приближена к производственной среде. Когда это не так, вы вызываете появление новых проблем в производстве, которые не проявлялись в разработке. Запуск HTTP, когда ваш рабочий сайт поддерживает только HTTPS, определенно является ненужным риском. Даже в ситуации, когда вы не можете идеально отразить свою производственную среду, вы все равно захотите запускать HTTPS локально, или вам придется целый день бороться с предупреждениями SSL со смешанным содержимым.
Если вы когда-либо пытались перейти на локальный сайт через HTTPS, для которого не настроен SSL-сертификат, вы, вероятно, видели следующее сообщение в Chrome:
Или следующее в Firefox:
Другие браузеры имеют другие сообщения, но суть одна и та же.
Один из способов обойти это — переключить локальную среду разработки WordPress на что-то вроде LocalWP, DevKinsta или даже Laravel Valet, которые предлагают локальные решения SSL из коробки. Недостатком является то, что это означает изменение вашего рабочего процесса разработки, что не идеально, если вам удобнее то, что у вас уже есть, особенно если оно уже соответствует вашей производственной среде.
Поиск локального решения SSL в Интернете часто приводит к тому, что вы попадаете в кроличью нору самозаверяющих сертификатов. Однако попытка получить самозаверяющий SSL-сертификат, работающий с вашим локальным сервером, — отстой, если вы не используете инструмент, который обрабатывает его за вас, что возвращает вас к необходимости переключения локальных сред разработки.
Основная проблема с локальными самозаверяющими сертификатами заключается в том, что ваш браузер также должен доверять им. Просто настроить локальный самозаверяющий сертификат недостаточно. Вы получите то же сообщение браузера, но на этот раз с ERR_CERT_AUTHORITY_INVALID
. Это происходит потому, что браузер хочет проверить действительность этого сертификата в центре сертификации и не может. Таким образом, решение состоит в том, чтобы стать вашим собственным ЦС!
Как это работает
Чтобы запросить SSL-сертификат у ЦС, такого как Verisign или GoDaddy, вы отправляете им запрос на подпись сертификата (CSR), и они предоставляют вам SSL-сертификат в обмен на то, что они подписали с использованием своего корневого сертификата и частного сертификата. ключ. Все браузеры имеют копию (или доступ к копии из операционной системы) корневого сертификата из различных центров сертификации, поэтому браузер может проверить, подписан ли ваш сертификат доверенным центром сертификации.
Вот почему, когда вы генерируете самоподписанный сертификат, браузер ему не доверяет. Он не был подписан ЦС. Чтобы обойти это, нужно сгенерировать собственный корневой сертификат и закрытый ключ. Затем мы добавляем корневой сертификат ко всем устройствам, которыми мы владеем, только один раз, и тогда все самозаверяющие сертификаты, которые мы генерируем, будут изначально доверенными.
Стать (крохотным) центром сертификации
Просто смешно создавать файлы, необходимые для того, чтобы стать центром сертификации. На самом деле требуется всего две команды. Давайте углубимся в то, как мы можем сделать это в macOS и Linux, а затем посмотрим, как это работает в операционной системе Windows.
Создание закрытого ключа и корневого сертификата в macOS Monterey и Linux
Поскольку macOS и Linux являются Unix-подобными операционными системами, процессы создания необходимых файлов идентичны.
Единственная реальная разница между ними заключается в том, что в macOS вам может потребоваться установить приложение командной строки OpenSSL. Для этого, если у вас его еще нет, установите homebrew, что позволит вам установить OpenSSL.
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" варить установить openssl
Большинство дистрибутивов Linux поставляются с установленным OpenSSL. Если нет, его можно установить через менеджер пакетов по умолчанию.
Затем мы можем создать место для хранения наших локальных файлов сертификатов. Это не является обязательным требованием, но облегчает поиск ключей позже.
мкдир ~/сертификаты компакт-диск ~/сертификаты
С этой настройкой мы готовы сгенерировать закрытый ключ, чтобы стать локальным ЦС:
openssl genrsa -des3 -out myCA.key 2048
OpenSSL запросит парольную фразу, которую мы рекомендуем не пропускать и хранить в безопасном месте. Парольная фраза не позволит любому, кто получит ваш закрытый ключ, создать собственный корневой сертификат. Результат должен выглядеть так:
Генерация закрытого ключа RSA, длина модуля 2048 бит . ................................................ ...............+++ ......................................++++ е 65537 (0x10001) Введите парольную фразу для myCA.key: Проверка — введите парольную фразу для myCA.key:
Далее генерируем корневой сертификат:
openssl req -x509 -new -nodes -key myCA.key -sha256 -days 1825 -out myCA.pem
Вам будет предложено ввести кодовую фразу закрытого ключа, который вы только что выбрали, и ряд вопросов. Ответы на эти вопросы не так важны. Они появляются при просмотре сертификата, чего вы почти никогда не сделаете. Я предлагаю сделать Common Name таким, чтобы вы узнавали его как корневой сертификат в списке других сертификатов. Это действительно единственное, что имеет значение.
Введите парольную фразу для myCA.key: Вас попросят ввести информацию, которая будет включена в ваш запрос сертификата. То, что вы собираетесь ввести, называется отличительным именем или DN. Полей довольно много, но вы можете оставить некоторые пустыми Для некоторых полей будет значение по умолчанию, Если вы введете «. », поле останется пустым. ----- Название страны (двухбуквенный код) [AU]:US Название штата или провинции (полное название) [Some-State]: Штат Спрингфилд Название местности (например, город) []:Спрингфилд Название организации (например, компания) [Internet Widgits Pty Ltd]: Hellfish Media Название организационного подразделения (например, раздел) []:7G Общее имя (например, полное доменное имя сервера или ВАШЕ имя) []:Hellfish Media Адрес электронной почты []:[email protected]
Теперь у вас должно быть два файла: myCA.key (ваш закрытый ключ) и myCA.pem (ваш корневой сертификат).
🎉 Поздравляем, теперь вы ЦС. Вроде, как бы, что-то вроде.
Создание закрытого ключа и корневого сертификата в Windows
В Windows также можно настроить среду для запуска команд openssl
. Вам просто нужны дополнительные инструменты.
Если вы используете подсистему Windows для Linux (WSL), то это как если бы вы работали в Linux, и команды будут работать точно так же. Если вы используете Windows с чем-то вроде WampServer или XAMPP, вам понадобится способ установить утилиту командной строки OpenSSL в Windows. Самый простой способ сделать это — установить Git для Windows, который поставляется в комплекте с OpenSSL и утилитой Git Bash.
Открыв окно Git Bash, вы можете выполнять те же команды, что и для macOS или Linux, с одним небольшим отличием. Из-за того, как некоторые консольные приложения (в частности, OpenSSL) работают в Git Bash, вам необходимо использовать префикс openssl
для команд winpty
.
Так, например, следующая команда позволяет сгенерировать закрытый ключ, чтобы стать локальным ЦС в Git Bash:
winpty openssl genrsa -des3 -out myCA.key 2048
Другими небольшими отличиями являются пути к файлам в Git Bash. Когда вы открываете экземпляр Git Bash, домашний каталог в терминале сопоставляется с вашим пользовательским каталогом в Windows, но со структурой каталогов, подобной Linux. Итак, если ваш каталог пользователя находится по адресу c:\Users\Hellfish
в Windows ваш домашний каталог Git Bash будет c/Users/Hellfish
.
Установка корневого сертификата
Чтобы стать настоящим центром сертификации, вам необходимо получить корневой сертификат на всех устройствах в мире.
Но нам не нужно становиться настоящим ЦС. Нам просто нужно быть ЦС для ваших устройств. Нам нужно добавить корневой сертификат на все ноутбуки, настольные компьютеры, планшеты и телефоны, которые обращаются к вашим сайтам HTTPS. Это может быть немного болезненно, но хорошая новость заключается в том, что нам нужно сделать это только один раз. Наш корневой сертификат будет действителен до истечения срока его действия.
Добавление корневого сертификата в macOS Monterey Keychain
Через интерфейс командной строки
sudo security add-trusted-cert -d -r trustRoot -k "/Library/Keychains/System.keychain" myCA.pem
Через приложение «Связка ключей» для macOS
- Откройте приложение «Связка ключей» для macOS
- При необходимости убедитесь, что вы выбрали системную цепочку для ключей (в более ранних версиях macOS по умолчанию используется эта цепочка для ключей)
- Перейдите к Файл > Импорт элементов…
- Выберите файл с закрытым ключом (например,
myCA. pem
) - Найдите то, что вы ответили как «Общее имя» выше
- Дважды щелкните корневой сертификат в списке
- Расширить раздел Trust
- Измените флажок «При использовании этого сертификата:» на Всегда доверять
- Закрыть окно сертификата
- Во время процесса может попросить ввести пароль (или отсканировать палец), сделайте это
- 🎉 Празднуйте!
Добавление корневого сертификата в Linux
Существует так много дистрибутивов Linux, но Ubuntu, безусловно, самый популярный, и именно его мы использовали при создании SpinupWP. Поэтому эти инструкции охватывают Ubuntu.
- Если он еще не установлен, установите пакет
ca-certificates
.
sudo apt-get install -y ca-сертификаты
- Скопируйте файл
myCA.pem
в каталог/usr/local/share/ca-certificates
как файл .0168 файл myCA.crt .
sudo cp ~/certs/myCA.pem /usr/local/share/ca-certificates/myCA.crt
- Обновите хранилище сертификатов.
sudo update-ca-сертификаты
Вы можете проверить, установлен ли сертификат, выполнив следующую команду:
awk -v cmd='openssl x509 -noout -subject' '/BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt | grep Адская рыба
Если он установлен правильно, вы увидите сведения о корневом сертификате.
subject=C = США, ST = штат Спрингфилд, L = Спрингфилд, O = СМИ Hellfish, OU = 7G, CN = СМИ Hellfish, адрес электронной почты = [email protected]
Добавление корневого сертификата в Windows 10
- Откройте «Консоль управления Microsoft» с помощью комбинации клавиш Windows + R , набрав
mmc
и нажав Открыть - Перейдите к Файл > Добавить/удалить оснастку
- Click Сертификаты и Добавить
- Выберите Учетная запись компьютера и нажмите Далее
- Выберите Локальный компьютер , затем нажмите Готово
- Нажмите OK , чтобы вернуться в окно MMC
- Дважды щелкните Сертификаты (локальный компьютер) , чтобы развернуть представление
- Выберите Доверенные корневые центры сертификации , щелкните правой кнопкой мыши Сертификаты в среднем столбце в разделе «Тип объекта» и выберите Все задачи затем Импорт
- Щелкните Далее , затем Просмотрите . Измените раскрывающийся список расширения сертификата рядом с полем имени файла на Все файлы (*.*) и найдите файл
myCA.pem
, нажмите Открыть , затем Далее - Выберите Поместите все сертификаты в следующее хранилище . По умолчанию используется «Хранилище доверенных корневых центров сертификации». Нажмите Далее , затем нажмите Готово для завершения работы мастера.
Если все прошло по плану, вы должны увидеть свой сертификат ЦС в списке Доверенные корневые центры сертификации > Сертификаты .
Добавление корневого сертификата в iOS 14
Если вы используете что-то вроде ngrok для просмотра локальных сайтов разработки на мобильных устройствах, вам может потребоваться добавить корневой сертификат на эти устройства. На устройствах iOS вы можете сделать это довольно легко, выполнив следующие действия:
- Отправьте корневой сертификат себе по электронной почте, чтобы вы могли получить к нему доступ на своем устройстве iOS. Обязательно используйте почтовое приложение по умолчанию для доступа к электронной почте.
- Нажмите на вложение в электронном письме на устройстве iOS. Вам будет предложено просмотреть профиль в приложении «Настройки».
- Откройте приложение «Настройки» и нажмите Профиль загружен вверху.
- Нажмите Установить в правом верхнем углу, а затем еще раз Установить на экране предупреждения.
- После установки нажмите Закройте и вернитесь на главную страницу настроек.
- Перейдите к Общие > О .
- Прокрутите вниз и нажмите Настройки доверия сертификата .
- Включите корневой сертификат в разделе «ВКЛЮЧИТЬ ПОЛНОЕ ДОВЕРИЕ ДЛЯ КОРНЕВЫХ СЕРТИФИКАТОВ».
Теперь мы являемся центром сертификации на всех наших устройствах и можем подписывать сертификаты для любых новых сайтов разработчиков, которым требуется HTTPS. Во-первых, мы создаем закрытый ключ для сайта разработки. Обратите внимание, что мы называем закрытый ключ, используя URL-адрес доменного имени сайта разработки. Это не обязательно, но упрощает управление, если у вас несколько сайтов:
openssl genrsa -out hellfish.test.key 2048
Затем мы создаем CSR:
openssl req -new -key hellfish.test.key -out hellfish.test.csr
Вы получите все те же вопросы, что и выше, и, опять же, ваши ответы не имеют значения. На самом деле они имеют значение даже меньше , потому что вы не будете искать этот сертификат в списке рядом с другими.
Вас попросят ввести информацию, которая будет включена в ваш запрос сертификата. То, что вы собираетесь ввести, называется отличительным именем или DN. Полей довольно много, но вы можете оставить некоторые пустыми Для некоторых полей будет значение по умолчанию, Если вы введете «.», поле останется пустым. ----- Название страны (двухбуквенный код) [AU]:US Название штата или провинции (полное название) [Some-State]: Springfield State Название местности (например, город) []:Спрингфилд Название организации (например, компания) [Internet Widgits Pty Ltd]: Hellfish Media Название организационного подразделения (например, раздел) []:7G Общее имя (например, полное доменное имя сервера или ВАШЕ имя) []:Hellfish Media Адрес электронной почты []: asimpson@hellfish. media Пожалуйста, введите следующие «дополнительные» атрибуты будет отправлен с вашим запросом сертификата Пароль вызова []: Необязательное название компании []:
Наконец, мы создадим файл конфигурации расширения сертификата X509 V3, который используется для определения альтернативного имени субъекта (SAN) для сертификата. В нашем случае мы создадим файл конфигурации с именем hellfish.test.ext
, содержащий следующий текст:
authorKeyIdentifier=keyid,issuer основные ограничения = КА: ЛОЖЬ keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment subjectAltName = @alt_names [alt_names] DNS.1 = адская рыба.тест
Мы будем запускать openssl x509
, потому что команда x509 позволяет нам редактировать настройки доверия сертификатов. В этом случае мы используем его для подписи сертификата в сочетании с файлом конфигурации, что позволяет нам установить альтернативное имя субъекта. Первоначально я нашел этот ответ на Stack Overflow.
Теперь мы запускаем команду для создания сертификата: используя наш CSR, закрытый ключ ЦС, сертификат ЦС и файл конфигурации:
openssl x509 -req -in hellfish.test.csr -CA myCA.pem -CAkey myCA.key \ -CAcreateserial -out hellfish.test.crt -days 825 -sha256 -extfile hellfish.test.ext
Теперь у нас есть три файла: hellfish.test.key
(закрытый ключ), hellfish.test.csr
(запрос на подпись сертификата или файл csr) и hellfish.test.crt
(подписанный свидетельство). Мы можем настроить локальные веб-серверы для использования HTTPS с закрытым ключом и подписанным сертификатом.
Если вы используете MAMP Pro, в версии 6.0 появилась встроенная поддержка SSL. Вы можете включить его, установив флажок SSL под выбранным веб-сервером.
Если вы предпочитаете использовать локально подписанный сертификат, который мы только что настроили, вы можете сделать это, включив представление «Эксперт», щелкнув вкладку SSL и выбрав «Сертификат» и «Ключ сертификата» (закрытый ключ) файлы.
Если вы используете среду Linux или Windows, в которой используется Nginx, вы можете воспользоваться инструкциями из нашей серии «Установка WordPress на Ubuntu 20.04».
Если вы используете Apache в Linux или Windows, вам необходимо включить мод Apache SSL и настроить виртуальный хост Apache для порта 443 для локального сайта. Вам потребуется добавить SSLEngine
, SSLCertificateFile
и SSLCertificateKeyFile
, а последние две укажите на только что созданный файл сертификата и ключа.
<Виртуальный хост *:443> Имя сервера hellfish.test DocumentRoot /var/www/hellfish-test SSLEngine включен SSLCertificateFile /path/to/certs/hellfish.test.crt SSLCertificateKeyFile /path/to/certs/hellfish.test.key виртуальный хост>
У нас нет инструкций, как это сделать в Windows с помощью IIS, потому что WordPress не так просто настроить в системах IIS.
Нам не нужно создавать новый центр сертификации для каждого сайта. Мы можем просто повторить эту последнюю часть создания сертификата для любых других сайтов разработчиков.
Сценарий оболочки
Чтобы ускорить работу, вот удобный сценарий оболочки, который вы можете изменить для своих целей. Он должен работать на macOS, Linux или Windows через Git Bash:
#!/bin/sh если [ "$#" -ne 1 ] тогда echo "Использование: необходимо указать домен" выход 1 фи ДОМЕН=$1 компакт-диск ~/сертификаты openssl genrsa -out $DOMAIN.key 2048 openssl req -new -key $DOMAIN.key -out $DOMAIN.csr кошка > $DOMAIN.ext << EOF authorKeyIdentifier=keyid,эмитент основные ограничения = КА: ЛОЖЬ keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment subjectAltName = @alt_names [alt_names] DNS.1 = $ДОМЕН EOF OpenSSL x509-req -in $DOMAIN.csr -CA ../myCA.pem -CAkey ../myCA.key -CAcreateserial \ -out $DOMAIN.crt -days 825 -sha256 -extfile $DOMAIN.ext
Альтернативы
Альтернативой для создания локально доверенных SSL-сертификатов является mkcert (спасибо людям в комментариях за указание на это). Если вы не возражаете против использования одного из различных менеджеров пакетов, перечисленных в файле readme mkcert, для установки инструмента, это хорошая альтернатива для создания локально доверенных SSL-сертификатов. Недостатком является то, что он устанавливает для вас только корневой сертификат CA на вашем локальном компьютере и создает локально подписанные SSL-сертификаты, вам все равно нужно настраивать сертификаты вручную для каждого локального сайта.
Заключение
Итак, вы знаете, как стать вашим собственным локальным центром сертификации, чтобы подписывать ваши локальные сертификаты SSL и использовать HTTPS на ваших локальных сайтах. Надеюсь, это избавит вас от страшного сообщения «Ваше соединение не защищено» на ваших локальных веб-сайтах разработки.
Пробовали ли вы создать собственный ЦС? Вы работаете локально с HTTPS? Позвольте мне знать в комментариях ниже.
Как создать самозаверяющий сертификат SSL с помощью OpenSSL?
Я что-то упустил? Это правильный способ создания самозаверяющего сертификата?
Создать самозаверяющий сертификат очень просто. Вы просто используете команду openssl req
. Может быть сложно создать такой, который сможет использовать самый большой выбор клиентов, таких как браузеры и инструменты командной строки.
Это сложно, потому что браузеры имеют свой собственный набор требований, и они более строгие, чем IETF. Требования, используемые браузерами, задокументированы на форумах CA/Browser (см. ссылки ниже). Ограничения возникают в двух ключевых областях: (1) якоря доверия и (2) DNS-имена.
Современным браузерам (таким как варез, который мы использовали в 2014/2015 годах) нужен сертификат, который привязывается к якорю доверия, и они хотят, чтобы DNS-имена представлялись в сертификате определенным образом. И браузеры активно выступают против самоподписанных серверных сертификатов.
Некоторые браузеры не позволяют легко импортировать самозаверяющий сертификат сервера. Фактически, вы не можете использовать некоторые браузеры, такие как браузер Android. Таким образом, полное решение состоит в том, чтобы стать своим собственным авторитетом.
Если вы не становитесь своим собственным авторитетом, вы должны получить правильные DNS-имена, чтобы дать сертификату наибольшие шансы на успех. Но я бы посоветовал вам стать авторитетом для себя. Легко стать авторитетом для себя, и это позволит обойти все проблемы с доверием (кому лучше доверять, чем себе?).
Вероятно, это не тот сайт, который вы ищете!
Сертификат безопасности сайта не является доверенным!
Это связано с тем, что браузеры используют предопределенный список якорей доверия для проверки сертификатов сервера. Самозаверяющий сертификат не связывается с доверенным якорем.
Лучший способ избежать этого:
- Создайте свой собственный центр сертификации (т. е. станьте ЦС)
- Создайте запрос на подпись сертификата (CSR) для сервера
- Подпишите CSR сервера своим ключом ЦС
- Установить сертификат сервера на сервер
- Установите сертификат ЦС на клиенте
Шаг 1 - Создайте свой собственный центр сертификации просто означает создание самозаверяющего сертификата с CA: true
и правильное использование ключа. значит Субъект и Издатель — это одна и та же сущность, для CA установлено значение true в Basic Constraints (он также должен быть помечен как критический), использование ключа — keyCertSign
и crlSign
(если вы используете CRL), Идентификатор ключа субъекта (SKI) совпадает с идентификатором ключа органа (AKI).
Чтобы стать собственным центром сертификации, см. *Как подписать запрос на подпись сертификата в своем центре сертификации? о переполнении стека. Затем импортируйте свой ЦС в хранилище доверия, используемое браузером.
Шаги 2–4 примерно соответствуют тому, что вы делаете сейчас для общедоступного сервера, когда подключаете услуги ЦС, такого как Startcom или CAcert. Шаги 1 и 5 позволяют вам избежать стороннего авторитета и действовать как собственный авторитет (кому лучше доверять, чем себе?).
Следующий лучший способ избежать предупреждения браузера — доверять сертификату сервера. Но некоторые браузеры, такие как браузер Android по умолчанию, не позволяют вам это сделать. Так что это никогда не будет работать на платформе.
Проблема с браузерами (и другими подобными пользовательскими агентами) , а не , доверяющие самозаверяющим сертификатам, станет большой проблемой в Интернете вещей (IoT). Например, что произойдет, когда вы подключитесь к своему термостату или холодильнику, чтобы запрограммировать его? Ответ: ничего хорошего с точки зрения пользовательского опыта.
Рабочая группа W3C WebAppSec начинает изучать проблему. См., например, Предложение: Маркировка HTTP как небезопасного.
Как создать самозаверяющий сертификат с OpenSSL
Приведенные ниже команды и файл конфигурации создают самозаверяющий сертификат (также показано, как создать запрос на подпись). Они отличаются от других ответов в одном отношении: DNS-имена, используемые для самозаверяющего сертификата, находятся в альтернативном имени субъекта (SAN) , а не в общем имени (CN) .
DNS-имена размещаются в SAN через конфигурационный файл со строкой subjectAltName = @alternate_names
(через командную строку это сделать нельзя). Тогда есть alter_names
раздел в конфигурационном файле (вы должны настроить его по своему вкусу):
[ alter_names ] DNS.1 = example.com DNS.2 = www.example.com DNS.3 = mail.example.com DNS.4 = ftp.example.com # Добавьте их, если они вам нужны. Но обычно вы не хотите их или # они нужны в производстве. Они могут понадобиться вам для развития. # DNS.5 = локальный хост # DNS.6 = localhost.localdomain # IP.1 = 127.0.0.1 # IP.2 = ::1
Важно поместить DNS-имя в SAN, а не в CN, потому что и как IETF, так и форумы CA/Browser определяют практику. Они также указывают, что DNS-имена в CN устарели (но не запрещены). Если вы поместите DNS-имя в CN, то оно должно быть включено в SAN в соответствии с политиками CA/B. Таким образом, вы не можете избежать использования альтернативного имени субъекта.
Если вы не поместите DNS-имена в SAN, сертификат не пройдет проверку в браузере и других пользовательских агентах, которые следуют рекомендациям CA/Browser Forum.
Связано: браузеры следуют политикам CA/Browser Forum; а не политики IETF. Это одна из причин, по которой сертификат, созданный с помощью OpenSSL (который обычно следует IETF), иногда не проверяется в браузере (браузеры следуют CA/B). Это разные стандарты, у них разные политики выдачи и разные требования к проверке.
Создайте самозаверяющий сертификат (обратите внимание на добавление опции -x509
):
openssl req -config example-com.conf -new -x509-sha256 -newkey rsa:2048 -узлы \ -keyout пример-com.key.pem -days 365 -out пример-com.cert.pem
Создайте запрос на подпись (обратите внимание на отсутствие опции -x509
):
openssl req -config example-com.conf -new -sha256 -newkey rsa:2048 -nodes \ -keyout example-com. key.pem -days 365 -out example-com.req.pem
Печать самоподписанного сертификата :
openssl x509 -in example-com.cert.pem -text -noout
Распечатать запрос на подпись :
openssl req -in example-com.req.pem -text -noout
Файл конфигурации (передается через опцию -config
)
[ req ] биты по умолчанию = 2048 default_keyfile = server-key.pem отличительное_имя = тема req_extensions = req_ext x509_extensions = x509_ext string_mask = только utf8 # DN субъекта может быть сформирован с использованием X501 или RFC 4514 (описание см. в RFC 4519). # Это своего рода мэшап. Например, RFC 4514 не предоставляет адрес электронной почты. [ предмет ] countryName = название страны (двухбуквенный код) countryName_default = США stateOrProvinceName = название штата или провинции (полное название) stateOrProvinceName_default = Нью-Йорк localityName = Название местности (например, город) localityName_default = Нью-Йорк OrganizationName = Название организации (например, компания) организацияName_default = Пример, ООО # Используйте понятное имя, потому что оно представлено пользователю. DNS сервера # имена помещаются в альтернативные имена субъектов. Кроме того, DNS-имена здесь устарели. # как IETF, так и CA/Browser Forums. Если вы разместите здесь DNS-имя, то вы # также должно включать DNS-имя в SAN (в противном случае Chrome и другие # строго следовать базовым требованиям CA/браузера не удастся). commonName = Общее имя (например, полное доменное имя сервера или ВАШЕ имя) commonName_default = Пример компании адрес электронной почты = адрес электронной почты emailAddress_default = [email protected] # Раздел x509_ext используется при создании самоподписанного сертификата. То есть openssl req -x509... [ x509_ext ] subjectKeyIdentifier = хэш authorKeyIdentifier = идентификатор ключа, эмитент # Вам нужна только цифровая подпись ниже. *Если* вы не разрешаете # Передача ключа RSA (т. е. вы используете эфемерные наборы шифров), затем # опустить keyEncipherment, потому что это передача ключей. базовые ограничения = CA:FALSE keyUsage = digitalSignature, keyEncipherment subjectAltName = @alternate_names nsComment = "Сгенерированный сертификат OpenSSL" # RFC 5280, раздел 4. 2.1.12 делает EKU необязательным # CA/базовые требования к браузеру, Приложение (B)(3)(G) меня смущает # В любом случае вам, вероятно, понадобится только serverAuth. # extendedKeyUsage = serverAuth, clientAuth # Раздел req_ext используется при формировании запроса на подпись сертификата. То есть запрос openssl ... [req_ext] subjectKeyIdentifier = хэш базовые ограничения = CA:FALSE keyUsage = digitalSignature, keyEncipherment subjectAltName = @alternate_names nsComment = "Сгенерированный сертификат OpenSSL" # RFC 5280, раздел 4.2.1.12 делает EKU необязательным # CA/базовые требования к браузеру, Приложение (B)(3)(G) меня смущает # В любом случае вам, вероятно, понадобится только serverAuth. # extendedKeyUsage = serverAuth, clientAuth [альтернативные_имена] DNS.1 = example.com DNS.2 = www.example.com DNS.3 = mail.example.com DNS.4 = ftp.example.com # Добавьте их, если они вам нужны. Но обычно вы не хотите их или # они нужны в производстве. Они могут понадобиться вам для развития. # DNS.5 = локальный хост # DNS. 6 = localhost.localdomain # DNS.7 = 127.0.0.1 # IPv6 локальный хост # DNS.8 = ::1
Вам может потребоваться сделать следующее для Chrome. В противном случае Chrome может сообщить, что Common Name недействителен ( ERR_CERT_COMMON_NAME_INVALID
). Я не уверен, какая связь между IP-адресом в SAN и CN в данном случае.
# локальный хост IPv4 # IP.1 = 127.0.0.1 # IPv6 локальный хост # IP.2 = ::1
Существуют и другие правила, касающиеся обработки DNS-имен в сертификатах X.509/PKIX. Обратитесь к этим документам для правил:
- RFC 5280, Internet X.509 Сертификат инфраструктуры открытых ключей и список отозванных сертификатов (CRL) Профиль
- RFC 6125, Представление и проверка удостоверения службы доменных приложений в инфраструктуре открытых ключей Интернета с использованием сертификатов X.509 (PKIX) в контексте безопасности транспортного уровня (TLS)
- RFC 6797, Приложение A, Строгая транспортная безопасность HTTP (HSTS)
- RFC 7469, Расширение для закрепления открытого ключа для HTTP
- Базовые требования CA/Browser Forum
- Руководство CA/Browser Forum по расширенной проверке
Перечислены RFC 6797 и RFC 7469, поскольку они имеют более строгие ограничения, чем другие документы RFC и CA/B. RFC 6797 и 7469 также не разрешают IP-адрес.
Как создавать самозаверяющие сертификаты с помощью OpenSSL
В этом руководстве мы предоставили пошаговые инструкции о том, как создавать самозаверяющие сертификаты с помощью утилиты OpenSSL. Вы можете создавать самозаверяющие сертификаты с помощью команд или автоматизировать их с помощью сценария оболочки, следуя этому руководству.
Openssl — удобная утилита для создания самозаверяющих сертификатов. Вы можете использовать OpenSSL во всех операционных системах, таких как Windows, MAC и версии Linux .
Что такое самозаверяющий сертификат?
Самозаверяющий сертификат — это сертификат SSL/TSL, не подписанный общедоступным или частным центром сертификации. Вместо этого он подписывается личным или корневым сертификатом CA создателя.
Вот что мы делаем, чтобы запросить платный сертификат SSL/TLS у известный центр сертификации , например Verisign или comodo.
- Создайте запрос на подпись сертификата (CSR) с закрытым ключом. CSR содержит сведения о расположении, организации и FQDN (полное доменное имя).
- Отправьте CSR доверенному центру CA.
- Центр сертификации отправит вам SSL-сертификат, подписанный их корневым центром сертификации, и закрытый ключ.
- Затем вы можете проверить и использовать сертификат SSL в своих приложениях.
Но для самозаверяющего сертификата , вот что мы делаем.
- Создайте наш собственный корневой сертификат ЦС и закрытый ключ ЦС (мы сами выступаем в качестве ЦС)
- Создайте закрытый ключ сервера для создания CSR
- Создайте SSL-сертификат с CSR, используя наш корневой ЦС и закрытый ключ ЦС.
- Установите сертификат ЦС в браузере или операционной системе, чтобы избежать предупреждений системы безопасности.
Необходимость в собственном центре сертификации
Большинство браузеров и операционных систем содержат копии корневых сертификатов ЦС всех доверенных сертифицированных центров сертификации. По этой причине браузеры не будут отображать никаких сообщений безопасности, когда вы посещаете стандартные веб-сайты, использующие SSL от доверенного и известного коммерческого центра сертификации.
На следующем изображении показан корневой ЦС , присутствующий в браузере Firefox по умолчанию.
В то же время, если вы используете самоподписанный сертификат, ваш браузер выдаст предупреждение системы безопасности. Причина в том, что браузеры доверяют SSL только от доверенного центра сертификации. Например,
Ваше соединение не защищено Злоумышленники могут попытаться украсть вашу информацию с demo.apps.mlopshub.com (например, пароли, сообщения или кредитные карты)
Но вы можете заставить браузеры и операционные системы принимать наш собственный центр сертификации. Таким образом, вы не увидите предупреждения системы безопасности после того, как установите сертификат ЦС и добавите его в список доверенных. Вы также можете поделиться сертификатом CA со своей командой разработчиков, чтобы установить его в своих браузерах.
Кроме того, вы можете использовать этот ЦС для создания более одного сертификата SSL .
Создать центр сертификации
Как обсуждалось ранее, нам нужно создать собственный корневой сертификат ЦС, чтобы браузеры доверяли самозаверяющему сертификату. Итак, давайте сначала создадим корневой сертификат CA.
Давайте создадим каталог с именем openssl
для сохранения всех сгенерированных ключей и сертификатов.
mkdir openssl && cd openssl
Выполните следующую команду openssl
для создания rootCA.key
и rootCA.crt
. Замените demo.mlopshub.com
своим доменным именем или IP-адресом.
запрос openssl -x509 \ -sha256 -дней 356\ -узлы \ -новый ключ rsa:2048 \ -subj "/CN=demo.mlopshub.com/C=US/L=Сан-Франциско" \ -keyout rootCA.key -out rootCA.crt
Мы будем использовать rootCA. key
и rootCA.crt
для подписи сертификата SSL.
Примечание : Если вы получаете следующую ошибку, прокомментируйте RANDFILE = $ENV::HOME/.rnd
строка в /etc/ssl/openssl.cnf
Не удается загрузить /home/vagrant/.rnd в RNG
Создание самозаверяющих сертификатов с помощью OpenSSL
Следуйте инструкциям ниже, чтобы создать самозаверяющие сертификаты. Мы будем подписывать сертификаты, используя наш собственный корневой ЦС, созданный на предыдущем шаге.
1. Создайте закрытый ключ сервера
openssl genrsa -out server.key 2048
2. Создайте конфигурацию запроса на подпись сертификата
Мы создадим файл csr.conf
, чтобы иметь всю информацию для создания CSR. Замените demo.mlopshub.com
своим доменным именем или IP-адресом.
кошка > csr.conf <mlopshub.com [req_ext] subjectAltName = @alt_names [ альтернативные имена ] DNS.1 = demo.mlopshub.com DNS.2 = www.demo.mlopshub.com ИП.1 = 192.168.1.5 IP.2 = 192.168.1.6 EOF
3. Генерация запроса на подпись сертификата (CSR) с использованием закрытого ключа сервера
Теперь мы сгенерируем server.csr
с помощью следующей команды.
openssl req -new -key server.key -out server.csr -config csr.conf
Теперь в нашей папке должно быть три файла. csr.conf
, server.csr
и server.key
4. Создайте внешний файл
Выполните следующие действия, чтобы создать cert.conf
для сертификата SSL. Замените demo.mlopshub.com
своим доменным именем или IP-адресом.
кошка > cert.conf <1 = demo.mlopshub.com EOF
5. Генерация SSL-сертификата с самоподписанным CA
Теперь выполните следующую команду, чтобы сгенерировать SSL-сертификат, подписанный rootCA.crt
и rootCA.key
, созданные как часть нашего собственного центра сертификации.
openssl x509 -req \ -в server.csr \ -CA rootCA.crt -CAkey rootCA.key \ -CAcreateserial -out server.crt \ -дней 365\ -sha256 -extfile cert.conf
Приведенная выше команда сгенерирует server.crt
, который будет использоваться с нашим server.key от
до для включения SSL в приложениях.
Например, следующая конфигурация показывает конфигурацию Nginx с использованием сертификата сервера и закрытого ключа, используемых для настройки SSL.
сервер { слушать 443; SSL включен; ssl_certificate /etc/ssl/ server.crt ; ssl_certificate_key /etc/ssl/ server.key ; имя_сервера ваш. домен.com; журнал_доступа /var/log/nginx/nginx.vhost.access.log; error_log /var/log/nginx/nginx.vhost.error.log; расположение / { корень /home/www/public_html/your.domain.com/public/; индекс index.html; } }
Установите центр сертификации в браузере/ОС
Вам необходимо установить rootCA.crt
в браузере или операционной системе, чтобы избежать появления сообщения безопасности, которое появляется в браузере при использовании самозаверяющих сертификатов.
Установка самозаверяющих сертификатов ЦС зависит от операционной системы. Например, в MAC вы можете добавить сертификат, дважды щелкнув его и добавив в цепочку для ключей. Обратитесь к соответствующему руководству по операционной системе по установке сертификата.
- Для MAC проверьте это руководство
- Добавление сертификата в Chrome в Windows
Сценарий оболочки для создания самозаверяющего сертификата
Если вы хотите создавать самозаверяющие сертификаты довольно часто, вы можете использовать следующий сценарий оболочки . Вам просто нужно выполнить скрипт с доменным именем или IP-адресом, который вы хотите добавить в сертификат.
Сохраните следующий сценарий оболочки как ssl.sh
#! /бин/баш если [ "$#" -ne 1 ] тогда echo "Ошибка: не указан аргумент имени домена" echo "Использование: укажите доменное имя в качестве аргумента" выход 1 фи ДОМЕН=$1 # Создать корневой ЦС и закрытый ключ запрос openssl -x509 \ -sha256 -дней 356\ -узлы \ -новый ключ rsa:2048 \ -subj "/CN=${DOMAIN}/C=US/L=Сан-Франциско" \ -keyout rootCA.key -out rootCA.crt # Генерация приватного ключа genrsa openssl -out ${DOMAIN}.key 2048 # Создаем csf-конфиг кошка > csr.conf <1 = ${ДОМЕН} DNS.2 = www.${ДОМЕН} ИП.1 = 192.168.1.5 IP.2 = 192.168.1.6 EOF # создать запрос CSR с использованием закрытого ключа openssl req -new -key ${DOMAIN}.key -out ${DOMAIN}.csr -config csr.conf # Создаем внешний конфигурационный файл для сертификата кошка > cert.conf < Установите разрешение на выполнение сценария, выполнив следующую команду.
chmod +x ssl.shВыполнить скрипт с доменным именем или IP. Например,
./ssl.sh demo.mlopshub.comСценарий создаст все сертификаты и ключи, которые мы создали с помощью
отдельных команд
. SSL-сертификат и закрытые ключи получают имя домена, которое вы передаете в качестве аргумента скрипта. Например,demo.mlopshub.com.key
&demo.mlopshub.com.crt
Каковы преимущества использования самоподписанного сертификата?
Использование самоподписанного сертификата имеет несколько преимуществ:
- Вам не нужно полагаться на третью сторону для подписания сертификата.
- Вы можете создать и использовать свой собственный центр сертификации.
- Вам не нужно платить за сертификат ЦС.
- У вас больше контроля над сертификатами.
Каковы недостатки использования самоподписанного сертификата?
Есть также несколько недостатков использования самоподписанного сертификата:
- Вашим пользователям потребуется установить сертификат в свои браузеры или приложения.
- Ваши пользователи должны будут доверять вашему центру сертификации вручную.
- Они небезопасны для общедоступных приложений.
- Ни один из браузеров или операционных систем не доверяет самозаверяющим сертификатам, пока пользователь не установит их.
- Склонен к атакам «человек посередине».
Как правило, самозаверяющие сертификаты являются хорошим вариантом для приложений, в которых вам необходимо подтвердить свою личность. Они также являются хорошим вариантом для сред разработки и тестирования . Однако их не следует использовать для производственных приложений.
Самозаверяющие сертификаты в организациях
Многие организации используют самозаверяющие сертификаты для своих внутренних приложений, не подключенных к Интернету. Эти сертификаты генерируются с использованием внутренней инфраструктуры PKI организации.
Команды DevOps и разработчики могут запрашивать SSL-сертификаты из инфраструктуры PKI для использования в приложениях.
Часто задаваемые вопросы о самозаверяющих сертификатах
Как создать самозаверяющий сертификат в Windows?
Вы можете создать самозаверяющий сертификат на Windows с помощью Openssl. Команды OpenSSL одинаковы для всех операционных систем. Вы можете следовать этому руководству, чтобы создать самозаверяющий сертификат на Windows с помощью этого руководства.
Как получить самозаверяющий сертификат?
Самозаверяющий сертификат может быть сгенерирован вами с помощью таких инструментов, как openSSL или набор инструментов CDSSL PKI.
Заключение
В этом руководстве мы узнали, как создавать самозаверяющие SSL-сертификаты с помощью OpenSSL.
Для производственных сценариев использования, если вы не хотите тратить деньги на сертификаты SSL, вы можете попробовать Letsencrypt.
Надеюсь, что это руководство по самоподписанному SSL было полезно для скрипта для автоматизации создания сертификата. Дайте нам знать, если у вас возникнут какие-либо проблемы.
Кроме того, SSL/TLS — одна из важных тем в DevOps. Вы можете прочитать блог о том, как стать devops-инженером, чтобы узнать больше.
Как создавать сертификаты SSL для разработки | Патрик Калкман
Автоматизация генерации сертификатов SSL
Как я смотрю на сертификаты, изображение создано авторомНа прошлой неделе я начал внедрять брокера телеметрии MQ (MQTT). MQTT — это упрощенный протокол публикации-подписки, используемый с решениями Интернета вещей (IoT). Этот брокер должен был получать данные датчиков и повторно отправлять их другим клиентам MQTT. Связь должна быть безопасной.
Безопасность в данном случае означает использование сертификатов.
ОК, сертификаты, вздох, поехали снова. Я выдохнул через нос и собрался. Мне никогда не нравилось работать с сертификатами. Я искал в Интернете и нашел, как создавать самозаверяющие сертификаты. «Мне действительно нужно автоматизировать это», — помню, пару раз я думал об этом…
Но почему-то я всегда заканчиваю тем, что создаю сертификат, набирая команды в терминале. Затем я продолжаю проект и никогда не оглядываюсь назад.
У меня всегда были отношения любви и ненависти к сертификатам. Я никогда не понимаю, как они работают, но время от времени они нужны во время разработки.
Итак, я создал эту статью. Для меня это ориентир на будущее. Он содержит достаточно подробностей, чтобы понять сертификаты с точки зрения разработчика.
Кроме того, я, наконец, автоматизировал создание локального доверенного сертификата разработки. См. этот репозиторий GitHub.
Надеюсь, он будет вам полезен.
Обещаю, совсем немного.
Нужны ли сертификаты?
Да, есть. Нам нужны сертификаты по двум основным причинам.
- Безопасная передача данных.
- Идентификация отправителя или получателя.
Безопасная передача данных
Для безопасной передачи данных можно использовать два типа шифрования: симметричное и асимметричное. Оба имеют свои плюсы и минусы. Позже мы увидим, что когда браузер использует HTTPS для подключения к веб-сайту, браузер использует оба типа шифрования.
В чем разница между симметричным и асимметричным шифрованием?
Я считаю симметричное шифрование самым простым для понимания. И отправитель, и получатель имеют общий секретный ключ. Отправитель использует этот секретный ключ, чтобы изменить сообщение для отправки. Получатель использует тот же секретный ключ для восстановления исходного сообщения.
Асимметричное шифрование всегда кажется мне чем-то вроде магии. В этом случае вы создаете два ключа, которые принадлежат друг другу. Первый — открытый ключ. Вы можете поделиться им с любым, кто хочет отправить вам сообщение. Второй ключ является секретным ключом. Только ты должен это знать.
Если вы шифруете сообщение с помощью открытого ключа, его можно расшифровать только с помощью закрытого ключа. Кроме того, если вы шифруете сообщение с помощью закрытого ключа, его можно расшифровать только с помощью открытого ключа. Чистая магия.
При использовании SSL используются оба типа шифрования.
Связь SSL (упрощенная)
Когда браузер подключается к веб-сайту, использующему SSL, браузер выполняет следующие шаги.
- Вы указываете браузеру подключиться к веб-сайту через HTTPS. Браузер запрашивает, чтобы веб-сервер идентифицировал себя.
- Веб-сервер отправляет копию своего сертификата обратно в браузер.
- Браузер проверяет подлинность сертификата. Имя в сертификате совпадает с доменным именем? Доверяю ли я центру сертификации, подписавшему сертификат?
- Браузер генерирует пароль и шифрует его с помощью открытого ключа. Он извлек открытый ключ из сертификата. Это асимметричное шифрование. Браузер отправляет зашифрованный пароль на веб-сервер.
- Веб-сервер расшифровывает пароль с помощью закрытого ключа.
- Браузер устанавливает зашифрованное соединение. Обе стороны шифруют и расшифровывают данные, используя ранее сгенерированный пароль. Это симметричное шифрование.
Причина, по которой браузер использует только асимметричное шифрование для передачи пароля, связана с производительностью асимметричного шифрования. Асимметричное шифрование значительно медленнее, чем симметричное шифрование.
Идентификация отправителя или получателя
Сертификаты также используются для идентификации. Таким образом, вы можете быть уверены, что на самом деле подключаетесь к правильному веб-сайту.
Проверка осуществляется двумя способами. Во-первых, браузер проверяет, можно ли доверять сертификату, возвращенному веб-сервером. Это проверяется путем проверки того, что сертификат подписан центром сертификации (ЦС).
Операционная система вашего устройства содержит список доверенных сертификатов.
Например, см. приведенный ниже снимок экрана, на котором показан корневой сертификат IdenTrust. Корневой сертификат IdenTrust является одним из наиболее часто используемых сертификатов ЦС. В основном потому, что сертификаты Let’s Encrypt перекрестно подписаны IdenTrust.
Приложение Keychain Access в macOS показывает доверенные сертификаты ЦСЭтот список доверенных сертификатов используется браузером для проверки того, что полученный сертификат подписан ЦС из этого списка.
Второй тип идентификации заключается в проверке того, соответствует ли общее имя сертификата домену, который обслуживает сертификат.
Сертификат с сайта www.google.com с общим именем *.google.comФорматы файлов сертификатов
Существует множество различных форматов для хранения сертификатов. Иногда я вижу, что форматы файлов используются неправильно. Для сертификатов используются следующие форматы.
Формат PEM
Формат Privacy Enhanced Mail (PEM) является наиболее распространенным форматом для хранения сертификатов закрытых ключей. Содержимое файла представляет собой ASCII в кодировке Base64.
Файл может иметь расширения
.pem
,.crt
,.key
или.ca-bundle
. Чтобы убедиться, что файл на самом деле является файлом PEM, откройте его и убедитесь, что он начинается сBEGIN CERTIFICATE
илиBEGIN RSA PRIVATE KEY
..Формат P7B
Файл в формате P7B или PKCS#7 также хранится в кодировке ASCII Base64.
Файл имеет расширение
.p7b
или.p7c
. Формат P7B можно использовать только для хранения сертификатов, а не закрытых ключей. Формат файла используется в Windows и Java Tomcat.Формат DER
Формат Distinguished Encoding Rules (DER) хранит сертификаты и закрытые ключи в двоичном формате. Файл имеет расширение
.der
или.cer
. Формат DER часто используется на платформах Java.Формат PKCS#12
Формат PKCS#12 или PFX хранится в двоичном файле. Закрытый ключ и сертификат хранятся в одном файле.
Файл имеет расширение
.pfx
или.p12
. Файлы используются в Windows и macOS для импорта и экспорта сертификатов и закрытых ключей.Самозаверяющий сертификат может быть создан на любом компьютере. Я использую macOS с версией 1.1.1 OpenSSL. OpenSSL — это полнофункциональный набор инструментов и криптографическая библиотека. Для большинства операционных систем существуют готовые бинарные пакеты OpenSSL.
Для создания самозаверяющего сертификата необходимо выполнить следующие шаги.
- Создайте закрытый ключ.
- Создайте запрос на подпись сертификата.
- Создайте сертификат.
1. Создание закрытого ключа
Первым шагом является создание закрытого ключа путем выполнения следующей команды.
openssl genpkey -algorithm RSA -des3 -out private-key.pem -pkeyopt rsa_keygen_bits:4096
genpkey
— команда OpenSSL для выполнения, в данном случае генерация закрытого ключа
алгоритм RSA
— Какой алгоритм с открытым ключом использовать. Доступны и другие варианты, такие как RSA-PSS, EC, X25519, X448, ED25519 и ED448.
-des3
— этот параметр указывает, что OpenSSL должен шифровать закрытый ключ с помощью Triple-DES. После выполнения команды он спрашивает, какой пароль использовать.
out privateKey.pem
— OpenSSL должен хранить закрытый ключ в файле с именемprivateKey. pem
.
pkeyopt rsa_keygen_bits:4096
— Указывает количество битов, которое должно использоваться сгенерированным ключом. Я использую 4096 бит.Формат выходного файла
privateKey.pem
по умолчанию представляет собой файл PEM. Сgenpkey
OpenSSL использует синтаксис PKCS #8 для хранения ключа в файле.Я использую
genpkey
вместоgenrsa
, потому что он использует более разумные значения по умолчанию.Например, число битов сгенерированного ключа
genrsa
по умолчанию составляет 512 бит. Который, согласно ars TECHNICA в 2015 году, можно было взломать за четыре часа с помощью Amazon EC2 за 75 долларов.2. Создание запроса на подпись сертификата (CSR)
CSR похож на заказ на создание сертификата. Если вам нужен официальный SSL-сертификат, вы отправляете его в официальный центр сертификации (ЦС). Они используют CSR для создания официального сертификата.
Мы, однако, воспользуемся этим запросом, чтобы самостоятельно сгенерировать сертификат, самозаверяющий сертификат.
Ранее я описал две основные причины использования сертификата: шифрование и идентификацию. OpenSSL задаст ряд вопросов, чтобы узнать, какую информацию вводить в CSR.
Вопрос о вашем
общем имени
важен для идентификации. Вы должны указать полное доменное имя, для которого вы хотите использовать сертификат. Это также может быть внутренний домен, локальный хост или IP-адрес.openssl req -new -key private-key.pem -out csr.pem
req
— Создать запрос сертификата в формате PKCS#10.
-new
— Создать новый запрос сертификата. Запросите у пользователя всю необходимую информацию.
-key
— Имя файла закрытого ключа для использования. Закрытый ключ был сгенерирован на предыдущем шаге.
-out
— Имя файла созданного запроса сертификата.OpenSSL задаст следующие вопросы:
- Общее имя: FQDN (полное доменное имя), которое вы хотите защитить с помощью сертификата.
- Организация: Полное название вашей организации. Важно только для доверенных сертификатов.
- Организационная единица (OU): Ваш отдел. Важно только для доверенных сертификатов.
- Город или населенный пункт: Город, в котором находится ваша организация.
- Штат или провинция: Штат или провинция, где находится ваша организация.
- Страна: официальный двухбуквенный код страны, в которой находится ваша организация.
3. Создание самозаверяющего сертификата
Используя закрытый ключ из первого шага и запрос сертификата из второго шага, вы можете создать самозаверяющий сертификат. Следующая команда OpenSSL создает сертификат.
openssl x509 -in csr.pem -out certificate.pem -req -signkey private-key.pem -days 365
x509
— Выполнить команду сертификата.
-in
— указывает на запрос подписи сертификата (csr.pem
).
-out
— Имя файла для сохранения сгенерированного сертификата. В данном случаеcertificate.pem
.
-req
— Указать OpenSSL, что ввод является CSR.
-знак
— Самоподписать запрос сертификата, используя данный файлprivate-key.pem
.
-days
— Количество дней, в течение которых сгенерированный сертификат действителен. Нормальные значения — 365, 730 и 1095 дней, чтобы указать продолжительность в один, два или три года.Теперь у вас есть файл
certificate.pem
, который можно использовать для локальной разработки. В зависимости от среды разработки вам может потребоваться преобразовать сертификат в другой формат.Для разработки Node.js вы можете напрямую использовать 9Файл сертификата 0168.pem .
Простое создание самоподписанного сертификата прекрасно подходит для индивидуального проекта. Если у вас есть несколько проектов или вы работаете с командой разработчиков, создание всех этих самозаверяющих сертификатов для каждого проекта и их импорт в хранилище сертификатов каждого разработчика может стать обременительным.
Конечно, вы можете создавать сценарии для их создания, но я думаю, что лучше создать центр сертификации (ЦС) самостоятельно.
Вы можете стать центром сертификации, создав сертификат центра сертификации и используя этот сертификат для подписи собственных сертификатов. Ваша команда разработчиков может доверять сертификату ЦС и будет автоматически доверять всем сгенерированным сертификатам, подписанным этим сертификатом ЦС.
Чтобы стать центром сертификации и подписать самозаверяющий сертификат, необходимо выполнить следующие шаги:
- Сгенерировать закрытый ключ для ЦС.
- Создайте корневой сертификат.
- Создайте закрытый ключ для сертификата.
- Создайте запрос на подпись сертификата.
- Создайте сертификат и подпишите его закрытым ключом CA
1. Создайте закрытый ключ для CA
Закрытый ключ для CA можно сгенерировать с помощью следующей команды.
openssl genpkey -algorithm RSA -des3 -out private-key-ca. pem -pkeyopt rsa_keygen_bits:4096Эта команда ничем не отличается от команды для создания закрытого ключа для самоподписанного сертификата. Единственное отличие состоит в имени файла
private-key-ca.pem
.Эта команда создает файл
private-key-ca.pem
в текущем каталоге.2. Генерация корневого сертификата
С помощью следующей команды мы напрямую генерируем корневой сертификат на основе закрытого ключа, созданного на предыдущем шаге.
openssl req -x509 -new -key private-key-ca.pem -sha256 -days 3650 -out ca-certificate.pemOpenSSL снова запрашивает парольную фразу закрытого ключа и спрашивает, какую информацию поместить в корневой сертификат .
В данном случае предоставленные вами ответы не очень актуальны. Единственное, что я рекомендую, это добавить информацию в одно из полей, чтобы было видно, что это корневой сертификат.
Команда создает файл
ca-certificate.pem
в текущем каталоге.3. Создайте закрытый ключ для сертификата
С помощью следующей команды, которую мы использовали ранее, мы создаем закрытый ключ для этого конкретного сертификата.
openssl genpkey -algorithm RSA -des3 -out private-key.pem -pkeyopt rsa_keygen_bits:4096Эта команда создает файл
private-key.pem
в текущем каталоге.4. Создайте запрос на подпись сертификата
С помощью следующей команды, которую мы также использовали ранее, мы создаем запрос на подпись сертификата.
openssl req -new -key private-key.pem -out csr.pemOpenSSL снова задаст вопросы, чтобы включить их в запрос на подпись сертификата. Единственный важный вопрос — это общее имя . Установите это на доменное имя или IP-адрес, где вы хотите использовать сертификат.
Новые браузеры используют альтернативное имя субъекта (SAN) для хранения DNS-имен или IP-адресов. См. раздел о SAN далее в статье.
5. Создайте сертификат и подпишите его закрытым ключом ЦС
Следующая команда создает самозаверяющий сертификат и подписывает его закрытым ключом ЦС.
openssl x509 -req -in csr.pem -CA ca-certificate.pem -CAkey private-key-ca.pem -CAcreateserial -out certificate.crt -days 3650
x509
— выполнить команду сертификата.
-req
— Командаx509
ожидает сертификат в качестве входных данных. С помощью-req
вы указываете, что вы предоставите запрос сертификата в качестве входных данных.
-in
— Запрос сертификата (csr.pem
).
-CA
— Сертификат центра сертификации, который будет использоваться для подписи созданного сертификата. (ca-certificate.pem
)
-CAkey
— Закрытый ключ ЦС, используемый для подписи созданного сертификата. (private-key-ca.pem
)
-CAcreateserial
— Каждый сертификат, выданный ЦС, должен содержать уникальный серийный номер. OpenSSL хранит используемые серийные номера в файле с тем же именем, что и у сертификата с номером 9. 0168 .srl расширение. В этом случае в вашем локальном каталоге будетca-certificate.srl
.
-out
— Имя файла сертификата для создания (certificate.crt
).Фото Museums Victoria на Unsplash
-days
— Количество дней, в течение которых сгенерированный сертификат действителен (3650
).В предыдущих параграфах я показал вам команды OpenSSL, которые необходимы для создания локального CA и сертификатов.
Я не был бы хорошим разработчиком, если бы не пытался это автоматизировать.
Использование сценариев
Я создал два отдельных сценария. Один для создания локального ЦС, а другой для создания сертификата, подписанного локальным ЦС. Оба можно найти в этом репозитории GitHub.
Существуют отдельные сценарии для Windows и macOS. Одно отличие от команд из предыдущих абзацев заключается в том, что сценарии используют файлы конфигурации для ответа на вопросы.
Например, следующий файл конфигурации используется при создании сертификата ЦС. В нем указаны ответы на различные вопросы от OpenSSL. Вы можете изменить ответы по своему вкусу. Тот же тип конфигурации также доступен для создания самозаверяющего сертификата.
ca.conf, используемый OpenSSL при создании локального ЦСАльтернативное имя субъекта
Ранее я описал использование общего имени для хранения полного доменного имени. Начиная с версии 58, Chrome больше не поддерживает проверку общего имени. Это поле будет игнорироваться.
Вместо этого поле SAN (альтернативное имя субъекта) является правильным местом для указания вашего домена. В репозитории GitHub есть файл конфигурации с именем
Файл конфигурации, используемый для заполнения SAN в сертификатеcertificate-ext.conf
.который содержит домены и IP-адреса, помещенные в SAN.Этот файл конфигурации можно изменить, чтобы добавить нужные доменные имена и IP-адреса.
После создания сертификата с помощью команды
Поля SAN в сгенерированном сертификате, показанные с помощью Keychain Access./generate-cert.sh
сгенерированный сертификат будет иметь правильно заполненную SAN.Использование mkcert
Если вы не можете использовать предыдущий сценарий или хотите более сложное решение, вы можете использовать mkcert. Mkcert создан Филиппо Вальсорда, и он является частью команды Google Go.
Mkcert — это простой инструмент для создания локально доверенных сертификатов разработки. Он реализован на Go и не требует настройки. Он работает на Linux, Windows и macOS.
Вы можете установить mkcert с помощью brew в macOS, выполнив следующую команду:
brew install mkcertПосле установки мы можем использовать инструмент для создания собственного ЦС с помощью следующей команды:
mkcert -installИнструмент создает новый ЦС и устанавливает его непосредственно в корневом хранилище вашей операционной системы. Имя сертификата начинается с
mkcert
и содержит имя компьютера, на котором выполнялся mkcert.Закрытый ключ ЦС и сертификат также хранятся в файловой системе.