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 میباشد که در واقع شامل تنظیمات الگوریتم‌های رمزنگاری می باشد.

IPSec Profile

در این پروفایل TS تنظیم شده برای تونل انتخاب می شود و همچنین ike profile که قبلا تنظیم شده برای برقرای ارتباط ike انتخاب می شود . پس از آن این پروفایل به تونل اعمال می شود و تونل با استفاده از ipsec محافظت شده و ترافیک آن رمز شده انتقال می باید .

✔️ نکته

در روتر سودار حالت تونل برای رمز شدن ترافیک پشتیبانی می شود و حالت استفاده از crypto-map که ترافیک خاصی برای رمز شدن انتخاب می شود فعلا پشتیبانی نمی شود .

مثال عملی با استفاده از PSK

حال فرض کنید قصد داریم تونل GRE که در بخش کارگاه gre اضافه کردیم را با IPsec حفاظت کرده و رمز کنیم . ابتدا به تنظیم روتر Soodar1 میپردازیم:

Scen3

تنظیمات 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

همان سناریو قبل را مجددا در نظر بگیرید :

Scen3

در ابتدا لازم است که 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>

نکته: حذف کردن یک کلید خصوصی ممکن است باعث از کار افتادن Certificate هایی شود. وظیفه کاربر است که از بی خطر بودن این حذف اطمینان حاصل کند.

حذف Trustpoint: کاربر میتواند یک Trustpoint را حذف کند. حذف یک Trustpoint باعث حذف شدن CA آن و گواهی همه منظوره متناظرش از سیستم میشود.

soodar(config)# no crypto pki trustpoint <TP>