Создал(а) 'Openconnect server (ocserv) авторизация по сертификату FreeIPA'
@@ -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
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user