Как подписать csr сертификат windows

Обновлено: 04.07.2024

Сгенерировать запрос подписи сертификата (CSR) для существующего закрытого ключа

Создать запрос на подпись сертификата на основе существующего сертификата

openssl x509 -x509toreq -in adgrafics.crt -out adgrafics.csr -signkey adgrafics.key

Снятие пароль passphrase в private key

Проверка запрос CSR для подписи сертификата

Проверка закрытого ключа

Для того что бы сгенерировать запрос сертификата для нескольких доменов нужно отредактировать файл /etc/ssl/openssl.cnf:

  • Раскомментировать строку: req_extensions=v3_req
  • найти секцию [ v3_req ] - вот такие строки:
    basicConstraints=CA:FALSE
    keyUsage=nonRepudiation, digitalSignature, keyEncipherment

Массив alt_names будет содержать альтернативные имена доменов SAN включеные в сертификат.

Пример скриншотов создания Приватного ключа и запроса на сертификат при помощи OpenSSL

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

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

В этом примере мы сказали программе предоставить файлу закрытого ключа имя файла myprivkey.pem , файл CSR имя mynewcert.req и использовать файл конфигурации с именем openssl.cnf .

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

Есть 7 частей информации, которые программа попросит вас предоставить.

Вам нужно будет записать всю информацию, которую вы вводите, так как вам будут предложены эти элементы во время процесса покупки сертификата.

Это официальное «имя», которое будет связано с сертификатом. У вас есть несколько вариантов, в зависимости от как вы хотите использовать сертификат.

NO russia - мы не осблуживаем резидентов из россии

Copyright © 1997-2021 adgrafics

Для организации такого общения нам нужно 2 SSL сертификата.

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

Создаем наше CA

Первая команда создаёт корневой ключ


Для меня ключ 2048 bit достаточен, если вам хочется, вы можете использовать ключ 4096 bit.

Вторая команда создаёт корневой сертификат.


Отвечать на вопросы тут можно как душе угодно.


10000 дней срок его годности, примерно столько живет сертификат, которым google требует подписывать андроид приложения для Google Play. Если вы паникер, подписывайте на год или два.

Все! Теперь мы можем создавать сертификаты для наших серверов и устанавливать корневой сертификат на наши клиентские машины.

Создаем сертификат подписаный нашим СА


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


Тут важно указать имя сервера: домен или IP (например домен server101.mycloud)


и подписать запрос на сертификат нашим корневым сертификатом.


Теперь на клиенты нужно установить корневой сертификат rootCA.crt

rootCA.crt — можно давать друзьям, устанавливать, копировать не сервера, выкладывать в публичный доступ
rootCA.key — следует держать в тайне

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

Windows

IE, Chrome — используют репозиторий сертификатов Windows.

Мой путь к нему таков:

Chrome — Settings — Manage Certificates…
Выбрать таб Trusted Root Certificate Authorities — Import — rootCA.crt
перезапустить Chrome

FireFox на виндоус имеет свой репозиторий.

Java имеет свой репозиторий.

Mac OS X

Safari, FireFox, Chrome — используют системный репозиторий.

Запускаем KeyChain Access.
Идём в меню File — Import Items (login или System) — выбираем файл rootCA.crt.
Когда нас спросят, отвечаем — Always Trust.


Для вашего личного Safari достаточно выбрать login.



В Ubuntu
Программа сервера на Go

Программа сервера на Go myserver.go, которая использует наш подписаный сертификат.

Удостоверяющий центр (по-английски Certification authority, сокращённо CA) — это единый центр генерации цифровых сертификатов. У конечных клиентов (например, веб-браузеров) имеется база публичных ключей разных CA и они проверяют ими приходящие, например, от сайтов сертификаты. Нас интересуют сертификаты, используемые в сеансах, защищённых протоколом SSL/TLS.

Собственно, всю процедуру можно разбить на такие шаги:

  1. генерим приватный ключ (сильно случайный набор байтов);
  2. генерим на основе приватного ключа пару сертификатов для CA (публичный и приватный);
  3. генерим пару сертификатов для домена, подписанных созданным на прошлом шаге CA.

Для начала сгенерим приватный ключ (файл ca.key), если хотите зашифровать приватный ключ с паролем, добавьте аргумент -des3 :

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

Вводим пароль к ключу (если ключ был зашифрован) и затем аккуратно заполняем поля субъекта (subject). По этим данным можно будет потом идентифицировать публичный сертификат среди списка других, например. На выходе получаем файл ca.crt — это публичный сертификат нашего CA.

Можно создать ключ и сертификат одной командой, причём в эту же команду можно включить параметры субъекта:

К сожалению, эта команда генерит невалидный ключ. Openssl и основанные на этой библиотеке приложения его понимает корректно, однако другие программы могут его не принять. Решается это такой командой (мы просто считываем и снова записываем файл):

Содержимое параметра -subj состоит из сегментов вида /$KEY=$VALUE , где $KEY может принимать такие значения:

  • L — locality, обычно это город
  • ST — state, обычно это регион, область, район и т.д.
  • C — country, двухбуквенный код страны, например, RU или US
  • O — organization, название организации
  • OU — organization unit, отдел в организации
  • CN — common name, обычно это адрес веб-сайта
  • emailAddress — email

Итак, генерим ключ (можете добавить -des3 , чтобы зашифровать ключ паролем):

Приватный ключ хранится на стороне владельца сервера и не должен никогда никому отдаваться. На базе приватного ключа server.key генерится так называемый запрос на подпись сертификата (по-английски certificate signing request (csr)), в запросе заполняются параметры субъекта (имя, адрес, домены итп), затем этот файл отправляется CA и тот создаёт сертификат на основе данных из CSR, подписывает его своим приватным ключом, в результате получаем подписанный публичный сертификат.

Вот простейший способ создать csr:

В процессе работы нужно ответить на несколько вопросов (страна, город, имя домена итп), в результате получится csr-файл, который можно отправлять CA. Однако у такого способа есть несколько существенных недостатков — запрос данных идёт по заранее заданному шаблону, в который не входят некоторые важные поля, например, subjectAltName (это расширение для включения нескольких DNS-имён в сертификат).

Единственный мне известный способ указать расширение subjectAltName — это воспользоваться собственным конфигом для openssl. Вот, например, таким:

Сохраните его в файл openssl-csr.cnf и отредактируйте (нужно прописать в поле subjectAltName свои домены, если вы в конфиге openssl разбираетесь, то можно и другие опции изменить/добавить), после чего выполните вот такую команду:

В данном случае «срок годности» сертификата устанавливаем в один год (365 дней).

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

Запросы на подпись сертификатов (CSR)

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

Чтобы сгенерировать запрос на подпись сертификата, нужно предоставить данные о сертификате. В частности важно правильно заполнить поле Common Name (CN) в разделе Distinguised Name, в котором нужно указать FQDN хоста, для которого предназначается сертификат. Чтобы обойти интерактивные подсказки, можно передать все запрашиваемые данные через командную строку.

Другие поля в разделе Distinguised Name запрашивают данные об организации или компании. Если вы заказываете сертификат в ЦС, эти поля, как правило, нужно обязательно заполнить.

Запрос на подпись сертификата имеет такой вид:

Чтобы ответить на запросы CSR в неинтерактивном режиме, добавьте в команду опцию –subj, например:

-subj "/C=US/ST=New York/L=Brooklyn/O=Example Brooklyn Company/CN=examplebrooklyn.com"

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

Генерирование запроса на подпись сертификата

Генерирование закрытого ключа и запроса

openssl req \
-newkey rsa:2048 -nodes -keyout domain.key \
-out domain.csr

Заполните поля в запросе на подпись.

Генерирование запроса для существующего закрытого ключа

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

Следующая команда создаст запрос сертификата (domain.csr) для существующего ключа (domain.key):

openssl req \
-key domain.key \
-new -out domain.csr

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

Генерирование запроса для существующего сертификата и ключа

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

Следующая команда создаст запрос (domain.csr) на основе существующего сертификата (domain.crt) и закрытого ключа (domain.key):

openssl x509 \
-in domain.crt \
-signkey domain.key \
-x509toreq -out domain.csr

Опция -x509toreq создаст сертификат X509.

Генерирование SSL-сертификата

Если вы хотите защитить свой сервис, но не хотите подписывать его в ЦС, вы можете создать и подписать сертификат самостоятельно.

Такие сертификаты называются самоподписанными.

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

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

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

openssl req \
-newkey rsa:2048 -nodes -keyout domain.key \
-x509 -days 365 -out domain.crt

Заполните запрос на подпись.

Опция -x509 создаёт самоподписанный сертификат. Опция -days 365 задаёт срок действия сертификата в днях.

Создание сертификата для существующего закрытого ключа

Если у вас уже есть закрытый ключ, но нет сертификата, вы можете сгенерировать сертификат для этого ключа.

Следующая команда создаст сертификат (domain.csr) для существующего ключа (domain.key):

openssl req \
-key domain.key \
-new \
-x509 -days 365 -out domain.crt

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

  • Опция -x509 создаёт самоподписанный сертификат. Опция -days 365 задаёт срок действия сертификата в днях.
  • Опция –new запускает запрос данных для создания CSR.

Генерирование запроса для существующего сертификата и ключа

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

Следующая команда создаст сертификат (domain.crt) на основе существующего запроса (domain.csr) и закрытого ключа (domain.key):

openssl x509 \
-signkey domain.key \
-in domain.csr \
-req -days 365 -out domain.crt

Опция -days 365 задаёт срок действия сертификата в днях.

Просмотр сертификатов

Файлы сертификатов и запросов на подпись закодированы в формате PEM, который не может быть прочитан человеком.

Данный раздел научит вас читать такие файлы с помощью ряда команд.

Просмотр CSR

Эта команда позволяет просмотреть содержимое файла запроса на подпись сертификата в виде простого текста:

openssl req -text -noout -verify -in domain.csr

Просмотр сертификата

Следующая команда позволяет просмотреть содержимое сертификата в виде простого текста:

openssl x509 -text -noout -in domain.crt

Проверка подписи сертификата

Чтобы убедиться, что сертификат был подписан в ЦС, введите:

openssl verify -verbose -CAFile ca.crt domain.crt

Закрытые ключи

Создание закрытого ключа

openssl genrsa -des3 -out domain.key 2048

По запросу введите пароль, чтобы продолжить.

Проверка закрытого ключа

Эта команда подтвердит валидность закрытого ключа:

openssl rsa -check -in domain.key

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

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

Эта команда позволяет узнать, относится ли закрытый ключ (domain.key) к тому или иному сертификату (domain.crt) и запросу (domain.csr):

openssl rsa -noout -modulus -in domain.key | openssl md5
openssl x509 -noout -modulus -in domain.crt | openssl md5
openssl req -noout -modulus -in domain.csr | openssl md5

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

Шифрование закрытого ключа

Следующая команда возьмёт незашифрованный ключ (unencrypted.key) и зашифрует его (encrypted.key):

openssl rsa -des3 \
-in unencrypted.key \
-out encrypted.key

Введите пароль, чтобы зашифровать ключ.

Дешифровка закрытого ключа

Эта команда может расшифровать зашифрованный ключ:

openssl rsa \
-in encrypted.key \
-out decrypted.key
Enter the pass phrase for the encrypted

Введите пароль, чтобы расшифровать ключ.

Форматы сертификатов

До этого в руководстве рассматривались только сертификаты X.509 с кодированием ASCII PEM. Однако существует множество других форматов. Некоторые форматы позволяют объединить компоненты – ключ, запрос, сертификат – в один файл.

Конвертация PEM в DER

Чтобы конвертировать PEM в DER, используйте такую команду:

openssl x509 \
-in domain.crt \
-outform der -out domain.der

Формат DER обычно использует Java.

Конвертация DER в PEM

Для этого введите:

openssl x509 \
-inform der -in domain.der \
-out domain.crt

Конвертация PEM в PKCS7

Чтобы добавить сертификаты PEM (domain.crt и ca-chain.crt) в файл PKCS7 (domain.p7b), введите:

openssl crl2pkcs7 -nocrl \
-certfile domain.crt \
-certfile ca-chain.crt \
-out domain.p7b

Файлы PKCS7 (также известные как P7B) часто используются в Java Keystores и Microsoft IIS (Windows).

Конвертация to PKCS7 в PEM

Чтобы конвертировать PKCS7 в PEM, введите:

openssl pkcs7 \
-in domain.p7b \
-print_certs -out domain.crt

Обратите внимание: файл PKCS7 содержит много компонентов, а именно сертификат и промежуточный сертификат ЦС.

Конвертация PEM в PKCS12

Следующая команда позволяет объединить закрытый ключ и сертификат в файл PKCS12.

openssl pkcs12 \
-inkey domain.key \
-in domain.crt \
-export -out domain.pfx

Программа запросит пароль. Файл PKCS12 позволяет объединить несколько сертификатов в один PEM-файл (domain.crt).

Файлы PKCS12 (или PFX) обычно используются для перемещения наборов сертификатов в Micrsoft IIS (Windows).

Конвертация PKCS12 в PEM

Чтобы конвертировать файл PKCS12 в формат PEM, введите:

Если в файле PKCS12 было несколько объектов (например, ключ и сертификат), все они переместятся в файл PEM.

Версии OpenSSL

Чтобы проверить версию OpenSSL, используйте команду openssl version.

Следующая команда выведет версию OpenSSL и все параметры, с которыми она была скомпилирована.

openssl version -a

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

OpenSSL 1.0.1f 6 Jan 2014
built on: Mon Apr 7 21:22:23 UTC 2014
platform: debian-amd64
options: bn(64,64) rc4(16x,int) des(idx,cisc,16,int) blowfish(idx)
compiler: cc -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DL_ENDIAN -DTERMIO -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wa,--noexecstack -Wall -DMD32_REG_T=int -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM
OPENSSLDIR: "/usr/lib/ssl"

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