Создал(а) '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