Puncte:0

folosind strongswan cu pkcs11 și yubikey

drapel us

Încerc să implementez o nouă configurație VPN în întreprinderea mea.

Am stabilit cu succes o conexiune între computerul meu și serverul meu vpn ipsec în modul certificat.

Am încărcat fișierul p12 în yubikey-ul meu, care conține cheia mea privată, cheia pub a serverului și CA.

$ pkcs11-tool --test --login

Folosind slotul 0 cu un jeton prezent (0x0)
Conectare la „uid=r.beal,dc=ldap-...”.
Vă rugăm să introduceți codul PIN utilizator: 
C_SeedRandom() și C_GenerateRandom():
  seeding (C_SeedRandom) nu este acceptat
  pare a fi OK
Digerări:
  toate cele 4 funcții de digerare par să funcționeze
  MD5: OK
  SHA-1: OK
  RIPEMD160: OK
Semnături (în prezent numai pentru RSA)
  tasta de testare 0 (tasta PIV AUTH) 
  toate cele 4 funcții de semnătură par să funcționeze
  testarea mecanismelor de semnătură:
    RSA-X-509: OK
    RSA-PKCS: OK
    SHA1-RSA-PKCS: OK
    MD5-RSA-PKCS: OK
    RIPEMD160-RSA-PKCS: OK
    SHA256-RSA-PKCS: OK
Verificați (în prezent numai pentru RSA)
  tasta de testare 0 (tasta PIV AUTH)
    RSA-X-509: OK
    RSA-PKCS: OK
    SHA1-RSA-PKCS: OK
    MD5-RSA-PKCS: OK
    RIPEMD160-RSA-PKCS: OK
Decriptare (în prezent numai pentru RSA)
  tasta de testare 0 (tasta PIV AUTH)
    RSA-X-509: OK
    RSA-PKCS: OK
Fără erori

Am adăugat această secțiune în fișierul swanctl.conf:

secrete {
    tokenyubikey {
        pin = 123456
        slot = 0
        handle = 1 # Din câte am înțeles, aici este crt-ul meu
        module = yubi-module
    }
}

Și această secțiune din fișierul /etc/strongswan.d/charon/pkcs11.conf :

yubi-module {
    #cale = /usr/lib/libykcs11.so
    cale = /usr/lib/pkcs11/opensc-pkcs11.so
}

Când folosesc modulul yubikey pkcs11:

00[CFG] Modulul PKCS11 „<nume>” nu are calea bibliotecii
00[CFG] a încărcat biblioteca PKCS#11 v2.40 „yubi-module” (/usr/lib/libykcs11.so)
00[CFG] Yubico (www.yubico.com): Biblioteca PIV PKCS#11 (SP-800-73) v2.21
00[CFG] a găsit jeton în slotul „yubi-module”:0 (Yubico YubiKey OTP+FIDO+CCID 00 00)
00[CFG] YubiKey PIV #16616360 (Yubico (www.yubico.com): YubiKey YK5)
00[CFG] a încărcat certificatul neîncrezat „Certificat X.509 pentru autentificare PIV”
00[CFG] a încărcat certificatul neîncrezător „Certificat X.509 pentru atestarea PIV”

Și când modulul de utilizare este opensc:

00[CFG] Modulul PKCS11 „<nume>” nu are calea bibliotecii
00[CFG] a încărcat biblioteca PKCS#11 v2.20 „yubi-module” (/usr/lib/pkcs11/opensc-pkcs11.so)
00[CFG] OpenSC Project: OpenSC smartcard framework v0.22
00[CFG] a găsit jeton în slotul „yubi-module”:0 (Yubico YubiKey OTP+FIDO+CCID 00 00)
00[CFG] uid=r.beal,dc=ldap-.. (piv_II: emulare PKCS#15)
00[CFG] a încărcat certificat neîncrezător „Certificat pentru autentificare PIV”

Ce modul ar trebui să folosesc?

Când rulez demonul ipsec

# ipsec restart --nofork
Se pornește strongSwan 5.9.3 IPsec [starter]...
00[DMN] Pornește demonul IKE charon (strongSwan 5.9.3, Linux 5.14.15-arch1-1, x86_64)
00[CFG] Modulul PKCS11 „<nume>” nu are calea bibliotecii
00[CFG] a încărcat biblioteca PKCS#11 v2.20 „yubi-module” (/usr/lib/pkcs11/opensc-pkcs11.so)
00[CFG] OpenSC Project: OpenSC smartcard framework v0.22
00[CFG] a găsit jeton în slotul „yubi-module”:0 (Yubico YubiKey OTP+FIDO+CCID 00 00)
00[CFG] uid=r.beal,dc=ldap-.. (piv_II: emulare PKCS#15)
00[CFG] a încărcat certificat neîncrezător „Certificat pentru autentificare PIV”
00[CFG] plugin attr-sql: URI-ul bazei de date nu este setat
00[NET] folosind interfața de prognoză wlan0
00[CFG] se alătură grupurilor de multicast de prognoză: 224.0.0.1,224.0.0.22,224.0.0.251,224.0.0.252,239.255.255.250
00[CFG] se încarcă certificate ca de la „/etc/ipsec.d/cacerts”
00[CFG] a încărcat certificatul ca „C=FR, ST=Idf, L=City, O=company, OU=company, CN=company, [email protected]” de la „/etc/ipsec.d/cacerts /ca.pem'
00[CFG] se încarcă certificate aa de la „/etc/ipsec.d/acerts”
00[CFG] se încarcă certificate de semnatar ocsp de la „/etc/ipsec.d/ocspcerts”
00[CFG] se încarcă certificate de atribut din „/etc/ipsec.d/acerts”
00[CFG] se încarcă crls din „/etc/ipsec.d/crls”
00[CFG] se încarcă secrete din „/etc/ipsec.secrets”
00[CFG] plugin sql: URI-ul bazei de date nu este setat
00[CFG] deschiderea fișierului triplet /etc/ipsec.d/triplets.dat a eșuat: Nu există un astfel de fișier sau director
00[CFG] a încărcat 0 configurații de server RADIUS
00[CFG] HA config lipsește adresa locală/la distanță
00[CFG] nu a fost definit niciun script pentru scriptul ext-auth, dezactivat
00[LIB] plugin-uri încărcate: charon ldap pkcs11 aesni aes des rc2 sha2 sha3 sha1 md5 mgf1 aleatoriu nonce x509 constrângeri de revocare pubkey pkcs1 pkcs7 pkcs8 pkcs12 pgp dnskey ssh3 sha1 md5 mgf1 aleatoriu nonce x509 constrângeri de revocare pubkey pkcs1 pkcs7 pkcs8 pkcs12 pgp dnskey sshlkey sshmp pepl agent de curvem dnskey dnskey sqlite attr kernel-netlink rezolvă socket-default bypass-lan connmark prognoză farp accident vascular cerebral vici updown eap-identity eap-sim eap-aka eap-aka-3gpp2 eap-simaka-pseudonim eap-simaka-reauth eap-md5 eap-gtc mschapv2 eap-dynamic eap-radius eap-tls eap-ttls eap-peap xauth-generic xauth-eap xauth-pam xauth-noauth dhcp radattr contoare de unitate
00[LIB] a renunțat la capabilități, rulând ca uid 0, gid 0
00[JOB] generează 16 fire de lucru
06[IKE] a instalat politica de ocolire pentru 172.17.0.0/16
06[IKE] a instalat politica de ocolire pentru 192.168.1.0/24
06[IKE] a instalat politica de ocolire pentru ::1/128
06[IKE] a instalat politica de ocolire pentru fe80::/64
02[CFG] a găsit jeton în slotul „yubi-module”:0 (Yubico YubiKey OTP+FIDO+CCID 00 00)
02[CFG] uid=r.beal,dc=ldap-.. (piv_II: emulare PKCS#15)
02[CFG] a încărcat certificat neîncrezător „Certificat pentru autentificare PIV”
charon (10359) a început după 120 ms
11[CFG] lovitura primită: adăugați „test” de conexiune
11[CFG] certificat încărcat „C=FR, ST=Idf, L=City, O=company, OU=company, CN=uid=r.beal,dc=ldap,dc=company,dc=fr, E=r [email protected]" din „/etc/swanctl/x509/r.beal.pem”
11[CFG] id-ul „UID=r.beal, DC=ldap, DC=company, DC=fr” nu este confirmat prin certificat, fiind implicit „C=FR, ST=Idf, L=City, O=company, OU= companie, CN=uid=r.beal,dc=ldap,dc=company,dc=fr, [email protected]'
11[CFG] a adăugat configurația „test”

Cardul inteligent este prezent!

Acum încerc să mă conectez la VPN (/etc/ipsec.conf):

test conn
     dreapta=1.2.3.4 <= ip-ul public al serverului meu vpn
     rightid=id_la distanță_al_serverului
     leftcert=/etc/swanctl/x509/r.beal.pem
     leftid=email_mea
     stânga=%defaultroute
     #leftcert=%smartcard
     auto=adăugați

Am pus CA în /etc/ipsec.d/cacerts/

jurnal ipsec:

01[CFG] accident vascular cerebral primit: inițiați „testul”
09[IKE] inițiază testul IKE_SA[1] la 1.2.3.4
09[ENC] generează cererea IKE_SA_INIT 0 [ SA KE Nu N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) N(HASH_ALG) N(REDIR_SUP) ]
09[NET] trimite pachet: de la 192.168.1.199[500] la 1.2.3.4[500] (1000 de octeți)
Pachetul primit 10[NET]: de la 1.2.3.4[500] la 192.168.1.199[500] (38 octeți)
10[ENC] a analizat răspunsul IKE_SA_INIT 0 [ N(INVAL_KE) ]
10 [IKE] peer nu a acceptat grupul DH ECP_256, a solicitat MODP_2048
10[IKE] inițiază testul IKE_SA[1] la 1.2.3.4
10[ENC] generează cererea IKE_SA_INIT 0 [ SA KE Nu N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) N(HASH_ALG) N(REDIR_SUP) ]
Pachetul de trimitere 10[NET]: de la 192.168.1.199[500] la 1.2.3.4[500] (1192 octeți)
Pachetul primit 06[NET]: de la 1.2.3.4[500] la 192.168.1.199[500] (481 de octeți)
06[ENC] a analizat răspunsul IKE_SA_INIT 0 [ SA KE Nu N(NATD_S_IP) N(NATD_D_IP) CERTREQ N(HASH_ALG) N(CHDLESS_SUP) ]
06[CFG] propunere selectată: IKE:AES_CBC_256/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_2048
Gazda locală 06[IKE] este în spatele NAT, trimițând keep alives
06[IKE] gazda la distanță este în spatele NAT
06[IKE] a primit o cerere de certificare pentru „C=FR, ST=Idf, L=City, O=company, OU=company, CN=company, [email protected]”
06[IKE] trimiterea cererii de certificare pentru „C=FR, ST=Idf, L=City, O=company, OU=company, CN=company, [email protected]”
06[IKE] nu a fost găsită nicio cheie privată pentru „C=FR, ST=Idf, L=City, O=company, OU=company, CN=uid=r.beal,dc=ldap,dc=company,dc=fr, [email protected]'

Există un început de conexiune! Ce ar trebui să fac pentru ca ipsec să folosească cheia privată din interiorul cardului meu inteligent?

Am vazut aceasta postare: „NO_PROPOSAL_CHOSEN” când încercați să vă autentificați cu un certificat de la smartcard folosind swanctl Am aceeasi problema? Am încercat să copiez toate certificatele din directorul x509, dar am aceeași eroare „nu a fost găsită nicio cheie privată”.

EDITARE ===

Acum, când apelez „swanctl --load-creds” ipsec găsește cheia privată și o folosește!

Dar acum am o problemă de rețea.

16 Autentificare [IKE] a „compagny.com” cu RSA_EMSA_PKCS1_SHA2_256 reușită
16[IKE] Test IKE_SA[1] stabilit între 192.168.1.199[[email protected]]...1.2.3.4[compagny.com]
16[IKE] programează reautentificarea în 10059s
16[IKE] durata maximă de viață IKE_SA 10599s
16 [CFG] a eșuat gestionarea atributului UNITY_SPLITDNS_NAME
16 [CFG] a eșuat gestionarea atributului INTERNAL_IP4_NETMASK
16[IKE] instalând serverul DNS 172.22.0.17 în /etc/resolv.conf
16[IKE] instalând un nou IP virtual 10.66.0.5
16[IKE] a primit o notificare TS_UNACCEPTABLE, nu a fost construită nicio CHILD_SA
16[IKE] nu a reușit să stabilească CHILD_SA, păstrând IKE_SA
16[IKE] a primit AUTH_LIFETIME din 20278s, reautentificarea deja programată în 10059s

Am adăugat la fișierul meu de conf:

leftsourceip=%config

Serverul meu VPN este configurat să nu direcționeze traficul de internet al clientului. Deci cred că acum este o problemă de configurare a rețelei.

drapel cn
De ce configurați secretul în swanctl.conf, dar conexiunea în ipsec.conf? (Nu cauzează direct problema, dar este totuși ciudat.) Configurarea cheii private nu este suficientă, aveți nevoie și de o cheie publică/certificat care să se potrivească cu identitatea locală configurată. Există un certificat încărcat din token, dar care pare să nu fie de încredere (după cum este raportat de PKCS#11). Dacă nu puteți schimba acest lucru, puteți încerca să încărcați în mod explicit certificatul în conexiune.
rBeal avatar
drapel us
Mi-am editat postarea. Poate funcționa conexiunea dacă certificatul nu este de încredere? Nu pot găsi de ce nu este de încredere. Toate certificatele sunt generate din firewall-ul unui Stormshield. Deci presupun ca sunt ok.
drapel cn
Ați fi putut să faceți referință la certificat pe token în loc să-l încărcați dintr-un fișier (folosind sintaxa `%smartcard`). Și de fapt s-ar putea să fi greșit mai sus. Configurarea cheii în swanctl.conf în loc de ipsec.secrets ar putea fi de fapt un factor suplimentar care cauzează acest lucru, deoarece nu văd că cheia se încarcă efectiv (ceea ce nu se întâmplă dacă `swanctl --load-creds` sau ` --load-all` nu este niciodată apelat (ceea ce nu este cazul dacă utilizați doar `ipsec (re)start`). Așa că încercați să-l configurați în [ipsec.secrets](https://wiki.strongswan.org/ proiecte/strongswan/wiki/PINsecret).
rBeal avatar
drapel us
Mulțumiri !! Acum am o noua problema, mi-am editat postarea.
rBeal avatar
drapel us
Sunt de acord să am o configurație curată. Lucrez pentru a avea unul curat. Cum pot găsi codul cheie pentru fișierul ipsec.secrets?
drapel cn
Acesta este `CKA_ID` pentru cheia de pe token (corespunde cu _handle_ din swanctl.conf). Faptul că serverul returnează o eroare `TS_UNACCEPTABLE` se poate datora faptului că nu ați configurat `rightsubnet`. Configurați subrețelele la care doriți să ajungeți, utilizați `0.0.0.0/0` pentru a tunel totul sau lăsați respondentul să o restrângă la ceea ce a configurat. Dacă este posibil, verificați jurnalul de pe server pentru motivul pentru care returnează acea eroare.
Puncte:0
drapel us

Soluția a fost să setați rightsubnet la 0.0.0.0/0

Mulțumim ecdsa!

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.