آبان ۱۹, ۱۳۹۶
همه sysadmin ها مطمئنا تا به حال حداقل یک بار مجبور به پیکربندی SSL یا TLS برای یکی از سرویس های وب یا میل شده اند. این موضوع به دلیل اینکه در طول یک پروژه یا کار خیلی کم پیش میاد، اکثر ما سطحی از کنارش می گذریم و خیلی کنجکاو نمیشیم که مفاهیم پایه اش را در بیاریم و یا خیلی ریز وارد جزییاتش بشیم. اکثر مواقع فقط انجامش می دیم میره.
خوب توی این مستند تصمیم دارم انواع پسوندهایی که برای فایلهای کلید و Certificate امون انتخاب می کنیم و همینطور چند تا فرمتش را معرفی کنم.
Transport Layer Security یا TLS
TLS یک پروتکل رمزنگاری برای ایجاد یک ارتباط امن بین سرویس دهنده و سرویس گیدنده (Client) است. این پروتکل جایگزین استاندارد شده SSL هست. همانطور که می دونید بیش از دو سال است که توسعه دهندهها و شرکتها به دلیل مشکلات امنیتی بنیادی در پروتکل SSL در حال حذف پشتیبانی از این پروتکل در سیستم عامل های خود هستند. در حال حاضر در اکثر توزیع های لینوکس که در دو سال اخیر منتشر شده اند، پشتیبانی از پروتکل SSL به طور کامل حذف شده است.
چرخه زندگی یا Life Cycle (نمیدونم اسم خوبی برای این بخش انتخاب کردم؟)
زمانی که شما به یک سایت HTTPS متصل میشوید، فرایندی که یک ارتباط امن برای شما ایجاد می کند به شکل زیر است:
۱- پس از ارتباط اولیه به یک سرویس دهنده HTTPS، کلاینت فایلی با نام Certficate File را از سرور دریافت میکند. این فایل شامل اطلاعاتی در مورد سرویس دهنده است، که البته لزوما همه آنها در همه Certificate فایل ها وجود ندارد. این اطلاعات شامل مشخصات سرویس دهنده از اسم و آدرس و مشخصات آن، آدرس url ای که این Certificate برای آن صادر شده است، یک Public Key و آدرس CRL یا Certificate Revocation List و امضای یک شرکت Third Party (همان Provider فروش Certificate) است. (در صورتی که خیلی کنجاو هستید، میتونید جزییات بیشتر را در RFC-5280 مطالعه کنید.)
۲- پس از دریافت Certificate کلاینت از Public Key داخل Certificateاستفاده می کند تا یک کلید رمزنگاری شده تصادفی که خود ایجاد کرده است را با آن رمزنگاری کند و برای سرور ارسال کند.
۳- سرور کلید رمزنگاری شده با Public Key را با Private Key که تنها خود در اختیار دارد. باز میکند و ارتباط رمزنگاری شده از اینجا آغاز می گردد. هر دو طرف کلید مشابهی دارند که ترافیک را با آن رمزنگاری میکنند و این کلید در بازه هایی باز تولید می شود تا امکان ردیابی کلید وجود نداشته باشد.
فرمت|کدگذاری|Encoding
فایل certificate و یا کلید ها با encoding های مختلفی نگهدای می شوند. برخی از نرم افزارهای تنها فرمت مشخصی را پشتیبانی می کنند و لزوما همه فرمتها در همه نرم افزارها پشتیبانی نمی شود.
DER یک فرمت باینری است. برخی از صادر گنندگان certificate فایل را با این فرمت به شما تحویل میدهند. در این حالت شما یک DER Encoded Certificate دارید
PEM فرمت دیگری است که داده ها را به صورت ASCII و با Base64 encoding عرضه میشوند. بیشتر نرم افزار ها از این فرمت پشتیبانی می کنند. محتوای Certificate با —–BEGIN CERTIFICATE—– و محتوای کلید با —-BEGIN PRIVATE KEY—– شروع می شود.
پسوند|Extention
زمانی که شما یک سرویس HTTPS راه اندازی می کنید دو فایل در اختیار دارید (یک راهنمای خرید Certificate و راه اندازی HTTPS) در دست تهیه دارم). چیزی که خیلی از تازه کارها را گیج می کنه پسوندهای مختلفی است که تحویل میگیره. این پسوندها گاهی نشان دهنده فرمت ذخیره سازی هستند مانند: der و pem و یا نشان دهنده کاربری آن است، مانند: crt ، cer و key
۱- پس شما یک Private Key دارید که ممکن است فایل آن با پسوندهای der، pem و یا key ذخیره شده باشد.
۲- و یک فایل Certificate دارید که ممکن است با پسوندهای der، pem و یا cer یا crt ذخیره شده باشد.
تبدیل فرمت ها
نکته مهم این هست که در اکثر مواقع شما نیاز هست تا فایل موجود را به فرمت مورد نیاز خود تبدیل کنید و یا حتی نیاز دارید محتوا را ببینید. چرا که فرمتهای DER و PEM قابل خواندن نیستند. برای این کار در لینوکس می تونید از دستور openssl استفاده کنید. اگر روی سیستم ندارید، نصبش کنید (apt-get install openssl)
PEM to Clear text openssl x509 -in cert.pem -text -noout openssl x509 -in cert.cer -text -noout openssl x509 -in cert.crt -text -noout DER to Clear text openssl x509 -in certificate.der -inform der -text -noout PEM to DER openssl x509 -in cert.pem -outform der -out cert.der DER to PEM openssl x509 -in cert.crt -inform der -outform pem -out cert.pem
منابع
۱- سایت ssl.com
۲- سایت ietf سند RFC-5280