Создал(а) 'Openconnect server (ocserv) авторизация по сертификату FreeIPA'

2023-06-27 16:13:53 +03:00
parent 06328e0559
commit 2097ecce83

@@ -0,0 +1,138 @@
**Уточнения:**
ВМ — виртуальная машина.
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
```