Создать tls сертификат windows

Обновлено: 02.07.2024

Внимание: этот ключ используется для подписи запросов сертификатов, любой, кто получил этот ключ, может подписывать сертификаты от вашего имени, поэтому храните его в безопасном месте:

Генерация приватного ключа RSA используя параметры по умолчанию (ключ будет сохранён в файл с именем rootCA.key):

Опция -out указывает на имя файла для сохранения, без этой опции файл будет выведен в стандартный вывод (на экран). Имя выходного файла не должно совпадать с именем входного файла.

Конечно, опцию -pass pass:hello можно не указывать, тогда вам будет предложено ввести пароль во время генерации ключа.

Список поддерживаемых симметричных алгоритмов шифрования приватного ключа можно узнать в документации (раздел SUPPORTED CIPHERS):

Если для генерируемого ключа не указано количество бит, то по умолчанию используется 2048, вы можете указать другое количество бит с помощью команды вида (будет создан 4096-битный ключ):

Создание самоподписанного корневого сертификата

Здесь мы использовали наш корневой ключ для создания корневого сертификата (файл rootCA.crt), который должен распространяться на всех компьютерах, которые нам доверяют. А приватный ключ (файл rootCA.key) должен быть секретным, поскольку он будет использоваться для подписи сертификатов серверов.


Создание сертификатов (делается для каждого домена) включает в себя несколько этапов. Эту процедуру необходимо выполнить для каждого домена/сервера, которым требуется доверенный сертификат от нашего ЦС.

Создание приватного ключа сертификата

Обратите внимание, что это та же самая команда, которой мы создавали пару приватный-публичный ключ Центра Сертификации (изменено только имя файла с ключами).

Создание файла с запросом на подпись сертификата (csr)

Получив закрытый ключ, вы можете приступить к созданию запроса на подпись сертификата — Certificate Signing Request (CSR). Это официальный запрос к CA о подписании сертификата, который содержит открытый ключ объекта, запрашивающего сертификат, и некоторую информацию об объекте. Все эти данные будут частью сертификата. CSR всегда подписывается закрытым ключом, соответствующим открытому ключу, который он несёт.

Создание CSR обычно представляет собой интерактивный процесс, в ходе которого вы будете предоставлять элементы отличительного имени сертификата (вводить информацию о стране, городе, организации, email и т.д.). Внимательно прочитайте инструкции, предоставленные инструментом openssl; если вы хотите, чтобы поле было пустым, вы должны ввести одну точку (.) в строке, а не просто нажать «Enter». Если вы сделаете последнее, OpenSSL заполнит соответствующее поле CSR значением по умолчанию. (Такое поведение не имеет никакого смысла при использовании с конфигурацией OpenSSL по умолчанию, что и делают практически все. Это имеет смысл, когда вы осознаете, что можете изменить значения по умолчанию, либо изменив конфигурацию OpenSSL, либо предоставив свои собственные конфигурации в файлах).

В запросе на подпись сертификата вы указываете информацию для сертификата, который хотите сгенерировать. Этот запрос будет обработан владельцем корневого ключа (в данном случае вы его создали ранее) для генерации сертификата.

Важно: имейте в виду, что при создании запроса на подпись важно указать Common Name, предоставляющее IP-адрес или доменное имя для службы, в противном случае сертификат не может быть проверен.

Я опишу здесь два способа:

Метод Б (в одну команду без запросов)

Этот метод генерирует тот же результат, что и метод A, но он подходит для использования в вашей автоматизации.

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

Проверка содержимого CSR

Создание сертификата

Если вы устанавливаете сервер TLS для своего собственного использования, вы, вероятно, не хотите идти в ЦС для покупки публично доверенного сертификата. Намного проще использовать сертификат, подписанный вашим собственным CA. Если вы являетесь пользователем Firefox, при первом посещении веб-сайта вы можете создать исключение для сертификата, после которого сайт будет защищён так, как если бы он был защищён общедоступным сертификатом.

Если у вас уже есть CSR, создайте сертификат, используя следующую команду:

В результате выполнения этих команд были созданы следующие файлы:

Для глубокого понимания OpenSSL смотрите также полное руководство: «OpenSSL: принципы работы, создание сертификатов, аудит».

В данной статье будет описан реальный способ получения сертификата от Let's Encrypt в ручном режиме для его дальнейшей установки на веб-сервер Windows (IIS/Microsoft Azure) или Linux (полностью ручной режим). Из-за отсутствия официального клиента под Windows для генерации сертификата будет использоваться дистрибутив Linux.


В первые дни открытия заявок на бета-тестирование и было принято решение записаться и вот недавно пришло письмо, которое сообщает о том, что теперь программа ACME сгенерирует валидный сертификат для нашего домена.

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

Как это работает

Полное описание процесса доступно по этой ссылке.
Важно лишь знать, что для подтверждения владения доменом и успешной генерации сертификата нужно будет иметь доступ к записям DNS или к серверу куда ссылается A-запись, что вполне логично.

Смысл программного набора Automated Certificate Management Environment (ACME) (написан на Python) в том, чтобы автоматизировать генерацию и установку сертификата в Linux-окружении.

Существует неофициальный Windows-клиент с открытыми исходными кодами, который может генерировать и устанавливать сертификаты на Windows IIS и Amazon Web Services, но у нас была задача получить ключи и установить их вручную. Предлагаю любому желающему написать статью по работе с ним.

Процесс по шагам

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

[11/01/17] Новый клиент CertBot

Небольшое обновление статьи в 2017 году.
Теперь можно установить CertBot и получить сертификат в ручном режиме.

1. Скачиванием дистрибутив

2. Установка прав на файл

chmod a+x certbot-auto

3. Запуск для получения сертификата в ручном режиме

./certbot-auto certonly --authenticator manual

4. Следуйте указаниям программы (подробнее смотрите в полной инструкции ниже с шага № 4).

Подробная инструкция (старый клиент — всё ещё работает)

Использовалась официальная инструкция.
Пользователи Linux могут использовать текст ниже как пример генерации сертификата в ручном режиме.

1. Запустите ваш любимый дистрибутив Linux (мы использовали Debian 8).

либо 2. Установите Git и выполните команды ниже:

или 2. Скачайте и распакуйте в папку данный архив и перейдите в эту папку

3. Запустите установку и генерацию с помощью

Вам будет предложено ввести электронную почту для восстановления в будущем.
Ключ -a manual позволит сгенерировать ключи в ручном режиме без их автоматической установки на веб-сервер.


4. Далее введите домены для которых вы хотите создать сертификаты


5. Подтвердите сохранение вашего адреса в логах Let's Encrypt


6. Подтвердите владение доменом

В сентябре 2016 года произошли небольшие изменения в порядке получения сертификата. Спасибо toxi_roman за обновление.

Старый способ подтверждения с text/plain (не актуально по состоянию на октябрь 2016 г.)

Это один из ответственных моментов в режиме ручной регистрации.
Обратите внимание: нас просят создать ответ на запрос, который возвращает Content-Type text/plain.


Такой ответ не пройдёт и подтверждение выдаст ошибку:


Нужно, чтобы было так:

Если у вас сервер на Windows (с поддержкой Razor Views, аналогично и с MVC), то самый простой способ создания правильного ответа:
а) создать папку .well-known и в ней папку acme-challenge
б) поместить туда файл [запрос].cshtml
в) в содержание этого файла добавить:
@здесь проверочный код

7. После успешной проверки, будут созданы следующие сертификаты в папке /etc/letsencrypt/live/[имя домена]:

privkey.pem — приватный ключ для сертификата
Используется Apache для SSLCertificateKeyFile и nginx для ssl_certificate_key.

cert.pem (сертификат сервера)
Используется Apache для SSLCertificateFile.

chain.pem (сертификат цепочки)
Он же используется Apache для SSLCertificateChainFile.

fullchain.pem (соединение chain.pem и cert.pem)
Он же используется nginx для ssl_certificate.

7. Теперь пришло время сконвертировать его в родной для Windows .pfx формат.
Перейдите в папку /etc/letsencrypt/live/[имя домена] (откройте терминал в режиме администратора с помощью команды su):

cd /etc/letsencrypt/live/[имя домена]

Запустите OpenSSL с помощью команды:

и начните конвертацию с помощью команды:

pkcs12 -inkey privkey.pem -in fullchain.pem -export -out mydomain.pfx

Вас попросят ввести пароль и подтвердить его.


7.2 Выходим из OpenSSL с помощью команды quit

7.3 Копируем итоговый файл в директорию нашего пользователя
cp --no-preserve=all mydomain.pfx /home/(имя пользователя)/Documents

8. Мы получили сертификат mydomain.pfx, который теперь можем использовать в Windows-окружении.

Для обновления сертификата в ручном режиме:
./letsencrypt-auto certonly --renew-by-default -a manual

Важно знать, что сертификаты Let's Encrypt валидны 90 дней. Рекомендуется обновлять их каждые 60 дней. На электронную почту, которую вы указали для генерации, будут приходить уведомления об истечении сертификата.

Процесс в данной статье описан на примере систем Linux CentOS, Ubuntu (Debian) и Windows. Настройка выполняется в несколько шагов.

Проверка домена

Настройка веб-сервера

Данный способ немного сложнее для Linux (для Windows все настройки делает утилита автоматически), но позволяет без проблем настроить автоматическое продление.

Linux NGINX

Пример простого конфигурационного файла для NGINX:

Если сервер уже используется для сайта, в секцию server добавляем:

/.well-known root /usr/share/nginx/html;
allow all;
>

* данными строчками мы говорим, что для всех запросов после /.well-known необходимо отдавать скрипты из каталога /usr/share/nginx/html; allow all предоставляет доступ всем.

При необходимости выполнять проверку и использовать rewrite/return, добавляем что-то подобное:

/.well-known root /usr/share/nginx/html;
allow all;
>
if ($uri !

После проверяем конфигурацию и перезапускаем nginx:

service nginx reload

Linux Apache

Создаем общий конфигурационный файл, в котором пропишем алиас.

б) для Ubuntu / Debian:

Со следующим содержимым:

Alias /.well-known/acme-challenge/ /var/www/html/.well-known/acme-challenge/

* в данном примере, запросы для страниц /.well-known/acme-challenge всех сайтов мы переводим в каталог /var/www/html/.well-known/acme-challenge.

Проверяем корректность конфигурационного файла:

И перезапускаем apache:

Windows

Выбираем сайт в консоли IIS

В меню справа кликаем по Привязки:

Переходим к настройкам привязок сайта

Изменяем привязку для имеющийся записи и, при необходимости, добавляем еще:

Настраиваем привязки сайта

Применяем настройки и закрываем консоль управления IIS.

С помощью записи в DNS

Данный метод проще, описанного выше, но он позволит настроить автоматическое продление сертификата только для некоторых DNS, для которых есть отдельные certbot-плагины. Поэтому данный способ, в большинстве случаев, будет удобен для проведения тестов.

У нас должна быть возможность управления записями в DNS. На данном этапе достаточно просто зайти в панель управления DNS и перейти к этапу получения сертификата (ниже по тексту). Если домен новый и был только-что делегирован на DNS, возможно, придется подождать, пока он не станет доступен для всех серверов DNS в глобальной сети.

Установка утилиты для получения сертификата

Certbot для Linux

а) на CentOS 8:

dnf --enablerepo=PowerTools install certbot

б) на CentOS 7:

yum install certbot

в) на Ubuntu 16.04 и выше, а также Debian:

apt-get install certbot

г) на CentOS 6 или Ubuntu 14.04 / 12.04:

Создадим каталог, в котором будет храниться утилита и переходим в него:

Загружаем утилиту и разрешаем ее запуск:

chmod a+x ./letsencrypt-auto

Для удобства, делаем симлинк:

ln -s /opt/certbot/letsencrypt-auto /usr/local/sbin/certbot

При первом запуске certbot он автоматически предложит доустановить необходимые зависимости — соглашаемся.

LetsEncrypt-Win-Simple для Windows

На сайте GitHub скачиваем win-acme pluggable для нужной разрядности операционной системы:

Скачиваем win-acme pluggable для Windows x32 или x64

Раcпаковываем скачанный архив в любую папку.

Первое получение сертификата

Linux

1. Если мы подтверждаем право на домен при помощи веб-сервера, выполняем команду с таким синтаксисом:

certbot certonly --webroot --agree-tos --email <почта администратора домена> --webroot-path <путь до каталога с файлами проверки> -d <домен 1> -d <домен 2> -d .

  • certonly — запрос нового сертификата;
  • webroot — проверка будет выполняться на основе запроса к корню сайта;
  • agree-tos — даем согласие на лицензионное соглашение;
  • email — почтовый адрес администратора домена;
  • webroot-path — каталог в системе Linux, который является корневым для сайта;
  • d — перечисление доменов, для которых запрашиваем сертификат.

а) Пример запроса при использовании веб-сервера NGINX:

б) Пример запроса при использовании веб-сервера Apache:

2. При подтверждении права на домен с TXT-записью:

  • certonly — запрос нового сертификата;
  • manual — проверка домена вручную.
  • preferred-challenges — указывает метод проверки домена.
  • agree-tos — даем согласие на лицензионное соглашение;
  • email — почтовый адрес администратора домена;
  • d — перечисление доменов, для которых запрашиваем сертификат.

На запрос подтверждения отвечаем Y — система выдаст что-то на подобие:

Once this is deployed,

Создаем соответствующую запись в панели управления DNS, и в консоли сервера нажимаем Enter для продолжения. Если, как в данном примере, мы запрашиваем сертификат для нескольких узлов, повторяем действия.

Windows

Открываем командную строку от администратора и переходим в распакованный каталог. Например, если архив распакован на диск C, выполняем:

* где 2.1.6.773.x64 — моя версия утилиты.

Откроется меню с выбором действия — вводим N, чтобы создать новый сертификат:

Начальная меню win-acme

Выбираем сайт в IIS, который отвечает на запросы нашего домена (в нашем случае, это единственный Default Web Site, то есть 1):

Выбираем сайт для которого хотим получить сертификат

Если для сайта создано несколько привязок, выбираем 3, чтобы создать сертификаты для всех:

Выбираем все привязки

Вводим email адрес и подтверждаем корректность данных:

Вводим почтовый адрес для уведомлений

Утилита создаст необходимый каталог для проверки домена, запросит проверку, получит сертификат, добавит привязку к сайту по 443 порту с добавлением полученного сертификата и создаст в планировщике задание на автоматическое продление сертификата.

Автоматическое продление

Linux

Смотрим полный путь до скрипта certbot:

Открываем на редактирование cron и добавляем следующее:

а) для Ubuntu / Debian:

0 0 * * 1,4 /usr/bin/certbot renew

0 0 * * 1,4 /bin/certbot renew

* в данном примере проверка и продление сертификата будет выполняться по понедельникам и четвергам (1,4) в 00:00. /usr/bin/certbot или /bin/certbot — путь, который мне выдала команда which certbot.

Команда certbot renew проверяет для всех наших сертификатов срок окончания, и если осталось менее 30 дней, запрашивает новый, сохраняет его в каталоге /etc/letsencrypt/archive/<домен> и обновляет симлинк.

Стоит иметь ввиду, что многие приложения, использующие сертификат, потребуют перезапуска, чтобы перечитать его. Поэтому хорошей идеей будет не просто обновлять сертификат, но и перезапускать сервис, который использует сертификат. Например, для NGINX:

0 0 * * 1,4 /bin/certbot renew && systemctl reload nginx

Windows

Настройка задания на автоматическое продление создается при получении сертификата. Проверить задание можно в планировщике заданий Windows:

Задание в планировщике Windows для автоматического продления сертификата

Wildcard

Certbot

Необходимо, чтобы версия утилиты certbot была 0.22.0 и выше. Проверить текущую версию можно командой:

. если версия ниже, обновляем ее командами:

а) для CentOS / Red Hat:

yum update certbot

б) для Ubuntu / Debian:

apt-get install --only-upgrade certbot

Процесс получения

Процесс очень похож на процесс получения сертификата с подтверждением домена в DNS.

. система попросит создать TXT-запись в DNS, который обслуживает наш домен:

Заходим в панель управления DNS и создаем нужную запись. Если у нас свой сервер DNS, например, bind, то строка будет такой:

; TXT
_acme-challenge IN TXT DN8ovKFJ0leLQV9ofZ81mYKxojwIaed5g6f0bXZCYiI

Не торопимся нажимать Enter — после настройки DNS нужно немного времени (пару минут), чтобы настройка применилась. Проверить появление записи можно командой с рабочего компьютера:

Как только видим, что настройки применились, нажимаем Enter — если это наш первый запрос Wildcard для данного домена, то система нас попросит создать еще одну запись — повторяем процедуру, создав в DNS вторую запись TXT.

Если все сделали правильно, то увидим:

Возможные ошибки

Рассмотрим некоторые ошибки, с которыми мы можем столкнуться.

Missing command line flag or config entry for this setting

Ошибка появляется при попытке обновить сертификат для одного или нескольких доменов.

Причина: при обновлении сертификата, утилита certbot ищет настройки в конфигурационном файле /etc/letsencrypt/renewal/<имя домена>.conf. Если в данном файле не будет определена конфигурация для webroot_map, мы получим данную ошибку.

Решение:

Открываем конфигурационный файл для домена, например:

Находим опцию webroot_map (как правило, в самом низу). Либо она будет пустой, либо указывать на неправильный путь. Исправляем это:

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

Пробуем обновить сертификат.

ACMEv1 is deprecated and you can no longer get certificates from this endpoint

Ошибка появляется при попытке запросить или обновить сертификат. Полный текст ошибки:

Причина: утилита на компьютере устарела. Она пытается использовать API-портал ACMEv1, который больше не поддерживается.

Куда и зачем мне нужен был SSL сертификат

Начнём с того, что SSL (Secure Sockets Layer) сертификат защищает данные пользователей, которые передаются по сети. Для интеграции с одним из известных маркетплейсов мне нужно было использовать web-сервис 1С и на тестовом Windows Server, на котором был развёрнут тестовый сервер 1С, был поднят IIS (internet Information Services). Веб сервер Windows.

  • Установка Windows Server
  • Установка Ролей ISS и DNS
  • Установка Сервера 1С
  • Подключение модуля расширения веб-сервера
  • Скачиваем программу LetsEncrypt для Windows
  • Настраиваем DNS
  • Настраиваем шлюз (в моём случае это был Kerio Control)
  • Выпускаем SSL сертификат LetsEncrypt
  • Проверяем привязку в Диспетчере служб IIS
  • Проверяем планировщик заданий на наличие таска для перевыпуска сертификата

Установку Windows Server и сервера 1С я тут рассматривать не буду, так как. Во-первых Windows Server установка мало чем отличается от установки обычной десктопной винды, а по 1С можно почитать эту статью. Во-вторых я хочу рассказать именно про то как установить SSL сертификат от Let's Encrypt на Windows Server IIS. Начнём!

Установка SSL сертификата на IIS

Скачиваем программу LetsEncrypt-Win-Simple

Сайт загрузки win-acme

Скачиваем и распаковываем архив в директорию на жёстком диске. Для выпуска сертификата нам нужно будет запустить из каталога файл wacs.exe. Но это чуть позже.

запускаем из каталога файл wacs.exe

Если мы сейчас попытаемся выпустить сертификат, то получим предупреждение

Добавим веб-сайт в Диспетчере служб IIS

Запускаем Диспетчере служб IIS через панель управления - администрирование. Или через WIN + R

Диспетчер служб IIS

Добавляем записи в Диспетчере DNS

Выбираем сервер, правой кнопкой по каталогу сайтов и нажимаем Добавить веб-сайт. Указываем каталог для нового сайта. Дальше нам нужно создать псевдоним CNAME в зоне прямого просмотра (forward lookup zones).

Диспетчер DNS. Создание псевдонима CNAME

Так как домен у меня находится у хостинг провайдера, то я на всякий случай указал в Диспетчере DNS его NS сервера. В свою очередь у хостинг провайдера прописываем A запись с нашим выделенным IP адресом. Позже мы настроим правило для того чтобы входящее соединение перебрасывало на нужный сервер.

Диспетчер DNS. Прописываем NS сервера

Выпуск SSL сертификата Let's Encrypt

И так. У нас есть 1С сервер с расширением веб-сервера, добавили DNS и CNAME записи, указали A запись. Теперь запускаем WACS.EXE и вводим букву N для инициирования выпуска сертификата. Далее выбираем на какой домен будем выпускать сертификат, даём пару соглашений (y) и вводим email адрес, куда нам будут приходить уведомления в случае каких-либо проблем (Enter email for notifications about problems and abuse).

Wacs.exe

Вводим email адрес для получения уведомлений в случае возникновения проблем с сертификатом

Wacs.exe - завершение установки SSL сертификата для IIS

Завершение выпуска SSL сертификата Let's Encrypt для IIS

В принципе всё готово. По части сертификата. Программа автоматически добавляет привязку 443 SSL порта к сайту в Диспетчере служб IIS и в Планировщике заданий таск на автоматический перевыпуск сертификата, но можно в этом убедиться самостоятельно

Диспетчер служб IIS просмотр установленной привязки к 443 порту нашего SSL сертификата Let s Encrypt

Диспетчер служб IIS просмотр установленной привязки к 443 порту нашего SSL сертификата Let s Encrypt

Настройка шлюза (роутера)

Читайте также: