Рейтинг:0

используя strongswan с pkcs11 и yubikey

флаг us

Я пытаюсь развернуть новую конфигурацию VPN на своем предприятии.

Я успешно установил соединение между своим компьютером и сервером vpn ipsec в режиме сертификата.

Я загрузил файл p12 в свой yubikey, который содержит мой закрытый ключ, открытый ключ сервера и ЦС.

$ pkcs11-tool --test --логин

Использование слота 0 с текущим токеном (0x0)
Вход в "uid=r.beal,dc=ldap-...".
Введите PIN-код пользователя: 
C_SeedRandom() и C_GenerateRandom():
  раздача (C_SeedRandom) не поддерживается
  кажется, все в порядке
Дайджесты:
  все 4 функции дайджеста вроде работают
  MD5: ОК
  ША-1: ОК
  RIPEMD160: ОК
Подписи (в настоящее время только для RSA)
  тестовый ключ 0 (ключ PIV AUTH) 
  все 4 функции подписи вроде работают
  тестирование механизмов подписи:
    RSA-X-509: ОК
    РСА-ПККС: ОК
    SHA1-RSA-PKCS: ОК
    MD5-RSA-PKCS: ОК
    RIPEMD160-RSA-PKCS: ОК
    SHA256-RSA-PKCS: ОК
Подтвердить (в настоящее время только для RSA)
  тестовый ключ 0 (ключ PIV AUTH)
    RSA-X-509: ОК
    РСА-ПККС: ОК
    SHA1-RSA-PKCS: ОК
    MD5-RSA-PKCS: ОК
    RIPEMD160-RSA-PKCS: ОК
Расшифровка (в настоящее время только для RSA)
  тестовый ключ 0 (ключ PIV AUTH)
    RSA-X-509: ОК
    РСА-ПККС: ОК
Нет ошибок

Я добавил этот раздел в файл swanctl.conf:

секреты {
    tokenyubikey {
        штифт = 123456
        слот = 0
        handle = 1 # Насколько я понял, мой ЭЛТ находится здесь
        модуль = юби-модуль
    }
}

И этот раздел в файле /etc/strongswan.d/charon/pkcs11.conf:

юби-модуль {
    #путь = /usr/lib/libykcs11.so
    путь = /usr/lib/pkcs11/opensc-pkcs11.so
}

Когда я использую модуль yubikey pkcs11:

00[CFG] В модуле PKCS11 '<имя>' отсутствует путь к библиотеке
00[CFG] загрузил библиотеку PKCS#11 v2.40 'yubi-module' (/usr/lib/libykcs11.so)
00[CFG] Yubico (www.yubico.com): библиотека PKCS#11 PIV (SP-800-73) v2.21
00[CFG] нашел токен в слоте 'yubi-module':0 (Yubico YubiKey OTP+FIDO+CCID 00 00)
00[CFG] YubiKey PIV #16616360 (Yubico (www.yubico.com): YubiKey YK5)
00[CFG] загрузил недоверенный сертификат «Сертификат X.509 для аутентификации PIV»
00[CFG] загрузил недоверенный сертификат «Сертификат X.509 для аттестации PIV»

И когда модуль использования opensc :

00[CFG] В модуле PKCS11 '<имя>' отсутствует путь к библиотеке
00[CFG] загрузил библиотеку PKCS#11 v2.20 'yubi-module' (/usr/lib/pkcs11/opensc-pkcs11.so)
00[CFG] Проект OpenSC: платформа смарт-карт OpenSC v0.22
00[CFG] нашел токен в слоте 'yubi-module':0 (Yubico YubiKey OTP+FIDO+CCID 00 00)
00[CFG] uid=r.beal,dc=ldap-.. (piv_II: эмуляция PKCS#15)
00[CFG] загружен недоверенный сертификат «Сертификат для аутентификации PIV»

Какой модуль мне следует использовать?

Когда я запускаю демон ipsec

# перезапуск ipsec --nofork
Запуск strongSwan 5.9.3 IPsec [стартер]...
00[DMN] Запуск демона IKE charon (strongSwan 5.9.3, Linux 5.14.15-arch1-1, x86_64)
00[CFG] В модуле PKCS11 '<имя>' отсутствует путь к библиотеке
00[CFG] загрузил библиотеку PKCS#11 v2.20 'yubi-module' (/usr/lib/pkcs11/opensc-pkcs11.so)
00[CFG] Проект OpenSC: платформа смарт-карт OpenSC v0.22
00[CFG] нашел токен в слоте 'yubi-module':0 (Yubico YubiKey OTP+FIDO+CCID 00 00)
00[CFG] uid=r.beal,dc=ldap-.. (piv_II: эмуляция PKCS#15)
00[CFG] загружен недоверенный сертификат «Сертификат для аутентификации PIV»
00[CFG] плагин attr-sql: URI базы данных не задан
00[NET] с использованием интерфейса прогноза wlan0
00[CFG] присоединение к многоадресным группам прогноза: 224.0.0.1,224.0.0.22,224.0.0.251,224.0.0.252,239.255.255.250
00[CFG] загрузка сертификатов ca из '/etc/ipsec.d/cacerts'
00[CFG] загрузил сертификат ca "C=FR, ST=Idf, L=City, O=company, OU=company, CN=company, [email protected]" из '/etc/ipsec.d/cacerts /ca.pem'
00[CFG] загрузка сертификатов aa из '/etc/ipsec.d/aacerts'
00[CFG] загрузка сертификатов подписанта ocsp из '/etc/ipsec.d/ocspcerts'
00[CFG] загрузка сертификатов атрибутов из '/etc/ipsec.d/acerts'
00[CFG] загрузка crls из '/etc/ipsec.d/crls'
00[CFG] загрузка секретов из '/etc/ipsec.secrets'
00[CFG] Плагин sql: URI базы данных не задан
00[CFG] не удалось открыть файл триплета /etc/ipsec.d/triplets.dat: нет такого файла или каталога
00[CFG] загружено 0 конфигураций сервера RADIUS
00[CFG] В конфигурации HA отсутствует локальный/удаленный адрес
00[CFG] скрипт для скрипта ext-auth не определен, отключен
00[LIB] загруженные плагины: charon ldap pkcs11 aesni aes des rc2 sha2 sha3 sha1 md5 mgf1 random nonce x509 ограничения отзыва pubkey pkcs1 pkcs7 pkcs8 pkcs12 pgp dnskey sshkey pem openssl fips-prf gmp curve25519 агент chapoly xchope curls mysqlbli curls nt drbc cmac hmac h sqlite attr kernel-netlink разрешить сокет-по умолчанию bypass-lan connmark прогноз Farp Stroke Vici вверх вниз eap-identity eap-sim eap-aka eap-aka-3gpp2 eap-simaka-псевдоним eap-simaka-reauth eap-md5 eap-gtc eap- mschapv2 eap-dynamic eap-radius eap-tls eap-ttls eap-peap xauth-generic xauth-eap xauth-pam xauth-noauth dhcp radattr счетчики единства
00[LIB] убрал возможности, работает как uid 0, gid 0
00[JOB] создание 16 рабочих потоков
06[IKE] установил политику обхода для 172.17.0.0/16
06[IKE] установил политику обхода для 192.168.1.0/24
06[IKE] установил политику обхода для ::1/128
06[IKE] установил политику обхода для fe80::/64
02[CFG] нашел токен в слоте 'yubi-module':0 (Yubico YubiKey OTP+FIDO+CCID 00 00)
02[CFG] uid=r.beal,dc=ldap-.. (piv_II: эмуляция PKCS#15)
02[CFG] загружен недоверенный сертификат «Сертификат для аутентификации PIV»
charon (10359) запустился через 120 мс
11[CFG] получен ход: добавить соединение 'test'
11[CFG] загруженный сертификат "C=FR, ST=Idf, L=Город, O=компания, OU=компания, CN=uid=r.beal,dc=ldap,dc=company,dc=fr, E=r [email protected]" из '/etc/swanctl/x509/r.beal.pem'
11[CFG] id 'UID=r.beal, DC=ldap, DC=company, DC=fr' не подтвержден сертификатом, по умолчанию 'C=FR, ST=Idf, L=City, O=company, OU= компания, CN=uid=r.beal,dc=ldap,dc=company,dc=fr, [email protected]'
11[CFG] добавлена ​​конфигурация "тест"

Смарт-карта присутствует!

Теперь я пытаюсь подключиться к VPN (/etc/ipsec.conf):

конн-тест
     right=1.2.3.4 <= общедоступный IP-адрес моего сервера vpn
     rightid=remote_id_of_the_server
     leftcert=/etc/swanctl/x509/r.beal.pem
     левый идентификатор = мой_почта
     слева=%defaultroute
     #leftcert=%смарткарта
     авто=добавить

Я поместил ЦС в /etc/ipsec.d/cacerts/

журнал ipsec:

01[CFG] получил ход: инициировать «тест»
09[IKE] инициирует тест IKE_SA[1] на 1.2.3.4
09[ENC] генерация запроса IKE_SA_INIT 0 [SA KE No N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) N(HASH_ALG) N(REDIR_SUP)]
09[NET] отправка пакета: с 192.168.1.199[500] на 1.2.3.4[500] (1000 байт)
10[NET] полученный пакет: от 1.2.3.4[500] до 192.168.1.199[500] (38 байт)
10[ENC] проанализировал ответ IKE_SA_INIT 0 [ N(INVAL_KE) ]
10Узел [IKE] не принял группу DH ECP_256, он запросил MODP_2048
10[IKE] инициирует тест IKE_SA[1] на 1.2.3.4
10[ENC] генерирует запрос IKE_SA_INIT 0 [SA KE No N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) N(HASH_ALG) N(REDIR_SUP)]
10[NET] отправка пакета: с 192.168.1.199[500] на 1.2.3.4[500] (1192 байта)
06[NET] полученный пакет: с 1.2.3.4[500] на 192.168.1.199[500] (481 байт)
06[ENC] проанализированный ответ IKE_SA_INIT 0 [SA KE No N(NATD_S_IP) N(NATD_D_IP) CERTREQ N(HASH_ALG) N(CHDLESS_SUP)]
06[CFG] выбранное предложение: IKE:AES_CBC_256/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_2048
06[IKE] локальный хост находится за NAT, отправка сообщений проверки активности
06[IKE] удаленный хост находится за NAT
06[IKE] получил запрос сертификата для "C=FR, ST=Idf, L=City, O=company, OU=company, CN=company, [email protected]"
06[IKE] отправляет запрос сертификата для "C=FR, ST=Idf, L=City, O=company, OU=company, CN=company, [email protected]"
06[IKE] не найден закрытый ключ для 'C=FR, ST=Idf, L=City, O=company, OU=company, CN=uid=r.beal,dc=ldap,dc=company,dc=fr, [email protected]'

Есть начало подключения! Что нужно сделать, чтобы ipsec использовал закрытый ключ моей смарт-карты?

Я видел этот пост: «NO_PROPOSAL_CHOSEN» при попытке аутентификации с помощью сертификата смарт-карты с использованием swanctl У меня такая же проблема? Я попытался скопировать все сертификаты в каталог x509, но у меня та же ошибка «закрытый ключ не найден».

РЕДАКТИРОВАТЬ ===

Теперь, когда я вызываю «swanctl --load-creds», ipsec находит закрытый ключ и использует его!

Но у меня сейчас проблема с сетью.

16 [IKE] проверка подлинности «compagny.com» с RSA_EMSA_PKCS1_SHA2_256 выполнена успешно
16[IKE] Тест IKE_SA[1] установлен между 192.168.1.199[[email protected]]...1.2.3.4[compagny.com]
16[IKE] планирование повторной аутентификации в 10059s
16[IKE] максимальное время жизни IKE_SA 10599 с
16[CFG] не удалось обработать атрибут UNITY_SPLITDNS_NAME
16[CFG] не удалось обработать атрибут INTERNAL_IP4_NETMASK
16[IKE] устанавливает DNS-сервер 172.22.0.17 в /etc/resolv.conf
16[IKE] установка нового виртуального IP 10.66.0.5
16[IKE] получил уведомление TS_UNACCEPTABLE, CHILD_SA не создан
16[IKE] не удалось установить CHILD_SA, сохраняя IKE_SA
16[IKE] получил AUTH_LIFETIME из 20 278 с, повторная аутентификация уже запланирована на 10 059 с.

Я добавил в свой файл conf:

leftsourceip=%config

Мой VPN-сервер настроен так, чтобы не направлять интернет-трафик клиента. Поэтому я думаю, что сейчас проблема с конфигурацией сети.

флаг cn
Почему вы настраиваете секрет в swanctl.conf, а соединение в ipsec.conf? (Непосредственно проблема не возникает, но все равно странно.) Настроить закрытый ключ недостаточно, вам также нужен открытый ключ/сертификат, соответствующий настроенному локальному идентификатору. Сертификат, загруженный из токена, кажется ненадежным (как сообщает PKCS#11). Если вы не можете это изменить, вы можете попробовать явно загрузить сертификат в соединение.
rBeal avatar
флаг us
Я отредактировал свой пост. Может ли соединение работать, если сертификат недоверен? Не могу найти почему не доверяют. Все сертификаты генерируются брандмауэром stormshield. Так что я полагаю, что они в порядке.
флаг cn
Вы могли бы сослаться на сертификат в токене, а не загружать его из файла (используя синтаксис `%smartcard`). И я действительно мог ошибаться выше. Ваша настройка ключа в swanctl.conf вместо ipsec.secrets на самом деле может быть дополнительным фактором, вызывающим это, потому что я не вижу, чтобы ключ действительно загружался (чего не происходит, если `swanctl --load-creds` или ` --load-all` никогда не вызывается (это не тот случай, если вы просто используете `ipsec (re)start`). Поэтому попробуйте настроить его в [ipsec.secrets](https://wiki.strongswan.org/ проекты/strongswan/wiki/PINsecret).
rBeal avatar
флаг us
Спасибо !! Теперь у меня новая проблема, я отредактировал свой пост.
rBeal avatar
флаг us
Я согласен иметь чистую конфигурацию. Я работаю, чтобы иметь чистый. Как найти идентификатор ключа для файла ipsec.secrets?
флаг cn
Это CKA_ID для ключа токена (соответствует _handle_ в swanctl.conf). То, что сервер возвращает ошибку `TS_UNACCEPTABLE`, может быть связано с тем, что вы не настроили `rightsubnet`. Настройте подсети, к которым вы хотите подключиться, используйте «0.0.0.0/0», чтобы туннелировать все, или позвольте ответчику сузить его до того, что он настроил. Если возможно, проверьте журнал на сервере, почему он возвращает эту ошибку.
Рейтинг:0
флаг us

Решение состояло в том, чтобы установить правую подсеть на 0.0.0.0/0.

Спасибо ecdsa!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.