1
Openconnect server (ocserv) + пользовательский сертификат FreeIPA
Артемий Красильников edited this page 2023-06-30 13:12:11 +03:00
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Пошаговая настройка Openconnect server (OCserv) в Альт Linux 8 СП с использованием двухфакторной аутентификации на основе пары имя+пароль + пользовательский сертификата в интеграции с FreeIPA.

Уточнения:

ВМ — виртуальная машина.

vim — текстовый редактор, в командах используется именно он, можно использовать любой удобный вам.

username — имя учётной записи во FreeIPA.

host — FQDN ВМ на которой производится настройка службы Ocserv.

REALM — основная доменная область сервера FreeIPA.

vpn.example.ru — внешнее доменное имя по которому будут подключаться vpn-клиенты.

example-name — название соединения.

Подготовка к установке:

Перед настройкой Openconnect-сервера следует выпустить пользователю сертификат через FreeIPA.

Выпускаем закрытый ключ и генерируем запрос на пользовательский сертификат (CSR):

Генерируем CSR:

openssl req -new -newkey rsa:2048 -nodes -keyout %username%.key -out %username%.csr

При генерации закрытого ключа, на шаге генерации CN, указываем имя пользователя:

Common Name (eg, your name or your server's hostname) []:%username%

Выпускаем через FreeIPA сертификат и сохраняем его себе:

kinit %username%
ipa cert-request --principal=%username% %username%.csr --add && ipa user-show %username% --out=%username%.pem

Объединяем закрытый ключ + сертификат в pfx сертификат с установкой пароля:

openssl pkcs12 -export -out %username%.pfx -inkey %username%.key -in %username%.pem

Перенастройка Openconnect-сервера:

!Если ранее этого не делали, то выпускаем новый сертификат для VPN-сервера openconnect в FreeIPA и добавить в него корневой сертификат, создав связку (для этого пользователь должен обладать необходимыми правами в FreeIPA):

openssl req -new -newkey rsa:2048 -nodes -keyout %host%.key -out %host%.csr
sudo ipa cert-request --principal=OCSERV/%host%@%REALM% %host%.csr --add
sudo ipa service-show OCSERV/%host%@%REALM% --out=%host%.pem

Добавляем в сертификат VPN-сервера корневой сертификат(создаём цепочку):

ipa cert-show 1 --out=ca.pem && cat ca.pem >> %host%.pem

Вносим изменения в файл конфигурации ocserv:

sudo vim /etc/ocserv/ocserv.conf && sudo systemctl restart ocserv

Отредактируем данные записи, указав путь, до нового сертификата

auth = "certificate"
 
 
ca-cert = /etc/pki/ocserv/cacerts/%host%.pem
 
cert-user-oid = 2.5.4.3
 
 
cisco-client-compat = true

Настройка профиля Cisco Anyconnect на Windows/Mac/Linux:

Импортируем подготовленный пользовательский PFX сертификат в личное хранилище сертификатов ОС и создаём профиль подключения с расширением .xml:

Для MAC в каталоге: /opt/cisco/anyconnect/profile

Для Windows в каталоге: C:\ProgramData\Cisco\Cisco AnyConnect Secure Mobility Client\Profile

Для Linux в каталоге: /opt/cisco/anyconnect/profile

Следующего содержания:

<?xml version="1.0" encoding="UTF-8"?>
<AnyConnectProfile xmlns="http://schemas.xmlsoap.org/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.xmlsoap.org/encoding/ AnyConnectProfile.xsd">
 
    <ClientInitialization>
        <UseStartBeforeLogon UserControllable="false">false</UseStartBeforeLogon>
            <AutomaticCertSelection UserControllable="true">false</AutomaticCertSelection>
        <StrictCertificateTrust>false</StrictCertificateTrust>
        <RestrictPreferenceCaching>false</RestrictPreferenceCaching>
        <RestrictTunnelProtocols>IPSec</RestrictTunnelProtocols>
        <BypassDownloader>false</BypassDownloader>
        <WindowsVPNEstablishment>AllowRemoteUsers</WindowsVPNEstablishment>
        <CertEnrollmentPin>pinAllowed</CertEnrollmentPin>
        <AutomaticVPNPolicy>false</AutomaticVPNPolicy>
        <CertificateMatch>
            <MatchOnlyCertsWithKU>false</MatchOnlyCertsWithKU>
            <DistinguishedName>
                <DistinguishedNameDefinition Operator="Equal" Wildcard="Disabled" MatchCase="Disabled">
                    <Name>ISSUER-O</Name>
                    <Pattern>%REALM%</Pattern>
                </DistinguishedNameDefinition>
            </DistinguishedName>
        </CertificateMatch>
 
        <BackupServerList>
                <HostAddress>localhost</HostAddress>
        </BackupServerList>
    </ClientInitialization>
 
    <ServerList>
        <HostEntry>
                <HostName>%example-name%</HostName>
                <HostAddress>%vpn.example.ru%</HostAddress>
        </HostEntry>
    </ServerList>
</AnyConnectProfile>

Подключение через openconnect:

При использовании VPN-клиента openconnect требуется указать пусть до PFX сертификата в пунктах сертификата и ключа. Пример подключения к openconnect-серверу(ocserv) через консоль будет выглядеть так:

sudo openconnect %vpn.example.ru% -u %username% -k %username%.pfx -c %username%.pfx