IPSec
معرفی IPSec
IPSec یا Internet Protocol security عبارت است از مجموعهای از چندین پروتکل که برای ایمنسازی پروتکل اینترنت در ارتباطات بوسیله احراز هویت و رمزگذاری در هربسته(packet) در یک سیر داده به کار میرود. IPSec بطور گسترده در تکنولوژی VPN جهت احراز هویت، محرمانگی، یکپارچگی و مدیریت کلید در شبکه های مبتنی بر IP، مورد استفاده قرار می گیرد. IPsec امنیت ارتباطات را در بطن شبکه با کمک سرویس های امن رمزنگاری برقرار می کند. برای عملکرد صحیح و کامل IPSec، هر دو طرف فرستنده و گیرنده باید یک کلید عمومی را به اشتراک بگذارند که بواسطه استفاده از پروتکل “مدیریت کلید” عملی می شود. این پروتکل به گیرنده این اجازه را می دهد تا یک کلید عمومی را بدست آورده و فرستنده را بر اساس امضای دیجیتال احراز هویت نماید. همچنین میتوان با استفاده از pre-shared-key یا همان کلید های از پیش به اشتراک گذاشته شده استفاده کرد . مزایایی که IPSec برای یک ارتباط به ارمغان می آورد، شامل موارد زیر می باشد:
محافظت از حمله replay
محرمانگی اطلاعات (رمزنگاری)
یکپارچکی اطلاعات
احراز منبع و منشاء اطلاعات
احراز هویت در لایه Network
نحوه پیکربندی
تونل IPSec در دو فاز تنظیم می شود phase1 مربوط به تنظیمات IKE و phase2 مربوط به تنظیمات ipsec است . در ادامه با ذکر یک مثال تنظیمات را بیشتر توضیح می دهیم . قبل از آن توضیح مختصری در مورد بخش های مختلف ike ارایه می دهیم :
تنظیمات IKE (phase 1)
IKEv2( Internet Key Exchange version 2) پروتکلی است برای راه اندازی و تشکیل SA که جهت استفاده در تونل ipsec به کار گرفته می شود
IKEv2 dpd
dead peer detection . زمانی که بعد از آن طرف مقابل حذف شده و فرآیند ike بین دو طرف مجددا راه اندازی می شود
crypto ikev2 dpd (1-3600) [(1-100)]
عدد اول طول عمر را مشخص می کند و پارامتر دوم حداکثر تعداد تلاش ها برای حذف طرف مقابل را مشخص می کند
IKEv2 proposal
proposal مجموعه ای از الگوریتم های رمزنگاری برای تشکیل SA است
ساخت یک پروپوزال ike با نام IKEPOSAL
soodar(config)#crypto ikev2 proposal IKEPOSAL
مشخص کردن الگوریتم های رمز نگاری در پروپوزال
soodar(config-ikev2-proposal)# encryption ALGORITHM
soodar(config-ikev2-proposal)# integrity ALGORITHM
مشخص کردن یک گروه به عنوان گروه Diffie-Hellman
soodar(config-ikev2-proposal)# group GROUP
مثال :
soodar(config)# crypto ikev2 proposal proposal-exemplary
soodar(config-ikev2-proposal)# encryption aes-192
soodar(config-ikev2-proposal)# integrity sha1-96
soodar(config-ikev2-proposal)# group 14
IKEv2 keyring
همانطور که از این نام پیداست، مجموعهای از PSKها( Pre-Shared Key) اینجا قرار داده میشود. این PSKها با بر اساس هویت( Identity) در صورت تنظیم شدن IKE برای استفاده از PSK مورد استفاده قرار میگیرد.
ساخت یک keyring جدید با نام IKEKEYRING
soodar(config)# crypto ikev2 keyring IKEKEYRING
ساخت peer جدید در keyring به نام PEER
soodar(config-ikev2-keyring)# peer PEER
تنظیم آدرس شبکه peer
soodar(config-ikev2-keyring-peer)# address <A.B.C.D|X:X::X:X>
تنظیم psk برای احراز هویت peer
soodar(config-ikev2-keyring-peer)# pre-shared-key LINE
استفاده از یک آدرس به عنوان peer id . این id در زمان برقراری نشست ike بین دو طرف استفاده می شود.
soodar(config-ikev2-keyring-peer)# identity address <A.B.C.D|X:X::X:X>
استفاده از یک FQDN به عنوان peer id . این id در زمان برقراری نشست ike بین دو طرف استفاده می شود.
soodar(config-ikev2-keyring-peer)# identity fqdn FQDN
استفاده از یک EMAIL آدرس به عنوان peer id . این id در زمان برقراری نشست ike بین دو طرف استفاده می شود.
soodar(config-ikev2-keyring-peer)# identity email MAIL
مثال:
soodar(config)# crypto ikev2 keyring keyring-1
soodar(config-ikev2-keyring)# peer PC-1
soodar(config-ikev2-keyring-peer)# address 192.168.1.100
soodar(config-ikev2-keyring-peer)# identity email soodar2@soodar.ir
soodar(config-ikev2-keyring-peer)# pre-shared-key 123@321
soodar(config-ikev2-keyring)# peer PC-2
soodar(config-ikev2-keyring-peer)# address 192.168.1.20
soodar(config-ikev2-keyring-peer)# identity address 1.1.1.1
soodar(config-ikev2-keyring-peer)# pre-shared-key ITSAHARDPASSWD!!
IKEv2 profile
profile بخش اصلی ike می باشد . تعریف یک آدرس به عنوان id محلی . در نشست ike توسط این id به طرف های مقابل شناسانده می شود
soodar(config-ikev2-profile)# identity local address <A.B.C.D|X:X::X:X>
تعریف یک FQDN به عنوان id محلی . در نشست ike توسط این id به طرف های مقابل شناسانده می شود
soodar(config-ikev2-profile)# identity local fqdn FQDN
تعریف یک EMAIL به عنوان id محلی . در نشست ike توسط این id به طرف های مقابل شناسانده می شود
soodar(config-ikev2-profile)# identity local email MAIL
id طرف مقابل را به شکل address وارد کنید بقیه اطلاعات از keyring استخراج خواهد شد .
soodar(config-ikev2-profile)# match identity remote address <A.B.C.D|X:X::X:X>
id طرف مقابل را به شکل FQDN وارد کنید بقیه اطلاعات از keyring استخراج خواهد شد .
soodar(config-ikev2-profile)# match identity remote fqdn FQDN
id طرف مقابل را به شکل EMAIL وارد کنید بقیه اطلاعات از keyring استخراج خواهد شد .
soodar(config-ikev2-profile)# match identity remote email EMAIL
مشخص کردن keyring برای پیداکردن peer مربوطه برای برقراری نشست ike
soodar(config-ikev2-profile)# keyring local IKEKEYRING
استفاده از IKEPOSAL برای تشکیل IKEv2 SA
soodar(config-ikev2-profile)# proposal IKEPOSAL
مثال :
soodar(config)# crypto ikev2 profile VPN
soodar(config-ikev2-profile)# identity local address 192.168.1.1
soodar(config-ikev2-profile)# match identity remote soodar1@soodar.ir
soodar(config-ikev2-profile)# keyring local keyring-1
soodar(config-ikev2-profile)# proposal proposal-exemplary
پس از تنظیم ike می توان آن را در پروفایل ipsec استفاده کرد : مثال:
soodar(config)# crypto ipsec profile ipsec-Site2-profile
soodar(ipsec-profile)# set transform-set ipsec-Site2-TS
soodar(ipsec-profile)# set ikev2-profile VPN
تنظیمات IPSec (phase 2)
تنظیمات ipsec شامل دو قسمت است . یکی تنظیم Transform Set و بخش دوم تنظیم IPSec profile :
IPSec Transform-set
یک TS، شامل تنظیمات پایهای برای برقراری ارتباط بین دو سر IPSec میباشد که در واقع شامل تنظیمات الگوریتمهای رمزنگاری می باشد.
نکته
اگر transform-set تنظیم نشود ، از transform-set پیش فرض استفاده می شود . که یک سری الگوریتم های رمزنگاری را به طرف مقابل پیشنهاد می کند و در صورت توافق طرفین تونل وصل می شود .
IPSec Profile
در این پروفایل TS تنظیم شده برای تونل انتخاب می شود و همچنین ike profile که قبلا تنظیم شده برای برقرای ارتباط ike انتخاب می شود . پس از آن این پروفایل به تونل اعمال می شود و تونل با استفاده از ipsec محافظت شده و ترافیک آن رمز شده انتقال می باید .
نکته
در روتر سودار حالت تونل برای رمز شدن ترافیک پشتیبانی می شود و حالت استفاده از crypto-map که ترافیک خاصی برای رمز شدن انتخاب می شود فعلا پشتیبانی نمی شود .
مثال عملی با استفاده از PSK
حال فرض کنید قصد داریم تونل GRE که در بخش کارگاه gre اضافه کردیم را با IPsec حفاظت کرده و رمز کنیم . ابتدا به تنظیم روتر Soodar1 میپردازیم:
تنظیمات ike (phase 1)
soodar1 ike proposal
soodar1(config)# crypto ikev2 proposal IKE-PP
soodar1(config-ikev2-proposal)# encryption aes-192
soodar1(config-ikev2-proposal)# integrity sha1-96
soodar1(config-ikev2-proposal)# group 14
soodar1 ike keyring
soodar1(config)# crypto ikev2 keyring KEYRING-1
soodar1(config-ikev2-keyring)# peer SOODAR2
soodar1(config-ikev2-keyring-peer)# address 200.1.2.2
soodar1(config-ikev2-keyring-peer)# identity address 222.2.2.2
soodar1(config-ikev2-keyring-peer)# pre-shared-key 123@321
soodar1 ike profile
soodar1(config)# crypto ikev2 profile VPN
soodar1(config-ikev2-profile)# identity local address 222.1.1.1
soodar1(config-ikev2-profile)# match identity remote address 222.2.2.2
soodar1(config-ikev2-profile)# keyring local KEYRING-1
soodar1(config-ikev2-profile)# proposal IKE-PP
تنظیمات ipsec (phase 2)
soodar1 Transform-set
soodar1(config)# crypto ipsec transform-set IPSEC-SITE1-TS esp hmac sha-256 cipher aes-256
soodar1(cfg-crypto-trans)# mode transport
soodar1 ipsec profile
soodar1(config)# crypto ipsec profile IPSEC-SITE1-PROFILE
soodar1(ipsec-profile)# set transform-set IPSEC-SITE1-TS
soodar1(ipsec-profile)# set ikev2-profile VPN
ساخت تونل در soodar1
soodar1(config)# interface tunnel 12
soodar1(config-if)# tunnel source 200.1.2.1
soodar1(config-if)# tunnel destination 200.1.2.2
soodar1(config-if)# tunnel protection ipsec profile IPSEC-SITE1-PROFILE
soodar1(config-if)# ip address 10.0.0.12/32
اضافه کردن route از تونل
soodar1(config)# ip route 2.1.1.0/24 tunnel12
تنظیمات در soodar1 به پایان رسید . تنظیمات در soodar2 نیز به همین شکل است .
soodar2 ike proposal
soodar2(config)# crypto ikev2 proposal IKE-PP-2
soodar2(config-ikev2-proposal)# encryption aes-192
soodar2(config-ikev2-proposal)# integrity sha1-96
soodar2(config-ikev2-proposal)# group 14
soodar2 ike keyring
soodar2(config)# crypto ikev2 keyring KEYRING-2
soodar2(config-ikev2-keyring)# peer SOODAR1
soodar2(config-ikev2-keyring-peer)# address 200.1.2.1
soodar2(config-ikev2-keyring-peer)# identity address 222.1.1.1
soodar2(config-ikev2-keyring-peer)# pre-shared-key 123@321
soodar2 ike keyring
soodar2(config)# crypto ikev2 profile VPN-2
soodar2(config-ikev2-profile)# identity local address 222.2.2.2
soodar2(config-ikev2-profile)# match identity remote address 222.1.1.1
soodar2(config-ikev2-profile)# keyring local KEYRING-2
soodar2(config-ikev2-profile)# proposal IKE-PP-2
soodar2 Transform-set
soodar2(config)# crypto ipsec transform-set IPSEC-SITE2-TS esp hmac sha-256 cipher aes-256
soodar2(cfg-crypto-trans)# mode transport
soodar2 ipsec profile
soodar2(config)# crypto ipsec profile IPSEC-SITE2-PROFILE
soodar2(ipsec-profile)# set transform-set IPSEC-SITE2-TS
soodar2(ipsec-profile)# set ikev2-profile VPN-2
ساخت تونل در soodar2
soodar2(config)# interface tunnel 21
soodar2(config-if)# tunnel source 200.1.2.2
soodar2(config-if)# tunnel destination 200.1.2.1
soodar2(config-if)# tunnel protection ipsec profile IPSEC-SIT2-PROFILE
soodar2(config-if)# ip address 10.0.0.21/32
اضافه کردن route از تونل
soodar2(config)# ip route 1.1.1.0/24 tunnel21
مشاهده SA
soodar# show crypto ikev2 sa
soodar# show crypto ipsec sa
بررسی عملکرد تونل
اولا باید ارتباط تونل gre برقرار باشد و نود های 1.1.1.10 و 2.1.1.10 باید یکدیگر را ببینند در ثانی با بررسی ترافیک خروجی روی تونل gre باید مشخص شود که ترافیک به صورت رمز شده و با استفاده از ipsec در حال انتقال است .
مثال عملی با استفاده از RSA
همان سناریو قبل را مجددا در نظر بگیرید :
در ابتدا لازم است که PKI در هر دو روتر پیکربندی شود. با فرض وجود یک سرور خارجی امن که ادمین به آن دسترسی دارد و کلید CA در آن قرار دارد و میتواند با آن گواهی صادر کند، در روتر soodar1 یک کلید RSA به عنوان کلید خصوصی خود و trustpoint ایجاد مینماییم:
soodar1(config)# crypto key generate rsa label soodar1-key
soodar1(config)# crypto pki trustpoint soodar1-cert
در تنظیمات Trustpoint، اطلاعات مربوط به گواهینامه روتر soodar1 را تنظیم میکنیم:
soodar1(ca-trustpoint)# rsakeypair soodar1-key
soodar1(ca-trustpoint)# subject-name C=IR, O=Soodar, CN=s1.local.net
soodar1(ca-trustpoint)# subject-alt-name soodar1.local.net
soodar1(ca-trustpoint)# subject-alt-name soodar1.afta.net
سپس این TP را Authenticate کرده و CA Certificate سرور خارجی را به روتر میافزاییم:
soodar1(config)# crypto pki authenticate soodar1-cert
پس از اینکه CA به TP افزوده شد، میتوانیم یک CSR ایجاد نماییم:
soodar1(config)# crypto pki enroll soodar1-cert
خروجی دستور را کپی کرده و توسط سرور خارجی CA گواهینامه را امضا و صادر نمایید( خروجی به فرمت PKCS#10 میباشد). گواهینامه امضا شده را به دستگاه وارد نمایید:
soodar1(config)# crypto pki import soodar1-cert certificate
نکته: اگر گواهینامهی هر دو روتر soodar1 و soodar2 توسط یک CA امضا میشوند، نیازی به وارد کردن CA دیگری نیست. اما اگر روتر soodar2 از CA دیگری استفاده میکند، تنها کافیست این CA را به روتر به روش زیر اضافه کنیم:
soodar1(config)# crypto pki trustpoint soodar2-ca
soodar1(config)# crypto pki authenticate soodar2-ca
مراحل بالا را نیز برای روتر soodar2 انجام میدهیم:
soodar2(config)# crypto key generate rsa label soodar2-key
soodar2(config)# crypto pki trustpoint soodar2-cert
soodar2(ca-trustpoint)# rsakeypair soodar2-key
soodar2(ca-trustpoint)# subject-name C=IR, O=Soodar, CN=s2.local.net
soodar2(ca-trustpoint)# subject-alt-name soodar2.local.net
soodar2(ca-trustpoint)# subject-alt-name soodar2.afta.net
soodar2(config)# crypto pki enroll soodar2-cert
soodar2(config)# crypto pki import soodar2-cert certificate
و در صورت لازم، CA مربوط به گواهینامه soodar1 را می افزاییم:
soodar2(config)# crypto pki trustpoint soodar1-ca
soodar2(config)# crypto pki authenticate soodar1-ca
حال در روتر soodar1 تنظیمات IKEv2 را اعمال میکنیم. در ابتدا یک پروپوزال تعریف میکنیم:
soodar1(config)# crypto ikev2 proposal ikeProposal
soodar1(config-ikev2-proposal)# integrity sha-384
soodar1(config-ikev2-proposal)# encryption aes
soodar1(config-ikev2-proposal)# group 28
سپس پروفایل IKEv2 را میسازیم:
soodar1(config)# crypto ikev2 profile ikeProfile
soodar1(config-ikev2-profile)# authentication local rsa-sig
soodar1(config-ikev2-profile)# authentication remote rsa-sig
soodar1(config-ikev2-profile)# proposal ikeProposal
با توجه به اینکه در گواهینامهی کاربردیای که برای روتر soodar1 صادر شده است، در بخش SAN آدرسهای soodar1.local.net و soodar1.afta.net ذکر شده است، نیاز است که حتما از یکی از این آدرسها به عنوان Local Identity استفاده گردد. و همین قاعده برای Remote identity نیز برقرار است:
soodar1(config-ikev2-profile)# identity local fqdn soodar1.local.net
soodar1(config-ikev2-profile)# match identity remote fqdn soodar2.local.net
اکنون Transform Set و IPSec Profile را تشکیل میدهیم:
soodar1(config)# crypto ipsec transform-set ts esp hmac sha-96 cipher aes
soodar1(cfg-crypto-trans)# mode transport
soodar1(config)# crypto ipsec profile ipsecProfile
soodar1(ipsec-profile)# set transform-set ts
soodar1(ipsec-profile)# set ikev2-profile ikeProfile
در آخرین مرحله نیاز است یک تونل بین دو دستگاه ساخته شود و توسط این پروفایل IPSec محافظت گردد. سپس ترافیک مورد نظر را از طریق این تونل Route کرده تا مطمئن شویم ارتباط امن صورت میپذیرد:
soodar1(config)# interface tunnel 10
soodar1(config-if)# tunnel source 200.1.2.1
soodar1(config-if)# tunnel destination 200.1.2.2
soodar1(config-if)# tunnel protection ipsec profile ipsecProfile
soodar1(config-if)# ip address 10.1.1.1/32
soodar1(config)# ip route 2.1.1.0/24 tunnel10
متناظر این دستورات در روتر دیگر نیز انجام میگیرد:
soodar2(config)# crypto ikev2 proposal ikeProposal
soodar2(config-ikev2-proposal)# integrity sha-384
soodar2(config-ikev2-proposal)# encryption aes
soodar2(config-ikev2-proposal)# group 28
soodar2(config)# crypto ikev2 profile ikeProfile
soodar2(config-ikev2-profile)# authentication local rsa-sig
soodar2(config-ikev2-profile)# authentication remote rsa-sig
soodar2(config-ikev2-profile)# proposal ikeProposal
soodar2(config-ikev2-profile)# identity local fqdn soodar2.local.net
soodar2(config-ikev2-profile)# match identity remote fqdn soodar1.local.net
soodar2(config)# crypto ipsec transform-set ts esp hmac sha-96 cipher aes
soodar2(cfg-crypto-trans)# mode transport
soodar2(config)# crypto ipsec profile ipsecProfile
soodar2(ipsec-profile)# set transform-set ts
soodar2(ipsec-profile)# set ikev2-profile ikeProfile
soodar2(config)# interface tunnel 10
soodar2(config-if)# tunnel source 200.1.2.2
soodar2(config-if)# tunnel destination 200.1.2.1
soodar2(config-if)# tunnel protection ipsec profile ipsecProfile
soodar2(config-if)# ip address 10.1.1.2/32
soodar2(config)# ip route 1.1.1.0/24 tunnel10
جال باید ارتباط بین دو نود 1.1.1.10 و 2.1.1.10 برقرار باشد و ترافیک بین دو روتر از طریق تونل و به صورت رمز شده انتقال یابد
فعال کردن log های IPSec
با دستور زیر می توانید Log های مربوط به ipsec را فعال کنید:
soodar# debug ipsec event
PKI
در ادامه توضیحاتی در مورد کلید های pki در روتر ارایه می دهیم :
ایجاد کلید خصوصی: کلید خصوصی برای ایجاد « درخواست امضای گواهی» ( Certificate Signing Request) و امضای دیجیتال به کار میرود. دستور زیر کلیدی با نام NAME را میسازد:
soodar(config)# crypto key generate rsa label <NAME> modulus (2048-4096)
در صورتی که طول کلید مشخص نگردیده باشد، به طور پیش فرض طول 2048 برای کلید در نظر گرفته میشود. وارد کردن یک CA برای وارد کردن CA ما ابتدا نیاز به ساختن یک trustpoint داریم. یک trustpoint همان CA هست که میتواند یک Certificate امضا شده توسط همان CA را نیز شامل شود( مانند مفهوم Trustpoint در روترهای سیسکو). این CA میتواند یک Self-signed CA باشد.
نکته: تمامی ورودیها/خروجیها( اعم از CA، Certificate، CSR و …) به فرمت PEM میباشد.
برای ساختن یک trustpoint با نام TP میتوان از دستور زیر استفاده نمود:
soodar(config)# crypto pki trustpoint TP
پس از ساختن یک trustpoint در ابتدا نیاز است این trustpoint را authenticate کرد و یک CA صحیح را به آن نسبت داد( وارد کرد). اگر یک trustpoint به یک CA صحیح منسوب نباشد و authenticate نشده باشد، نمیتوان با آن گواهی ای را وارد کرد.
با دستور زیر میتوان یک trustpoint را authenticate کرد:
soodar(config)# crypto pki trustpoint TP
بطور مثال:
soodar(config)# crypto pki trustpoint root-ca
soodar(config)# crypto pki authenticate root-ca
Enter the base 64 encoded CA certificate
End with a blank line or the word "quit" on a line by itself
-----BEGIN CERTIFICATE-----
MIIDSzCCAjOgAwIBAgIIQMT8Qv03sXYwDQYJKoZIhvcNAQELBQAwNTELMAkGA1UE
BhMCSVIxEzARBgNVBAoTClRlbXAgQ29ycC4xETAPBgNVBAMTCHRlbXAuY29tMB4X
DTIxMDEyMDExNDIzNFoXDTI0MDEyMDExNDIzNFowNTELMAkGA1UEBhMCSVIxEzAR
BgNVBAoTClRlbXAgQ29ycC4xETAPBgNVBAMTCHRlbXAuY29tMIIBIjANBgkqhkiG
9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy1KPgdCS6BB7PCdeggnsf6NjW4KBxeG6H18R
lOHYoTBMlR3QrvCrpgoZv3DtGR8T6Ch0/HdL1GdFJ7RcJqZPbaxdepqI08SZG4VD
CcZbIOdCNgKWD+jaO0vgyfcK2cXKY70bdyUuJLwNvSvPEPhzH1UNx7kfBdvGn2Vg
s/XyYhsn3xc6ioODT+HUAAd2WvBIOzd+RUo0yANJRKbPnLPgpNEiE1wG6Bj6orjR
ajnC8SYt5XGqD0DX7JGi7bELHw0JGdDk1acr9GQyjwVobDYCKDTuW4ELDsS+2GIK
E76rmlAGrJGy3po2itVbmMprhbTl3EOpxPzl78qkG/r0i4lUXQIDAQABo18wXTAP
BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU7CsuL8vJ
o0kfANvQjVQkaR4K/WQwGwYDVR0RBBQwEoIQb3RoZXIuZG9tYWluLmNvbTANBgkq
hkiG9w0BAQsFAAOCAQEAHe8iOUjW8+BNBCfyyfcQOokd7UuK/0DE40wEXVRpMzyv
4IoLNnz5SmWBZo5WdtkIUfGMc9ll8uRsBpIcqHOR8ZSRkjswtOFn+C5KxNXum1pQ
cLmNpxn2ecsr2K2qW6IRfig8cQwzpFe3c59zFf13gKdr6g0B+lpx/hMBdhyaUn6A
9uXtvgeCzAqdJehpo12IKNnYeL+GrfHcFe7R7BRLD2XzoAgjFR48w24h3FbrxM8I
1jqEwbvnGT7FECGZbyKGBEM/dY1gbVD19GTJlaZ8z3HrHdaRFvCYgAqFLTVtU8Q+
lq+EWiCSMRlPPx1OiLDddbxRw2JIjdF7XIsU3WGhtw==
-----END CERTIFICATE-----
Updating certificates in /etc/ssl/certs...
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
soodar# show crypto pki certificate root-ca
Trustpoint: root-ca
CA
subject: "C=IR, O=Temp Corp., CN=temp.com
issuer: "C=IR, O=Temp Corp., CN=temp.com
validity: not before Jan 20 15:12:34 2021, not valid yet (valid in 58 seconds)
not after Jan 20 15:12:34 2024, ok (expires in 1095 days)
serial: 40:c4:fc:42:fd:37:b1:76
altNames: other.domain.com
flags: CA CRLSign self-signed
subjkeyId: ec:2b:2e:2f:cb:c9:a3:49:1f:00:db:d0:8d:54:24:69:1e:0a:fd:64
pubkey: RSA 2048 bits
keyid: cf:d8:04:82:62:b9:f1:a9:84:75:56:e7:1b:5b:ac:4a:c8:ba:ae:21
subjkey: ec:2b:2e:2f:cb:c9:a3:49:1f:00:db:d0:8d:54:24:69:1e:0a:fd:64
Fingerprint: 954E9105EEE221C7BCDF351BBA0184E950F82C75
ایجاد یک Certificate و CSR: کاربر میتواند یک « درخواست امضای گواهی» را ایجاد کرده و گواهی امضا شده را به دستگاه وارد کند. برای این کار، trustpoint در تنظیمات خود باید موارد زیر را داشته باشد: یک SN برای گواهی( و به شکل دلبخواه، تعدادی SAN) یک جفت کلید RSA برای امضای CSR یک روش enrollment. در حال حاضر تنها روش enrollment از طریق ترمینال و به شیوه کپی/پیست میباشد و میتوان تنظیم نکرد.
پس از تنظیم کردن trustpoint یک CSR میتواند ایجاد شود. CSR ایجاد شده به فرمت PKCS#10 میباشد و بر روی ترمینال( با توجه به روش enrollment که در حال حاضر فقط از طریق ترمینال میباشد) چاپ میشود. کاربر میتواند CSR چاپ شده را کپی کرده و با کلید خصوصی CA امضا کرده و Certificate امضا شده را به دستگاه وارد کند.
نکته: اگر trustpoint از قبل authenticate نشده باشد، نمیتوان Certificate امضا شده را به دستگاه وارد کرد. چرا که نیاز است حتما این گواهی با CA مرتبط با trustpoint امضا شده باشد.
دستورات زیر برای تنظیم trustpoint میباشد:
soodar(ca-trustpoint)# subject-name <SN LINE>
soodar(ca-trustpoint)# subject-alt-name <SAN>
soodar(ca-trustpoint)# rsakeypair <KEY>
برای ایجاد یک CSR باید trustpoint را enroll کنیم:
soodar(config)# crypto pki enroll <TP>
دستور بالا CSR را ایجاد میکند و بر روی صفحه نمایش میدهد.
پس از امضا شدن CSR توسط CA و ایجاد گواهی معتبر، میتوان این گواهی را به دستگاه افزود:
soodar(config)# crypto pki import <TP> certificate
بطور مثال:
n1(config)# crypto key generate rsa label mycert-key modulus 2048
n1# show crypto key mycert-key
Keypair Label: mycert-key
Algorithm: RSA
Modulus: 2048 bits
Subject key: fcc893035eda7e736d0a612bad1d000612c87724
Key ID: E5611192FEAD3FDFA877A0BAC5F336480A8C2D97
n1(config)# crypto pki trustpoint mycert
n1(ca-trustpoint)# subject-name C=IR, O=My Org, CN=my.org
n1(ca-trustpoint)# subject-alt-name other.my.org
n1(ca-trustpoint)# subject-alt-name other2.my.com
n1(ca-trustpoint)# rsakeypair mycert-key
n1(config)# crypto pki authenticate mycert
Enter the base 64 encoded CA certificate
End with a blank line or the word "quit" on a line by itself
-----BEGIN CERTIFICATE-----
MIIDODCCAiCgAwIBAgIIM7DVFqEvgxgwDQYJKoZIhvcNAQELBQAwOjELMAkGA1UE
BhMCQ0gxEzARBgNVBAoTCnN0cm9uZ1N3YW4xFjAUBgNVBAMTDXN0cm9uZ1N3YW4g
Q0EwHhcNMjAxMTExMDk1OTEzWhcNMjMxMTExMDk1OTEzWjA6MQswCQYDVQQGEwJD
SDETMBEGA1UEChMKc3Ryb25nU3dhbjEWMBQGA1UEAxMNc3Ryb25nU3dhbiBDQTCC
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANjhd9ZFsCS4O3TcnXWFy/cr
wXnVCxev6g5XecHG0A+jaOS6MyJowjJU/CY5S8/LWKIBlKFhdswDT0LaPodnKw8e
RVGwAfQSYb8OymUeHByzxxfhqcCjYu0qWdb2Tf9yVadkt//qW5n2F78j3prFlZ4o
pbG1sLhACY+729iJxB7dg5DKXxECBzSiMo2dScZpQKuADiev4g7TmEH0u3MUa9zU
CzIhoqjzEJ1wF4YC7Y6BZxQU4c04RZGctaOmKRUT0NfVGbqseJHsJVZSCDFud/ls
48tDmQ08GULFNFlFAeGWcUnLle2sorsB+zjfQrJQJBtE/RuoKZ3ODK+ZwGH8wHEC
AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
BBYEFNET3aeJu4082kUYI8TpeBK4w61sMA0GCSqGSIb3DQEBCwUAA4IBAQCB2ciJ
D197+CIwL/DveAJf7Bt0cMD2lPwY4hsHUyHridX2B/t6EMOOujWPouSeBYjLBz7s
akHwh3G9Yx4wlS+k+du5AbkQHMnYigeO4rul+tCg7FzouxFtKEcD6T707DnSEkP+
iA9mLeKxCK3P4vGY2H9x6McqZ1aM55xmdEbvD3QhUMLePBk4aMVKyOr4yWRQgUPB
oBqRVSEvthOyXEWtPkqxY72O/5IQmHDSncBP/D+wiC2wQsYQZhmDoN6d74OqkcBr
HMWDCUM1b8RfVBTeIKvkvQ14BgwPveO99E+P6rrNhdxRA8BwmnNyMvrd81Z1FDU/
J+XkIuPRfz33vO00
-----END CERTIFICATE-----
Updating certificates in /etc/ssl/certs...
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
n1(ca-trustpoint)# enrollment terminal pem
n1(config)# crypto pki enroll mycert
-----BEGIN CERTIFICATE REQUEST-----
MIICrTCCAZUCAQAwLzELMAkGA1UEBhMCSVIxDzANBgNVBAoTBk15IE9yZzEPMA0G
A1UEAxMGbXkub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtvWm
Xi+CtKrJndPw09hPOnTO8DSDIJqi3GdcNDVRcdKb/FB+/C++Vyb2vOLNICxCmRJH
RnoZKPnWqRHWyHeVCNr+Da+bFYHXd4LyaZtCzEoUrmULMyBWGmbUfUlfFpOCa4yq
28qV1BjYXEm93X56XIaT/WpqXELihJC2nnBPxhkLHA80fLmQPZdOzytrjeJt1Rvn
I/PpI+OzEN9/pUvGLv29wfzUN2T9WGdIY/SJuyafQ2972juRA2OTTSsMSOxM4fuj
Mk116RixYvHCd454gehPKOqMUHbXKZ7tQXPaDFtiQIgNqBMz4AlT40Wn3GsODV8Y
AtJ9UOvhmMW1iTHC2wIDAQABoDkwNwYJKoZIhvcNAQkOMSowKDAmBgNVHREEHzAd
ggxvdGhlci5teS5vcmeCDW90aGVyMi5teS5jb20wDQYJKoZIhvcNAQELBQADggEB
AKwvB+bPTMpU2t3HE6CA0mLA9ufc9EqWx2YCTyddTJ8Qp7xhdXywzB64R5Um/mqy
x7lMEyS69pZzTMivm28piIEplSdjKSiHmRpVZsXGWvhpz1alqA6h5IaWlm9s3Bga
YKBmaC0uEsuhXnAxFBPtbwWSaGN0uD5kKTkwZXMxKv4gVkTbrdZfZ2uJR2CiZu1q
yb7u47MeZF4xfcnvFZCuUjlLmpFXMLXjYuNywJP6U/i1DpSG07mDYcnEfS9Ku/o/
gdNBahSspRtBVOx4QtnN4bGZ0MDEn5cEBuWcN4dNbE30dn70NKaNe1DhdKQ/lUxQ
qyIP+5tc2i8GoJsL9wyWJIo=
-----END CERTIFICATE REQUEST-----
n1(config)# crypto pki import mycert certificate
Enter the base 64 encoded CA certificate
End with a blank line or the word "quit" on a line by itself
-----BEGIN CERTIFICATE-----
MIIDMTCCAhmgAwIBAgIIVmyRIVfPsKowDQYJKoZIhvcNAQELBQAwNTELMAkGA1UE
BhMCSVIxEzARBgNVBAoTClRlbXAgQ29ycC4xETAPBgNVBAMTCHRlbXAuY29tMB4X
DTIxMDEyMDExNDgzNloXDTI0MDEyMDExNDgzNlowLzELMAkGA1UEBhMCSVIxDzAN
BgNVBAoTBk15IE9yZzEPMA0GA1UEAxMGbXkub3JnMIIBIjANBgkqhkiG9w0BAQEF
AAOCAQ8AMIIBCgKCAQEAtvWmXi+CtKrJndPw09hPOnTO8DSDIJqi3GdcNDVRcdKb
/FB+/C++Vyb2vOLNICxCmRJHRnoZKPnWqRHWyHeVCNr+Da+bFYHXd4LyaZtCzEoU
rmULMyBWGmbUfUlfFpOCa4yq28qV1BjYXEm93X56XIaT/WpqXELihJC2nnBPxhkL
HA80fLmQPZdOzytrjeJt1RvnI/PpI+OzEN9/pUvGLv29wfzUN2T9WGdIY/SJuyaf
Q2972juRA2OTTSsMSOxM4fujMk116RixYvHCd454gehPKOqMUHbXKZ7tQXPaDFti
QIgNqBMz4AlT40Wn3GsODV8YAtJ9UOvhmMW1iTHC2wIDAQABo0swSTAfBgNVHSME
GDAWgBTsKy4vy8mjSR8A29CNVCRpHgr9ZDAmBgNVHREEHzAdggxvdGhlci5teS5v
cmeCDW90aGVyMi5teS5jb20wDQYJKoZIhvcNAQELBQADggEBAGbt3R0FyA48FWUh
eoud1zh6ujrg0PgFjOhAMnWaln8nXdhMjJJvOI/MZtcyl7fghXr1Asr2M9I3KMxh
BbBefCci5+94g+QucP/R0v5/fzFpiV8gRYXD8o7UWyYanQG5SUyTCdpR5vXxVbEW
FXp3Yk1HBYXDe09AK9AGwRVFHTkaaPze8U5FyJpbrjDZuD/cbkN4lFn+lw49JahO
cVqYXyY84rHjvbq98081NsittSa4QUqBNo8nUXYj+yLuNiV39Zh1pWzl/kugy0yR
mvrqC3irZGXeJbSLDaAT1LdJhiu2Axc7EjwKxcNK+GiXyN/B/7JJrWLL0u6xaA9L
ezbvqQw=
-----END CERTIFICATE-----
Installed successfully
n1# show crypto pki certificate mycert
Trustpoint: n1Cert
CA:
subject: "C=IR, O=Temp Corp., CN=temp.com"
issuer: "C=IR, O=Temp Corp., CN=temp.com"
validity: not before Jan 20 15:12:34 2021, ok
not after Jan 20 15:12:34 2024, ok (expires in 1094 days)
serial: 40:c4:fc:42:fd:37:b1:76
altNames: other.domain.com
flags: CA CRLSign self-signed
subjkeyId: ec:2b:2e:2f:cb:c9:a3:49:1f:00:db:d0:8d:54:24:69:1e:0a:fd:64
pubkey: RSA 2048 bits
keyid: cf:d8:04:82:62:b9:f1:a9:84:75:56:e7:1b:5b:ac:4a:c8:ba:ae:21
subjkey: ec:2b:2e:2f:cb:c9:a3:49:1f:00:db:d0:8d:54:24:69:1e:0a:fd:64
Fingerprint: 954E9105EEE221C7BCDF351BBA0184E950F82C75
General Purpose Certificate:
subject: "C=IR, O=My Org, CN=my.org"
issuer: "C=IR, O=Temp Corp., CN=temp.com"
validity: not before Jan 20 15:18:36 2021, ok
not after Jan 20 15:18:36 2024, ok (expires in 1094 days)
serial: 56:6c:91:21:57:cf:b0:aa
altNames: other.my.org, other2.my.com
flags:
authkeyId: ec:2b:2e:2f:cb:c9:a3:49:1f:00:db:d0:8d:54:24:69:1e:0a:fd:64
subjkeyId: fc:c8:93:03:5e:da:7e:73:6d:0a:61:2b:ad:1d:00:06:12:c8:77:24
pubkey: RSA 2048 bits
keyid: e5:61:11:92:fe:ad:3f:df:a8:77:a0:ba:c5:f3:36:48:0a:8c:2d:97
subjkey: fc:c8:93:03:5e:da:7e:73:6d:0a:61:2b:ad:1d:00:06:12:c8:77:24
Keypair: mycert-key
Fingerprint: D51636591648DBDE21FEEFA4C6DF4B38A96502B5
حذف کلید خصوصی: کاربر میتواند کلیدهای بدون استفاده را حذف کند. حذف کلیدها به شکل امن ابتدا با صفر کردن محتوای کلید در حافظه و سپس حذف فایل انجام میگردد.
soodar(config)# crypto key zeroize <RSAKEY>
soodar(config)# no crypto pki trustpoint <TP>
توجه
۱. حذف کردن یک کلید خصوصی ممکن است باعث از کار افتادن Certificate هایی شود. وظیفه کاربر است که از بی خطر بودن این حذف اطمینان حاصل کند.
۲. کاربر میتواند یک Trustpoint را حذف کند. حذف یک Trustpoint باعث حذف شدن CA آن و گواهی همه منظوره متناظرش از سیستم میشود.