Product SiteDocumentation Site

84.2. Настройка в командной строке

84.2.1. Создание ключей для OpenVPN-туннеля средствами утилиты openssl

Для генерации всех необходимых ключей и сертификатов необходимо выполнить следующие действия:
  1. Изменить значение параметра policy в файле /var/lib/ssl/openssl.cnf для возможности подписывать любые сертификаты:
    policy = policy_anything
  2. Создать каталоги:
    # mkdir -p /root/CA/demoCA
    # cd /root/CA
    # mkdir -p ./demoCA/newcerts
    
    Создать файл базы для действующих и отозванных сертификатов:
    # touch ./demoCA/index.txt
    
    Создать файл индекса для базы ключей и сертификатов:
    # echo '01' > ./demoCA/serial
    
    Создать файл индекса для базы отозванных сертификатов:
    # echo '01' > ./demoCA/crlnumber
    
  3. Создать «самоподписанный» сертификат ca-root.crt и закрытый ключ ca-root.key, которыми будут заверяться/подписываться ключи и сертификаты клиентов, с помощью следующей команды:
    # openssl req -new -x509 -keyout ca-root.key -out ca-root.crt
    
    Ввести пароль для закрытого ключа и ответить на запросы о владельце ключа.
  4. Создать пару «ключ-сертификат» для сервера и каждого клиента. Для этого сначала сгенерировать ключ и запрос на сертификат для сервера:
    # openssl req -new -nodes -keyout server.key -out server.csr
    
    Подписать запрос на сертификат своим «самоподписанным» сертификатом ca-root.crt и ключом ca-root.key:
    # openssl ca -cert ca-root.crt -keyfile ca-root.key -days 3650 -in server.csr -out server.crt
    
    Сгенерировать ключ и запрос на сертификат для клиента:
    # openssl req -new -nodes -keyout client.key -out client.csr
    
    Подписать клиентский сертификат:
    # openssl ca -cert ca-root.crt -keyfile ca-root.key -days 365 -in client.csr -out client.crt
    
  5. Задать параметры Диффи-Хеллмана для сервера:
    # openssl dhparam -out server.dh 2048
    
  6. Разместить ключи и сертификаты в каталогах сервера и клиента следующим образом:
    • ca-root.key — используется только для подписи сертификатов (рекомендуется хранить его на отдельном от OpenVPN-сервера компьютере);
    • ca-root.crt, server.crt, server.dh, server.key — для сервера OpenVPN;
    • ca-root.crt, client.crt, client.key — для клиента OpenVPN.
  7. Для новых клиентов следует создавать новые ключи и передавать комплект: ca-root.crt, новый_сертификат.crt, новый_ключ.key.
Для создания списка отзыва сертификатов (CRL) необходимо выполнить следующие действия:
  1. Сформировать начальный список:
    # openssl ca -cert ca-root.crt -keyfile ca-root.key -gencrl -out crl.pem
    
  2. Отозвать сертификат:
    # openssl ca -cert ca-root.crt -keyfile ca-root.key -revoke <сертификат>.crt
    
  3. Обновить список (обязательно после каждого отзыва сертификата):
    # openssl ca -cert ca-root.crt -keyfile ca-root.key -gencrl -out crl.pem
    
  4. Просмотреть список:
    # openssl crl -noout -text -in crl.pem
    
  5. Поместить файл crl.pem в каталог /var/lib/openvpn.

Примечание

Для работы со списком отозванных сертификатов OpenVPN должен быть настроен на его проверку. Это достигается добавлением в конфигурацию сервера директивы:
crl-verify /var/lib/openvpn/crl.pem
При включённой проверке CRL сертификаты всех подключающихся клиентов будут проверяться по списку отозванных сертификатов, и любое положительное совпадение приведёт к разрыву соединения.