OpenSSL — криптографический пакет с открытым исходным кодом для работы сSSL/TLS. Позволяет создавать ключи RSA, DH, DSA и сертификаты X.509, подписывать их, формировать CSR и CRT. Также имеется возможность шифрования данных и тестирования SSL/TLS соединений.
1. /etc/ssl/openssl.cnf
dir = . # Это каталог для работы с SSL certs = $dir. # Это где будут лежать сертификаты crl_dir = $dir # Это где будут листы "отзывов подписей" database = $dir/index.txt # Здесь index file для индексирования запросов на подпись new_certs_dir = $dir # Сюда будут писать новые сертификаты certificate = $dir/cacert.pem # Корневой сертификат serial = $dir/serial # Серийный номер запроса crl = $dir/crl.pem # Текущий лист отзывов подписей private_key = $dir/ca.key # Секретный ключ для основного сертификата RANDFILE = $dir/.rand # default_days = 3650 # Количество дней действия сертификата default_md = md5 # метод шифрования [ req ] # Секция основных опций prompt = no # Брать параметры из конфига, не интерактивный режим. Если не # указывать prompt no, то значения для параметров будут с читаны в # интерактивном режиме(то бишь с клавиатуры), а значения параметров # будут являться подсказками при вводе данных [ req_distinguished_name ] # В данной секции вносим свои данные, # которые будут использоваться по умолчанию # при генерации запроса на подписание сертификата. countryName = Country Name (2 letter code) countryName_default = MY_LANG countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name (full name) stateOrProvinceName_default = Russian localityName = Locality Name (eg, city) localityName_default = MY_CITY 0.organizationName = Organization Name (eg, company) 0.organizationName_default = MY_COMPANY organizationalUnitName = Organizational Unit Name (eg, section) organizationalUnitName_default = ADMIN [ usr_cert ] basicConstraints=CA:FALSE nsCertType = client, email nsComment = "OpenSSL Generated Certificate " [ v3_req ] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment #Для создания мульти ключа нужно добавить subjectAltName = DNS:mail.example.ru, DNS:imap.example.ru, DNS: pop.example.ru [ v3_ca ] subjectKeyIdentifier=hash authorityKeyIdentifier=keyid:always,issuer:always basicConstraints = CA:true nsCertType = sslCA, emailCA
Дополнительные свойства, описанные в скрипте [v3_req] означают, что клиент может использовать сертификат для подписывания и шифрации, но его cертификат не является CA сертификатом. Для CA сертификата значение basicConstraits должно быть равно CA:TRUE (это обязательно!). Поле nsCertType определяет дополнительные назначения данного ключа. Для CA сертификатов обычно применяют следующие значения nsCertType: sslCA, emailCA. Для SSL ключей серверов используется значение nsCertType = server Полученный таким образом сертификат клиента будет содержать информацию о поставщике сертификата Клиенту необходимо еще и перевести сертификаты в формат PKCS#12.
2) Создание сертификатов.
Сначала генерируется закрытый ключ для будущего корневого сертификата:
# openssl genrsa -des3 -out ca.key 1024
des3 означает, что ключ будет зашифрован по алгоритму Triple-DES.
ca.key — имя файла ключа .
1024 — длина ключа в битах, не рекомендуется устанавливать ее больше данного значения, иначе могут быть проблемы с некоторыми реализациями SSL .
После того как ключ будет сгенерирован Вам предложат ввести для него пароль. Он должен отвечать Вашим требованиям безопасности, т.к. от длины пароля зависит стойкость всех сертификатов подписанным вашим СА. Если вы забудете пароль, то не сможете выдавать новые сертификаты. Фактически, это означает, что ваш СА станет непригоден для использования, и вам нужно будет создавать его заново, а также выдать заново все клиентские сертификаты.
Корневой сертификат будет самоподписанным, потому что он находится выше всех в создаваемой иерархии:
# openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
# openssl genrsa -out server.key 1024
# openssl req -new -key server.key -out server.csr
# openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial \ -extfile /etc/ssl/openssl.cnf -extensions v3_req -out server.crt