Score:0

ใช้ strongswan กับ pkcs11 และ yubikey

ธง us

ฉันกำลังพยายามปรับใช้การกำหนดค่า VPN ใหม่ในองค์กรของฉัน

ฉันได้สร้างการเชื่อมต่อระหว่างคอมพิวเตอร์ของฉันกับเซิร์ฟเวอร์ vpn ipsec ในโหมดใบรับรองสำเร็จแล้ว

ฉันอัปโหลดไฟล์ p12 ใน yubikey ซึ่งมีคีย์ส่วนตัวของฉัน คีย์ผับของเซิร์ฟเวอร์และ CA

$ pkcs11-tool --test -- เข้าสู่ระบบ

การใช้สล็อต 0 กับโทเค็นปัจจุบัน (0x0)
เข้าสู่ระบบ "uid=r.beal,dc=ldap-..."
กรุณาป้อน PIN ของผู้ใช้: 
C_SeedRandom() และ C_GenerateRandom():
  ไม่สนับสนุนการเพาะ (C_SeedRandom)
  ดูเหมือนจะตกลง
สรุป:
  ฟังก์ชั่นย่อยทั้ง 4 ดูเหมือนจะใช้งานได้
  MD5: ตกลง
  SHA-1: ตกลง
  RIPEMD160: ตกลง
ลายเซ็น (ปัจจุบันสำหรับ RSA เท่านั้น)
  คีย์การทดสอบ 0 (คีย์ PIV AUTH) 
  ฟังก์ชั่นลายเซ็นทั้ง 4 ดูเหมือนจะใช้งานได้
  ทดสอบกลไกลายเซ็น:
    RSA-X-509: ตกลง
    RSA-PKCS: ตกลง
    SHA1-RSA-PKCS: ตกลง
    MD5-RSA-PKCS: ตกลง
    RIPEMD160-RSA-PKCS: ตกลง
    SHA256-RSA-PKCS: ตกลง
ตรวจสอบ (ปัจจุบันสำหรับ RSA เท่านั้น)
  คีย์การทดสอบ 0 (คีย์ PIV AUTH)
    RSA-X-509: ตกลง
    RSA-PKCS: ตกลง
    SHA1-RSA-PKCS: ตกลง
    MD5-RSA-PKCS: ตกลง
    RIPEMD160-RSA-PKCS: ตกลง
การถอดรหัส (ปัจจุบันสำหรับ RSA เท่านั้น)
  คีย์การทดสอบ 0 (คีย์ PIV AUTH)
    RSA-X-509: ตกลง
    RSA-PKCS: ตกลง
ไม่มีข้อผิดพลาด

ฉันเพิ่มส่วนนี้ในไฟล์ swanctl.conf :

ความลับ {
    โทเค็นยุบิเกะ {
        พิน = 123456
        ช่อง = 0
        handle = 1 # จากที่ฉันเข้าใจ นี่คือ crt ของฉัน
        module = ยูบิ-โมดูล
    }
}

และส่วนนี้ในไฟล์ /etc/strongswan.d/charon/pkcs11.conf :

ยูบิโมดูล {
    #path = /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] ยูบิโก (www.yubico.com): PKCS#11 PIV Library (SP-800-73) v2.21
00[CFG] พบโทเค็นในช่อง 'yubi-module':0 (Yubico YubiKey OTP+FIDO+CCID 00 00)
00[CFG] YubiKey PIV #16616360 (ยูบิโก (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 daemon

# ipsec รีสตาร์ท --nofork
กำลังเริ่มต้น strongSwan 5.9.3 IPsec [ตัวเริ่มต้น]...
00[DMN] การเริ่มต้น IKE charon daemon (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/ocscerts'
00[CFG] กำลังโหลดใบรับรองแอตทริบิวต์จาก '/etc/ipsec.d/acerts'
00[CFG] กำลังโหลด crls จาก '/etc/ipsec.d/crls'
00[CFG] กำลังโหลดความลับจาก '/etc/ipsec.secrets'
ปลั๊กอิน 00[CFG] sql: ไม่ได้ตั้งค่า URI ของฐานข้อมูล
00[CFG] การเปิดไฟล์ triplet /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 สุ่ม nonce x509 ข้อจำกัดการเพิกถอน pubkey pkcs1 pkcs7 pkcs8 pkcs12 pgp dnskey sshkey pem opensl fips-prf gmp curve25519 ตัวแทน chapoly xcbc cmac hmac ntru drlsgs curle curle newshop sqlite attr kernel-netlink แก้ไขซ็อกเก็ตบายพาสเริ่มต้น - lan connmark การคาดการณ์ farp stroke vici updown eap-identity eap-sim eap-aka eap-aka-3gpp2 eap-simaka-pseudonym 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 ms
11[CFG] ได้รับจังหวะ: เพิ่มการเชื่อมต่อ 'ทดสอบ'
11[CFG] โหลดใบรับรอง "C=FR, ST=Idf, L=City, O=company, OU=company, 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
     leftid=my_mail
     left=%defaultroute
     #leftcert=%สมาร์ทการ์ด
     อัตโนมัติ = เพิ่ม

ฉันใส่ CA ใน /etc/ipsec.d/cacerts/

บันทึก ipsec:

01[CFG] ได้รับจังหวะ: เริ่ม 'ทดสอบ'
09[IKE] เริ่มต้นการทดสอบ IKE_SA[1] ถึง 1.2.3.4
09[ENC] กำลังสร้างคำขอ IKE_SA_INIT 0 [ SA KE ไม่ใช่ 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] (1,000 ไบต์)
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 ไม่ใช่ 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 ไม่ใช่ 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 ส่ง Keep Lives
โฮสต์ระยะไกล 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] ของ 'compangny.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] กำหนดการตรวจสอบสิทธิ์ซ้ำในปี 10059
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 จาก 20278 วินาที การตรวจสอบสิทธิ์ซ้ำกำหนดไว้แล้วในปี 10059

ฉันเพิ่มไฟล์ conf ของฉัน:

leftsourceip=%การกำหนดค่า

เซิร์ฟเวอร์ VPN ของฉันได้รับการกำหนดค่าไม่ให้กำหนดเส้นทางการรับส่งข้อมูลทางอินเทอร์เน็ตของลูกค้า ดังนั้นฉันคิดว่ามันเป็นปัญหาการกำหนดค่าเครือข่ายในขณะนี้

cn flag
ทำไมคุณกำหนดค่าความลับใน swanctl.conf แต่เชื่อมต่อใน ipsec.conf (ไม่ใช่สาเหตุของปัญหาโดยตรง แต่ก็ยังแปลกอยู่) การกำหนดค่าคีย์ส่วนตัวไม่เพียงพอ คุณต้องมีคีย์สาธารณะ/ใบรับรองที่ตรงกับข้อมูลระบุตัวตนในเครื่องที่กำหนดค่าไว้ มีใบรับรองที่โหลดจากโทเค็น แต่ดูเหมือนว่าจะไม่น่าเชื่อถือ (ตามรายงานโดย PKCS#11) หากคุณไม่สามารถเปลี่ยนแปลงได้ คุณสามารถลองโหลดใบรับรองในการเชื่อมต่ออย่างชัดเจน
rBeal avatar
us flag
ฉันแก้ไขโพสต์ของฉัน การเชื่อมต่อจะใช้งานได้หรือไม่หากใบรับรองไม่น่าเชื่อถือ ฉันไม่สามารถหาสาเหตุที่มันไม่น่าเชื่อถือ ใบรับรองทั้งหมดสร้างขึ้นจากไฟร์วอลล์ของสตอร์มชิลด์ ดังนั้นฉันคิดว่าพวกเขาโอเค
cn flag
คุณสามารถอ้างอิงใบรับรองบนโทเค็นแทนการโหลดจากไฟล์ (โดยใช้ไวยากรณ์ `% สมาร์ทการ์ด`) และฉันอาจจะผิดจริง ๆ ข้างต้น การกำหนดค่าคีย์ของคุณใน swanctl.conf แทน ipsec.secrets อาจเป็นปัจจัยเพิ่มเติมที่ทำให้เกิดสิ่งนี้ เพราะฉันไม่เห็นคีย์ที่กำลังโหลดอยู่จริง (ซึ่งจะไม่เกิดขึ้นหาก `swanctl --load-creds` หรือ ` --load-all` ไม่เคยถูกเรียก (ซึ่งไม่ใช่กรณีที่คุณใช้ `ipsec (re)start`) ดังนั้นลองกำหนดค่าใน [ipsec.secrets](https://wiki.strongswan.org/ โครงการ/strongswan/wiki/PINsecret)
rBeal avatar
us flag
ขอบคุณ !! ตอนนี้ฉันมีปัญหาใหม่ ฉันแก้ไขโพสต์ของฉัน
rBeal avatar
us flag
ฉันตกลงที่จะมีการกำหนดค่าใหม่ทั้งหมด ฉันกำลังทำงานเพื่อทำความสะอาด ฉันจะหารหัสคีย์สำหรับไฟล์ ipsec.secrets ได้อย่างไร
cn flag
นั่นคือ `CKA_ID` สำหรับคีย์บนโทเค็น (สอดคล้องกับ _handle_ ใน swanctl.conf) การที่เซิร์ฟเวอร์ส่งคืนข้อผิดพลาด `TS_UNACCEPTABLE` อาจเป็นเพราะคุณไม่ได้กำหนดค่า `rightsubnet` กำหนดค่าเครือข่ายย่อยที่คุณต้องการเข้าถึง ใช้ `0.0.0.0/0` เพื่อขุดอุโมงค์ทุกอย่างหรือปล่อยให้ผู้ตอบกลับจำกัดให้แคบลงเหลือเท่าที่เคยกำหนดค่าไว้ หากเป็นไปได้ ให้ตรวจสอบบันทึกบนเซิร์ฟเวอร์เพื่อหาสาเหตุที่ส่งกลับข้อผิดพลาดนั้น
Score:0
ธง us

วิธีแก้ไขคือตั้งค่า rightsubnet เป็น 0.0.0.0/0

ขอบคุณ ecdsa !

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา