четверг, 29 ноября 2007 г.

Создание OpenSSL Сертификатов для Openvpn

Сперва необходимо подготовить почву

Отредактировать файл openssl.cnf
Необходимо подправить дефолтные настройки сертификатов(чтоб не забивать каждый раз руками, и ОБЯЗАТЕЛЬНО увеличить срок действия сертификата)

Создаем файл /usr/local/openssl/serial c содержимым '01'

# touch serial
# echo 01 > serial


Создаем каталоги /crl, /newcerts, /private

# mkdir crl newcerts private


Для каталога private, в целях безопастности частного ключа сервера,
рекомендую установить права только для пользователя root

# chmod go-rwx private


Создаем пустой файл /usr/local/openssl/index:

# touch index


И наконец создаем сертификат CA

openssl req -new -nodes -x509 -keyout private/CA_key.pem -out CA_cert.pem -days 3650

Команда req заставляет OpenSSL создать сертификат, ключи: -new - cоздать запрос на сертификат, -nodes - не шифровать закрытый ключ, -x509 (совместно с -new) - создать самоподписной сертификат (CA), -keyout - задает местонахождение закрытого ключа, -out - задает местонахождение самоподписного сертификата, -days - задает время действия сертификата (365x10 дней, что приблизительно равно десяти годам). В процессе выполнения команды на экран будут выданы запросы о вводе таких параметров как: Country Name, State or Province Name; Locality Name; Organization Name; Organizational Unit Name; Common Name; Email Address. Самым важным параметром является значение Common Name. В данном случае оно должно совпадать с FQDN-именем сервера.

Теперь, когда мы имеем CA, мы можем создавать сертификаты и ключи для
машин, образующих туннель. Вместо host_x и client_x рекомендую
указывать осмысленное имя вашей машины-сервера и клиентов, что бы потом
не запутаться самому.

Сгенерируем частный ключ для сервера, его настоятельно рекомендуется
хранить в тайне:

# openssl genrsa -out host_x.key


Генерируем сертификат:

# openssl req -new -nodes -key host_x.key -out host_x.csr
# openssl ca -batch -config openssl.cnf -in host_x.csr -out host_x.cert


Теперь повторим то же самое, но только для клиента:

# openssl genrsa -out client_x.key
# openssl req -new -nodes -key client_x.key -out client_x.csr
# openssl ca -batch -config openssl.cnf -in client_x.csr -out client_x.cert


И в конце создаем ключик ta.key. Этот ключ используется для
предотвращения DoS атак и UDP port flooding

# openvpn --genkey --secret ta.key


Таким образом мы получили подписанный нами же сертификат X.509.
Необходимо повторить эти действия для всех имеющихся у нас машин.


Далее создать ключ Диффи Хельман
# openssl dhparam -out dh1024.pem 1024

3 комментария:

Анонимный комментирует...

Здравствуйте, вы написали:
1)
>Таким образом мы получили подписанный нами же сертификат X.509.
>Необходимо повторить эти действия для всех имеющихся у нас машин.

Какие именно действия нужно повторить для имеющихся машин? Создание центра сертификации CA или создание сертификата client_xxx.cert?

2) Мы создали файл ta.key, а как он будет помогать и защищать от DoS-ов, надо ли что-то ещё настраивать с ним?

3) Зачем нам далее создавать
ключ Диффи Хельман
# openssl dhparam -out dh1024.pem 1024
?

Анонимный комментирует...

Здравствуйте, вы написали:
1)
>Таким образом мы получили подписанный нами же сертификат X.509.
>Необходимо повторить эти действия для всех имеющихся у нас машин.

Какие именно действия нужно повторить для имеющихся машин? Создание центра сертификации CA или создание сертификата client_xxx.cert?

2) Мы создали файл ta.key, а как он будет помогать и защищать от DoS-ов, надо ли что-то ещё настраивать с ним?

3) Зачем нам далее создавать
ключ Диффи Хельман
# openssl dhparam -out dh1024.pem 1024
?

Garet комментирует...

Спасибо за пост. Смотрел генерацию ключей здесь - http://sysadm.pp.ua/linux/shifrovanie/openvpn-easy-rsa.html . Нехватает CRL листов с примером отзвыа OpenVPN сертификата... Подскажите, как генерировать те же ключи используя openSSL ?