محمد نصیری
بنیانگذار انجمن تخصصی فناوری اطلاعات ایران ، هکر کلاه خاکستری ، کارشناس امنیت اطلاعات و ارتباطات

آموزش راه اندازی Offline Root CA و Subordinate CA در ویندوز

چند وقت پیش سه مقاله در خصوص طراحی و معماری زیرساخت کلید عمومی یا PKI در وب سایت توسینسو قرار دادم ، در این مقالات مفاهیم کلی طراحی و معماری زیرساخت کلید عمومی بررسی و تحلیل شده بود اما به هیچ عنوان بحث فنی انجام نشده بود ، در این مقاله قصد داریم تا یکی از طراحی های مد نظر در آن سری از مقالات را که به عنوان یک طراحی ایده آل مطرح می شود را با یکدیگر بصورت کاملا عملی انجام دهیم.

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

تا اینجای کار و با مطالعه سری مقاله های قبلی متوجه شدیم که یک طراحی مناسب زیرساخت کلید عمومی یا PKI قطعا باید متشکل از یک Offline Root CA یا مرکز صدور گواهینامه دیجیتال آفلاین و چندین Subordinate CA یا مراکز صدور گواهینامه دیجیتال موجود در ساختار اکتیودایرکتوری باشد.

خوب با توجه به اینکه ساختار دو لایه ای و ساختار سه لایه ای از نظر انجام تنظیمات چندان تفاوتی با یکدیگر ندارند در این مقاله یک ساختار دو لایه ای را که در آن یک Offline Root CA و یک Subordinate CA وجود دارد را با همدیگر پیاده سازی می کنیم. پیشنهاد می کنیم قبل از خواندن این مقاله سری به این سری مقالات بزنید و دید نسبی به این مقوله پیدا کنید :

طرح سناریو

همانطور که در شکل زیر مشاهده می کنید ما یک سرور که عضو هیچ Domain ای نمی باشد و در Workgroup می باشد را به نام RootCA ایجاد خواهیم کرد که بر روی آن ویندوز سرور 2008 نسخه R2 نصب شده است و سپس آن را در حالت Offline قرار می دهیم ، یعنی ارتباطات شبکه ای آن را قطع می کنیم ، توجه کنید که با توجه به مقالات قبلی ، شما نبایستی Offline Root CA را به عضویت Domain در بیاورید.

سپس یک Enterprise Subordinate CA با نام SubCA در ویندوز سرور 2008 نسخه R2 ایجاد می کنیم که در اکتیودایرکتوری و Domain ای به نام tosinso.com عضویت دارد ، توجه کنید که بعد از راه اندازی سرویس این CA فعال نخواهد شد تا گواهینامه اصلی از طریق RootCA برای آن صادر شود. توجه کنید که مهمترین اصلی در راه اندازی چنین سرویسی این است که SubCA بایستی بتواند به لیست CRL و AIA ای که RootCA دارد دسترسی پیدا کند ، یا در صورت لزوم دسترسی را به صورت کلی حذف کنیم. این طرح کلی سناریو می باشد که در ادامه آن را انجام خواهیم داد.


سناریو راه اندازی PKI در مایکروسافت


راه اندازی Offline Root CA در ویندوز سرور 2008

خوب همانطور که از نامش هم پیداست این سرور در حالت آفلاین قرار دارد یعنی اصلا به شبکه متصل نمی باشد. برای اینکار کافیست یک ویندوز سرور 2008 داشته باشید ، در این حالت به Root CA ای که ساخته می شود در اصطلاح Stan Alone نیز گفته می شود زیرا عضو هیچ Domain ای نمی باشد و فقط برای صدور گواهینامه یا Certificate برای Subordinate CA ها استفاده می شود. خوب برای نصب این CA کافیست وارد کنسول Server Manager بشوید و طبق موارد زیر عمل کنید :

1- طبق شکل زیر گزینه Active Directory Certificate Services را انتخاب کنید و سپس Next را کلیک کنید.



انتخاب Active Directory Certificate Services


2-از Role های موجود در شکل زیر صرفا گزینه Certificate Authority را انتخاب کنید ، توجه کنید که این CA در حالت Offline قرار دارد بنابراین شما نیازی به این ندارید که حالت Web Enrollment را در آن فعال کنید ، به دلیل اینکه قرار نیست کسی از طریق وب به آن متصل شود ، بعد از انتخاب Certificate Authority بر روی Next کلیک کنید.


انتخاب Certificate Authority در Role های CA


3-مشابه تصویر زیر برای نوع CA یا CA Type گزینه Stand-Alone را انتخاب کنید ، البته چاره دیگری هم ندارید زیرا به دلیل عدم عضویت این سرور در Domain شما نمی توانید Enterprise CA در این سرور داشته باشید و بنابراین Stan-Alone را انتخاب کنید و بر روی Next کلیک کنید.



انتخاب نوع CA از نوع Stand Alone


4-مشابه تصویر زیر گزینه Root CA را انتخاب کنید ، گزینه Subordinate CA را به امید خدا در آموزش بعدی برای ایجاد یک CA میانی برای این CA ریشه ایجاد خواهید کرد ، بر روی Next کلیک کنید.


انتخاب نوع Ca از نوع Root CA


5-همانطور که در تصویر زیر مشاهده می کنید از شما خواسته می شود که برای این CA یک کلید خصوصی یا Private Key ایجاد شود ، به این نکته توجه داشته باشید که تنها CA ای که می تواند برای خودش Certificate و Private Key ایجاد کند فقط و فقط CA ریشه یا Root CA است ، در تصویر زیر گزینه Create a new private key را انتخاب کنید تا CA برای خود یک کلید خصوصی ایجاد کند ، توجه داشته باشید که در صورتیکه CA فاقد کلید خصوصی برای خود باشد قادر به ارائه سرویس نخواهد بود ، بر روی Next کلیک کنید.



انتخاب الگوریتم مورد استفاده CA در رمزنگاری


6-همانطور که در تصویر پایین مشاهده می کنید در این قسمت از شما در خصوص الگوریتم های مورد استفاده در این ساختار PKI و همچنین CSP سئوال می شود. این موارد برای ایجاد کلید های خصوصی و عموی الزامی است ، در قسمت CSP شما روش نگهداری کلید خصوصی را مشخص می کنید ، برای مثال اگر می خواهید کلید خصوصی شما قابلیت خروجی گرفتن در یک کارت هوشمند را داشته باشد در این قسمت بایستی CSP متناسب با آن را انتخاب کنید ، در قسمت Key Character Length طول کلید ایجاد شده توسط این CA را انتخاب می کنید ، در قسمت Hashing Algorithm هم الگوریتم Hashing یا درهم سازی متناسب با ساختار خود را انتخاب می کنید ، در اینجا ما نمی خواهیم تغییرات چندانی در ساختار داشته باشیم و بنابراین همه چیز را در حالت پیشفرض باقی گذاشته و بر روی Next کلیک می کنیم.



انتخاب الگوریتم Ca برای تولید کلید خصوصی


7-در تصویر زیر از شما اسم این CA خواسته می شود که تمامی Certificate هایی که از طریق این CA ساخته می شوند در ساختار سلسله مراتبی که ایجاد می شود حتما این اسم را خواهند دید ، توجه کنید که پیشفرض اسم سرور در این قسمت قرار می گیرد اما شما می توانید آن را عوض کنید ، من در اینجا همان اسم PDC را انتخاب کرده ام با توجه به اسم سرور فعلی ، اما یک نکته را در نظر داشته باشید ، همیشه به اسم سرور خود دقت کنید ، بعد از اینکه CA شما نصب شود دیگر نمی توانید اسم سرور خود را عوض کنید. بر روی گزینه Next کلیک کنید.


انتخاب اسم برای Ca در قالب Distinguished Name


8-در ادامه و همانطور که در تصویر زیر مشاهده می کنید شما مدت زمان اعتبار یا Validity Period سرور را مشخص می کنید ، هر چند معمولا برای سرورهای ریشه این زمان زیادتر از زمان سرورهای Subordinate در نظر گرفته می شود تا در صورت منقضی شدن سرورهای Subordinate بتوانیم از طریق سرور ریشه آنها را مجددا معتبر کنیم اما در این سناریو با توجه به اینکه در محیط لابراتوار قرار داریم همان 5 سال اعتبار پیشفرض را برای سرور در نظر می گیرم و بر روی Next کلیک می کنیم.



تعیین مدت زمان اعتبار CA


9-در تصویر زیر ویزارد از شما محل ذخیره سازی فایل های مورد نیاز برای نصب CA و Log های CA را از شما می خواهد ، طبق رویه عمل کنید و بر روی Next کلیک کنید ، در نهایت به شما خلاصه ای از تنظیمات و موارد خواسته شده ارائه می شود که با کلیک کردن بر روی گزینه Install سرور CA شما براحتی نصب می شود.



محل قرارگیری لاگها و فایل های CA


10- قدم بعدی این است که نام Domain ای که قرار است به عنوان Subordinate CA ما فعالیت کند را در این Root CA در اصطلاح MAP کنیم ، دقت کنید که در اینجا بایستی از ابزار certutil.exe و همچنین از ساختار نامگذاری DN یا Distinguished Name استفاده کنیم ، برای انجام اینکار کافیست در CMD ای که بر روی CA ریشه باز می کنید دو دستور زیر را بصورت جداگانه اجرا کنید ، بعد از اجرا موفقیت آمیز این دو دستور بایستی یکبار سروریس CA را Stop و Start کنید تا تغییرات اعمال شود ، در اینجا نام دامین ما itpro.local است که دستورات به شکل زیر خواهند بود.

certutil.exe –setreg ca\DSConfigDN CN=Configuration,DC=ITPRO,DC=LOCAL
certutil -setreg ca\DSDomainDN “DC=ITPRO,DC=LOCAL”



انتخاب Domain برای Root CA



انتخاب domain برای root CA


11-تا اینجای مسئله کافیست و Root CA شما به درستی فعالیت می کند ، اما در اینجا یک مبحث پیش می آید و آن انتشار CRL و AIA است که شما می توانید دو سناریوی متفاوت را در این قسمت بکار ببرید ، اولین سناریو این است که آدرس یک سرور آنلاین در شبکه را به جای آدرس های پیشفرض سرور Root قرار بدهید تا لیست در آنجا منتشر شود که در این حالت سرور شما به نوعی هر چند وقت یکبار بایستی آنلاین شود ، سناریوی دوم این است که در سرور Subordinate بررسی CRL ها سرور Root را غیرفعال کنید که در سناریوی ما این موضوع منطفی تر به نظر می رسد.

خوب تا اینجا کار ما یک سرور Root CA بصورت Stan Alone و Offline ایجاد کرده ایم و تنظیمات اولیه آن را برای دامین itpro.local نیز انجام داده ایم ، حالا قرار است به سراغ نصب و راه اندازی Subordinate CA برویم که بصورت آنلاین است و از این سرور ریشه Certificate دریافت بایستی بکند تا بتواند به کار خود در شبکه ادامه دهد. توجه کنید که سناریو در آموزش بعدی به این شکل است که ما یک سرور Subordinate را نصب می کنید و در حین کار نوع CA را Subordinate در نظر می گیریم و سپس درخواست این CA را بصورت آفلاین با یک فلش مموری به سرور ریشه می فرستیم و گواهینامه دریافت می کنیم

خوب در آموزش قبلی ما با هم یک Root CA را بصورت آفلاین راه اندازی کردیم و این CA دامین itpro.local را به عنوان دامین رجیستر شده با استفاده از دستوراتی که وارد کردیم شناسایی کرد. حالا نوبت به راه اندازی Subordinate CA می باشد که در اینجا در نقش Issuing CA نیز فعالیت می کند. سناریو به این شکل است که بر روی سروری که عضوی دامین itpro.local است Role مربوط به Active Directory Certificate Services را نصب می کنیم و اینبار به جای انتخاب root CA گزینه subordinate CA را انتخاب می کنیم .

در این حالت سرور از ما آدرس Root CA را می خواهد که بتواند برای ادامه فعالیت از آن Certificate بگیرید که در اینجا با توجه به آفلاین بودن Root CA در خواست را بصورت دستی در قالب فایل گرفته و به سرور root انتقال می دهیم و سپس بعد از صادر شدن یا Issue شدن certificate آن را به Subordinate CA منتقل و نصب می کنیم . با ما تا انتهای ماجرا باشید و مراحل را بصورت گام به گام انجام دهید.

1-وارد سرور عضو دامین بشوید و از طریق کنسول Server Manager گزینه Active Directory Certificate Services را انتخاب کنید و Next را بزنید ، در اینجا دو گزینه Certificate Authority و Certificate Authority Web Enrollment را انتخاب کنید ، برخلاف Root CA این CA بایستی بتواند بصورت آنلاین به کلاینت های شبکه سرویس دهی کند و به همین دلیل سرویس وب آن را نیز راه اندازی می کنیم و بر روی گزینه Next کلیک می کنیم ، همانطور که در تصویر زیر مشاهده می کنید :


انتخاب Certificate Authority  و Web Enrollment


2-در تصویر زیر شما بایستی نوع CA را انتخاب کنید که آیا یک سرور Stand Alone است یا سرور Enterprise ، با توجه به اینکه ما می خواهیم از این سرور در نقش صادر کننده خودکار یا Issuing CA در شبکه استفاده کنیم و قابلیت Auto Enrollment در ساختار Enterprise CA وجود دارد این گزینه را انتخاب می کنیم ، دقت کنید که گزینه Enterprise صرفا زمانی فعال است که شما در عضویت یک دامین قرار داشته باشید که در اینجا ما یک دامین به نام itpro.local داریم که سرور فعلی ما در عضویت این دامین است. بعد از انتخاب Enterprise بر روی Next کلیک می کنیم.


انتخاب نوع CA از جنس Enterprise


3-در ادامه و در تصویر زیر شما نوع CA از نظر قرار گرفتن در ساختار سلسله مراتبی را مشاهده می کنید ، در اینجا ما می خواهیم زیرمجموعه یک CA دیگر شویم که Root CA ما می باشد ، بنابراین در این قسمت گزینه Subordinate CA را انتخاب می کنیم ، اگر به خاطر داشته باشید در آموزش قبلی به دلیل ریشه بودن CA گزینه Root را انتخاب کردیم ، بعد از انتخاب Subordinate بر روی Next کلیک کنید.


انتخاب نوع CA از جنس Subordinate


4-در ادامه تصویر زیر ویزارد از شما می خواهد که برای این سرور یک کلیک خصوصی یا Private Key ایجاد کند ، دقت کنید که در این ویزارد بصورت خودکار یک Private Key ایجاد می شود اما این Private Key بی ارزش است و فقط برای انجام فرآیند نصب استفاده می شود ، بعد از اینکه شما از سرور Root CA یک Certificate شامل کلید خصوصی و کلید عمومی برای این سرور دریافت کردید و آن را نصب کردید این Private Key صادر شده دیگر بی ارزش می شود ، فعلا برای اینکه فرآیند نصب به درستی انجام شود گزینه Create a new private key را انتخاب کنید و بر روی Next کلیک کنید.


ایجاد Private Key مربوط به سرور CA


5-در ادامه از شما در خصوص الگوریتم های رمزنگاری مورد استفاده در این ساختار سئوال می شود که همانطور که اعلام کردیم همه اینها را بصورت پیشفرض فعلا در نظر بگیرید ، در این حالت CSP خود را بر روی Microsoft Software Key Storage Provider و الگوریتم Hashing خود را بر روی SHA1 و طول کلید را همان 2048 بیت در نظر بگیرید و بر روی Next کلیک کنید.


انتخاب الگوریتم های رمزنگاری مربوط به CA


6-در قسمت بعدی از شما در خصوص نام CA سئوال می شود که در اینجا با توجه به اینکه شما در عضویت یک دامین هستید ، هر نامی که انتخاب کنید دارای پسوند دامین شما خواهد بود. ما در اینجا نام سرور CA را ITPRO-CA انتخاب می کنیم و با توجه به همین اسم ساختار Distinguished Name ساخته شده را می توانید در ادامه مشاهده کنید. تغییرات چندانی در این قسمت نیاز نیست انجام بدهید ، بر روی Next کلیک کنید تا به مرحله بعدی بروید.


انتخاب اسم CA با توجه به ساختار distinguished Name


7-این قسمت بسیار مهم است ، در اینجاست که شما بایستی درخواست دریافت گواهینامه یا Certificate خود را به سمت Root CA بفرستید تا تاییدیه و Certificate دریافت کنید ، گزینه اول در خصوص معرفی یک Root CA آنلاین و در حال کار است ، چیزی که ما در این سناریو نداریم ، اما در این حالت ما گزینه دوم را انتخاب می کنیم ، با انتخاب این گزینه درخواستی از طرف این CA بصورت یک فایل در اختیار شما قرار می گیرد تا آن را بصورت دستی برای Root CA برده و از طرف آن Certificate صادر کنیم ، گزینه دوم را انتخاب کنید و محل ذخیره سازی فایل را هم فراموش نکنید ، بر روی Next کلیک کنید.


ذخیره درخواست Certificate  با پسوند .req


8-در تصویر پایین نیز همانطور که مشاهده می کنید و در آموزش قبلی نیز عنوان کردیم محل قرارگیری فایل های تنظیمات و لاگ های سرور CA مشخص شده است که معمولا ما تنظیمات خاصی در این قسمت نداریم و بر روی Next کلیک می کنیم.


محل قرارگیری تنظیمات و لاگ سرورها


9-در انتهای فرآیند نصب ویزارد خلاصه ای از تنظیمات انجام شده را به شما نمایش می دهد ، دقت کنید که در اینجا به شما اعلام شده است که حتی بعد از اینکه شما گزینه Close را نیز انتخاب کنید CA بصورت کامل نصب و راه اندازی نخواهد شد زیر درخواست شما بایستی توسط Root CA مورد نظرتان تایید و سپس Certificate مورد نظر بر روی این سرور نصب شود تا بتواند فعالیت کند ، در اینجا روی گزینه Close کلیک کنید ، CA شما نصب می شود اما در حالت Stop قرار می گیرد .


خلاصه ای از فرآیند نصب سرور Certificate Authority


10-در ادامه وارد کنسول مدیریتی Certificate Authority می شویم و با مشاهده علامت مربع مشکلی بر روی این سرویس متوجه می شویم که سرویس مورد نظر در حالت Stop قرار دارد ، اگر تلاش کنیم که این سرویس را Start کنیم با پیغام زیر مواجه می شویم که به ما می گوید بایستی Certificate ای داشته باشید که از طرف Root CA صادر شده باشد تا این سرور بتواند در حالت عملیاتی قرار بگیرد ، با توجه به اینکه ما فعلا کاری در خصوص این Certificate انجام نداده ایم نمیتوانیم CA را Start کنیم.


مشاهده علامت مربع مشکلی رو سرور Certificate Authority


11-خوب در این مرحله کار ما در سرور Subordinate CA تمام شده است و الان کاری که بایستی انجام شود این است که فایل درخواست ایجاد شده را که دارای پسوند req است بصورت دستی روی Root CA کپی کرده و وارد کنسول مدیریت CA در Root CA شوید و مراحل زیر را انجام دهید ، ابتدا بر روی نام CA راست کلیک کنید و گزینه Submit new request را انتخاب کنید ، در اینجا محل قرارگیری فایل درخواست را مشخص کنید و در نهایت Open را بزنید. دقیقا مشابه آنچه که در پایین مشاهده می کنید.


درخواست ثبت Certificate  در CA



درخواست ثبت Certificate در CA


12-همانطور که در تصویر پایین نیز مشاهده می کنید درخواست شما بعد از باز شدن در قسمت Pending قرار می گیرد و منتظر می ماند که شما آن را صادر یا Issue کنید. کافیست بر روی درخواست مورد نظر راست کلیک کرده و Issue را بزنید . Certificate مورد نظر شما ایجاد شده است و در قسمت Issued قرار گرفته است.


Issue یا صادر کردن Certificate در کنسول Certificate Authority


13-گام بعدی خروجی گرفتن یا کپی کردن Certificate صادر شده از قسمت Issued می باشد. برای کپی کردن Certificate کافیست ابتدا بر روی Certificate مورد نظر راست کلیک کرده و گزینه Open را بزنیم و سپس تب Details را باز کنیم و گزینه Copy to file را انتخاب کنیم ، طبق مراحل جلو برویم ، توجه کنید که در اینجا حتما گزینه p7b بایستی برای خروجی انتخاب شود. به تصاویر زیر دقت کنید.


کپی کردن Certificate از سرور اصلی



کپی کردن Certificate از سرور با پسوند p7b


14-خوب در اینجا کار ما دیگر با Root CA تمام شده است و مجددا به سراغ Subordinate CA می رویم ، وارد کنسول مدیریت CA شوید و همانطور که در تصویر زیر مشاهده می کنید این سرویس در حالت Stop قرار دارد ، بر روی آن راست کلیک کرده و Start را بزنید ، از شما در خصوص فایل Certificate صادر شده توسط Root CA سئوال می شود که شما بایستی بر روی Yes کلیک کنید ، فایل را انتخاب کنید که در اینجا ما اسم آن را Subordinate-CA گذاشته ایم. بعد از انتخاب این گزینه به شما خطای زیر نمایش داده خواهد شد.


تایید نصب Certificate برای راه اندازی سرور CA



قابل اعتماد کردن Public Key موجود در سرور Root CA


15-خطایی که در بالا مشاهده می کنید به دلیل این است که Certificate ای که از Root CA دریافت کرده اید از سروری دریافت شده است که از نظر این سرور غیرقابل اعتماد یا Untrusted است ، با کلیک کردن بر روی OK این CA در لیست سرورهای قابل اعتماد یا Trusted Ca ها قرار می گیرد. سپس شما با خطای زیر مواجه می شوید ، این خطا به دلیل این صادر می شود که سرور فعلی قادر به دریافت کردن لیست Certificate های باطل شده یا CRL از سرور Root نیست ، برای برطرف کردن این مشکل کافیست دستوری که در ادامه مشاهده می کنید را در CMD سرور وارد کنید تا دیگر CRL ها بررسی نشوند. بعد از انجام دستور فوق سرور را یکبار Stop و Strat کنید و این سرور آماده سرویس دهی به شبکه می باشد.


خطای Certificate Revocation List در سرور CA


C:\>certutil -setreg ca\CRLFlags +CRLF_REVCHECK_IGNORE_OFFLINE
SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\SEASUB01\CRLFlags
Old Value:
CRLFlags REG_DWORD = 2
CRLF_DELETE_EXPIRED_CRLS -- 2
New Value:
CRLFlags REG_DWORD = a (10)
CRLF_DELETE_EXPIRED_CRLS -- 2
CRLF_REVCHECK_IGNORE_OFFLINE -- 8
CertUtil: -setreg command completed successfully.


وارد کردن دستورات برای CRL


خوب در این سری آموزشی شما یاد گرفتید که چگونه یک سرور Root CA ایجاد کنید که بصورت Offline و بدون نیاز به شبکه فعالیت کند و بتواند برای کار کردن سرورهای پایین دستی یا subordinate CA ها Certificate صادر کند ، از این به بعد شما می توانید از سرور subordinate ساخته شده براحتی در شبکه و در ساختار اکتیودایرکتوری استفاده کنید و از قابلیت Auto Enrollment ای که دارد استفاده کنید ، قابلیتی که در سرورهای Stand Alone وجود ندارد. امیدوارم مورد توجه شما دوستان قرار گرفته باشد.


محمد نصیری
محمد نصیری

بنیانگذار انجمن تخصصی فناوری اطلاعات ایران ، هکر کلاه خاکستری ، کارشناس امنیت اطلاعات و ارتباطات

محمد نصیری هستم ، هکر قانونمند و کارشناس امنیت سایبری ، سابقه همکاری با بیش از 50 سازمان دولتی ، خصوصی ، نظامی و انتظامی در قالب مشاور ، مدرس و مدیر پروژه ، مدرس دوره های تخصص شبکه ، امنیت ، هک و نفوذ ، در حال حاضر در ایران دیگه رسما فعالیتی غیر از مشاوره انجام نمیدم و مقیم کشور ترکیه هستم ، عاشق آموزش و تدریس هستم و به همین دلیل دوره های آموزشی که ضبط می کنم در دنیا بی نظیر هستند.

نظرات