- Скачаем и установим OpenSSL.
- Настроим рабочее место.
- Выпустим CA сертификат и для него список отозванных сертификатов CRL.
- Сделаем запрос на сертификат нашему центру сертификации.
- Выпустим сертификат по запросу.
- Добавим наши сертификаты в хранилища сертификатов.
1. Скачиваем с сайта последнюю версию OpenSSL, и устанавливаем ее на жесткий диск.
2. Для удобства, добавьте в переменную PATH полный путь к bin директории OpenSSL. Далее, для того чтобы созданные ключи, запросы на сертификат, сертификаты и прочее не были перемешаны в общей куче, я рекомендую создать для себя рабочий каталог mySSL, со следующими подкаталогами:
В нашем случае, C:\mySSL\ является рабочим каталогом, содержащим следующие подкаталоги и файлы:
- key - каталог с private-ключами
- csr - каталог запросов на сертификат (Certificate Signing Request)
- cer - каталог сертификатов, для публичного пользования (Certificate)
- crl - каталог списков отозванных сертификатов (Certificate Revocation List)
- p12 - каталог сертификатов p12, с private-ключом(Personal Information Exchange File)
- database.txt - база данных выпущенных сертификатов
- serial.txt - файл с текущим серийным номером сертификата
3. Выпустим собственный CA сертификат, для этого, получим private-ключ для нашего CA сертификата. Это можно сделать выполнив команду: #openssl genrsa -des3 -out key/ca.key 1024 #openssl req -config openssl.conf -new -x509 -days 365 -key key/ca.key -out cer/ca.cer -subj "/C=RU/ST=Russia/L=Moscow/O=MyCompany/OU=CA/CN=localhost" #openssl ca -config openssl.conf -gencrl -out crl/ca.crl #openssl pkcs12 -export -in cer/ca.cer -inkey key/ca.key -out p12/ca.p12
4. Наш CA сертификат готов, теперь мы можем приступить к выпуску дочернего SSL сертификата, для этого сделаем запрос на SSL сертификат: #openssl.exe req -config openssl.conf -new -newkey rsa:1024 -keyout key/test.key -nodes -out csr/test.csr -subj "/C=RU/ST=Russia/L=Moscow/O=MyCompany/OU=IT Departament/CN=localhost"
5. Подтвердим запрос на сертификат нашим CA сертификатом (подпишим серификат нашим CA сертификатом): #openssl ca -policy policy_any -config openssl.conf -in csr/test.csr -days 360 -out cer/test.cer #openssl pkcs12 -export -out p12/test.p12 -in cer/test.cer -inkey key/test.key
6. Для того чтобы добавить наши сертификаты (PKCS12) в хранилище сертификатов надо в консоли управления оснастками(команда mmc) добавить оснастку "Сертификаты" для локальной машины, после чего, импортировать наши сертификаты и список отозванных сертификатов в соответствующие папки (в папку "Личные" и "Доверенные корневые центры сертификации").
Для быстрого развертывания можно скачать итоговый bat-скрипт. Данный скрипт создает структуру каталогов, конфигурационный файл openssl.conf и запускает процесс создания сертификатов.
PS: Берегите файлы с приватными ключами (*.key) и файлы PKCS12 (*.p12), по возможности храните данные файлы на специальных носителях. Доступ к данным файлам должен быть сильно ограничен!
Файлы сертификатов (*.cer) и список отозванных сертификатов (*.crl) созданы специально для публичного доступа, в том числе и для размещения в интернете.
Список отозванных сертификатов (*.crl) должен обновляться как можно чаще.
UPD: После того как необходимость в тестовом CA сертификате пройдет, не забудьте удалить его из списка доверенных сертификатов.
Описал 6 простых шагов для создания тестовых SSL сертификатов для отладки своих приложений. Может кому и пригодиться.
ОтветитьУдалитьСпасибо, очень понятно и внятно!
ОтветитьУдалитьА как создать контейнер формата PKCS12 так, чтобы в нем хранились 3 сертификата? т.е. чтобы был 1 файл, который при установке устанавливал бы 3 сертификата сразу?
ОтветитьУдалитьhttp://stackoverflow.com/questions/4048626/creating-pkcs12-keystore-with-multiple-certificates-using-openssl-1-0-0a
ОтветитьУдалитьСпасибо, очень помогли.
ОтветитьУдалитьУ меня такая проблема:
Я уже умею создать самоподписанный сертификат, и создать сертифика для клиентов, и работать с CRL.
Скажите мне, пожалуйста, что мне делать с crl-файлом? Его надо опубликовать? Когда считается сертификат потерянным тогда сертификат считается отозванным, и добавиться в CRL. Еще в каких случаев нужно добавить сертификатов в CRL?
Забыл сказать спасибо Вам большое за информацию!
ОтветитьУдалить@Телба
ОтветитьУдалитьCRL файл должен быть опубликован. Например от может находиться рядом с публичным сертификатом. CRL файл должен всегда поддерживаться в актуальном состоянии. А вообще самоподписанные сертификаты можно использовать только в тестовой(!) среде, а на боевой системе необходимо уже использовать сертификаты от авторизованных центров, которые и отвечают за актуальность CRL.
В CRL надо добавлять сертификаты, у которых private-ключи перестали быть private (стали доступны злоумышленнику), либо лицо (на которое был выдан сертификат) утратило доверие.
Здравствуйте, Иьля. Как Ваши дела?
ОтветитьУдалитьУ меня появилось проблема, и вот уже целый день сижу перед компьютером, ищу ответы:
Команда вот это:
openssl ca -passin pass:password -policy policy_anything -out "certificate.crt" -infiles "request.csr"
Using configuration from C:\OpenSSL-Win32\bin\openssl.cfg
Loading 'screen' into random state - done
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Jan 19 08:05:25 2011 GMT
Not After : Jan 19 08:05:25 2012 GMT
Subject:
countryName = UZ
commonName = Olim
emailAddress = somebody@gmail.com
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
7E:18:DE:4D:8E:B6:45:B1:47:AD:6E:A8:BA:8D:43:12:FA:B3:BE:65
X509v3 Authority Key Identifier:
keyid:AA:81:82:D7:DE:2C:2F:69:31:3B:39:9B:F0:88:05:66:99:65:33:E
2
Certificate is to be certified until Jan 19 08:05:25 2012 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Есть ли способ автоматически отвечать y на вопросы: Sign the certificate? [y/n]: и 1 out of 1 certificate requests certified, commit?
Спасибо Вам за ответ...
@Телба
ОтветитьУдалитьТочный ответ не знаю так как не делал подобного.
Наверняка проблема решается добавлением дополнительно параметра. Также можно погуглить openssl silent/quiet mode.
PS: Как найдете решение, если не сложно дайте линк в комментах.
Привет! Пока не смог найти, но все же ищу.
ОтветитьУдалитьПопробуйте перенаправить ввод используя standard input (stdin).
ОтветитьУдалитьНапример:
myapp.exe < commands.in, где commands.in текстовый файл, содержащий то, что вы бы вводили с клавиатуры.
Я так сделал как Вы сказали, теперь все в порядке. Вот код: < Response.txt openssl ca -passin pass:password -policy policy_anything -out telba.crt -infiles telba.csr
ОтветитьУдалитьВот теперь у меня такой вопрос: Думаю, ключ и запрос на получение сертификат должны генерироваться в стороне клиента. Удостоверяющий центр не отвечает секретность приватного ключа клиента. Как генерировать приватный ключ в стороне клиента, может им сначала предлагать программу который генерирует приватный ключ и создающий запрос на получение сертификата?
Посмотрите как генерируют сертификаты известные центры, многие так и предлагают воспользоваться openssl. Еще есть программы (с GUI), помогающие пользователю создать CSR, (например http://technet.microsoft.com/en-us/library/cc728326%28WS.10%29.aspx)
ОтветитьУдалитьРешил это проблему давно... я не читал Ваш последный ответ. Клиенты сгенерируют пар ключей и запрос с помошью тега . Но не работает в Internet Explorer. Полученный запрос называется запрос в формате SPKAC. OpenSSL может подписывать на запросы в формате SPKAC. На сервер отправится SPKAC, CN, Country, emailadress and others.
ОтветитьУдалитьНе знал про SPKAC, спасибо за наводку, если возникнет похожая задача, то буду знать куда копать.
ОтветитьУдалитьУ меня тут опять возникли ряд вопросов по вышеуказанному созданию сертификатов :)
ОтветитьУдалить1. для чего прописан в конфиге рандом файл хоть его и нету в директории?
2. при создании дочернего сертификата у меня в директории cer добавился файл 01.pem - для чего он и что с ним делать?
3. при создании ключа для дочернего сертификата пасс не был запрошен, так и должно быть?
4. получается ведь необязательно создавать приват ключи и запрос на самом клиенте, можно ведь все проделать на сервере и передать клиенту файл pkcs12 и пароли)) или не так :)
1. Точно не помню, но его можно найти в корне или в папке с openssl. Это чисто служебный файл, хранит seed для rand, и его иногда называют .rand, для того чтобы он был скрытым в unix.
ОтветитьУдалить2. http://en.wikipedia.org/wiki/X.509 секция про PEM.
3. Можно сделать так, чтобы запрашивал (как бы дополнительная защита ключа), а можно оставить как есть. Просто хранить ключ для CA в открытом виде рискованно.
4. Можно, если клиент доверяет серверу и каналу передачи пароля с ключами.
А как создать контейнер формата PKCS12 так, чтобы в нем хранились 3 клиентских сертификата? т.е. чтобы был 1 файл, который при установке устанавливал бы 3 клиентских сертификата сразу?
ОтветитьУдалитьЯ прочитал, и воспользовался этой ссылкой, но она не помогла в моем случае:
http://stackoverflow.com/questions/4048626/creating-pkcs12-keystore-with-multiple-certificates-using-openssl-1-0-0a
@Nurlan
ОтветитьУдалитьЭтот вопрос здесь уже задавали выше, честно говоря у меня нет на него четкого ответа, ну кроме той ссылки.
Вопрос у меня на сервере для клиентов закончился файлик home.crt по вашей инструкции я не увидел как его сделать ?
ОтветитьУдалитьЗдравствуйте!
ОтветитьУдалитьВроде все сделал, так сказать "по инструкции", но почему-то на этом шаге:
"5. Подтвердим запрос на сертификат нашим CA сертификатом (подпишим серификат нашим CA сертификатом):
#openssl ca -policy policy_any -config openssl.conf -in csr/test.csr -days 360 -out cer/test.cer"
У меня получается ошибка: unable to load number from serial.txt
error while loading serial number
Проблема была решена - добавил номер 100001 в файл serial.txt.
ОтветитьУдалитьЗдравствуйте. У меня проблема с подтверждением дочернего сертификата ..ошибка: 4108:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:.\
ОтветитьУдалитьcrypto\evp\evp_enc.c:539:
4108:error:0906A065:PEM routines:PEM_do_header:bad decrypt:.\crypto\pem\pem_lib.
c:483:
Эм ... Слабо объяснить, как устанавливается OpenSSL для Windows?
ОтветитьУдалитьДобрый день, подскажите, пожалуйста что нужно сделать если я хочу подписать сертификат, скажем, SHA-2? И вопрос по поводу получения private ключа - что если необходим pass phrase в каком месте при генерации его можно задать?
ОтветитьУдалить