Создание ключей и сертификатов
Материал из Wiki Open Book.
| Внимание! | Это не законченная статья, а только наброски. Т.е. очень сырой материал. |
Тут будет рассмотрено как создавать свой собственный центр сертификации и самоподписанные сертификаты.
Содержание |
[править] Подготовительные действия
Найдите, где в вашем дистрибутиве располагается файл openssl.cnf. Обычно это директория /etc/ssl, /etc/pki/tls или /usr/share/ssl. Перейдите в нее.
Для облегчения дальнейшей работы с программой, добавьте в конфигурационный файл следующие строки:
[ server ] basicConstraints=CA:FALSE nsCertType = server nsComment = "OpenSSL Generated Server Certificate" subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer:always [ client ] basicConstraints=CA:FALSE nsCertType = client nsComment = "OpenSSL Generated Server Certificate" subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer:always
Первая секция описывает генерацию ключей для серверов, вторая для клиентов. Можно добавить отдельные секции для каждого типа сертификатов, которые вы собираетесь выписывать.
Поменяйте значение следующих переменных:
[ CA_default ]
dir = ./ # Рабочий каталог для базы данных
# клиентских ключей
certs = $dir/certs # Тут будут храниться выданные ключи
# и сертификаты
crl_dir = $dir # Where the issued crl are kept
database = $dir/index.txt # Индекс базы данных выписанных ключей
new_certs_dir = $dir # Директория по умолчанию для сертификатов
certificate = $dir/CA/ca.crt # Корневой сертификат
serial = $dir/serial # Номер текущий серийный номер
crl = $dir/crl.pem # The current CRL
private_key = $dir/CA/ca.key # Закрытый ключ
RANDFILE = $dir/CA/.rand # private random number file
Создайте дополнительные файлы.
# touch index.txt # echo 01 > serial
Если нет директории CA, её тоже необходимо создать.
[править] Корневой сертификат
# openssl req -days 3650 -nodes -new -x509 \ -keyout CA/ca.key -out CA/ca.crt -config ./openssl.cnf Generating a 1024 bit RSA private key .......................++++++ ..........................++++++ writing new private key to 'CA/ca.key' ----- 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) [RU]: State or Province Name (full name) [Moscow]: Locality Name (eg, city) [Moscow]: Organization Name (eg, company) [kryukov.biz Home Limited]: Organizational Unit Name (eg, section) [main server]: Common Name (eg, your name or your server's hostname) []:kryukov.biz artur@kryukov.biz []: #
Обязательно поменяйте права доступа к файлу ключа! Это очень секретная информация.
# chmod 0600 CA/ca.key #
Файл сертиифката ca.crt желательно скопировать на все машины-клиенты, которые будут пользоваться сгенерированными вами сертификатами. И добавить его в список CA серверов сертификации.
[править] Создание ключа и сертификата
Сначала сгенерируем запрос на подпись в центр сертификации. Обратите внимание на параметр -extensions server, он говорит, что будет использоваться секция server конфигурационного файла. Если вы хотите создать ключи для клиента, используйте параметр -extensions client (конечно, если такая секция присутствует в конфигурационном файле).
# openssl req -days 3650 -nodes -new -keyout certs/kryukov.biz.key \ -out certs/kryukov.biz.csr -extensions server -config ./openssl.cnf Generating a 1024 bit RSA private key ..++++++ ............++++++ writing new private key to 'certs/kryukov.biz.key' ----- 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) [RU]: State or Province Name (full name) [Moscow]: Locality Name (eg, city) [Moscow]: Organization Name (eg, company) [kryukov.biz Home Limited]: Organizational Unit Name (eg, section) [main server]: Common Name (eg, your name or your server's hostname) []:kryukov.biz artur@kryukov.biz []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:password An optional company name []: #
Теперь сами подпишем сертификат:
# openssl ca -days 3650 -out certs/kryukov.biz.crt -in certs/kryukov.biz.csr \
-extensions server -config ./openssl.cnf
Using configuration from ./openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Jan 20 12:39:44 2006 GMT
Not After : Jan 18 12:39:44 2016 GMT
Subject:
countryName = RU
stateOrProvinceName = Moscow
organizationName = kryukov.biz Home Limited
organizationalUnitName = main server
commonName = kryukov.biz
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Cert Type:
SSL Server
Netscape Comment:
OpenSSL Generated Server Certificate
X509v3 Subject Key Identifier:
39:16:CC:47:99:F4:47:7B:B9:3D:FC:3F:FF:B4:4C:3B:62:15:26:2D
X509v3 Authority Key Identifier:
keyid:9A:1B:09:62:98:E5:FB:EA:6F:10:61:53:4E:6D:66:67:93:B5:A5:DF
DirName:/C=RU/ST=Moscow/L=Moscow/O=kryukov.biz Home Limited/OU=main server/CN=kryukov.biz
serial:00
Certificate is to be certified until Jan 18 12:39:44 2016 GMT (3650 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
#
Закроем доступ к файлу ключа:
# chmod 0600 certs/kryukov.biz.key #
Всё готово к конфигурации openvpn, sendmail и т.д.
[править] Некоторые парамеры openssl
- -req — запрос на создание нового сертификата.
- -new — создание запроса на сертификат.
- -newkey rsa:1024 — длина RSA-ключа сертификата.
- -x509 — создание самоподписанного сертификата, а не CSR.
- -days 3650 — срок действия сертификата. Значение должно быть больше срока действия создоваемого сертификата сервера и клиентов.
- -nodes — флаг, указывающий не шифровать ключ.
- -out ca.crt — сертификат.
- -keyout ca.key — закрытый ключ сертификата.
- -subj — данные сертификата:
- C — код страны.
- ST — название республики, региона, округа.
- L — название города/деревни.
- O — название организации.
- OU — отдел организации.
- CN — имя для сервера — Server Name, для клиентов — что угодно.
- emailAddress — почтовый адрес администратора сервера.

