استفاده از گواهینامه SSL در Haproxy
خلاصه مطلب :
در صورتی که نرم افزار شما قابلیت استفاده از SSL دارد و یا نیاز دارید که بروی سایت خو که از طریق HAproxy مدیریت می شود، SSL نصب نمایید می توانید این آموزش را دنبال کنید.
به صورت ساده و رایج بدون در نظر گرفتن Haproxy ، می توان SSL را به راحتی با روش های مرسوم بروی سایت خود نصب کرد که اغلب خیلی راحت از طریق کنترل پنل مثل دایرکت ادمین و سی پنل انجام می شود. بطور رایج در این حالت درخواست های SSL یک کاربر در همان سرور، رمزگشایی و رمزنگاری می شود، اما در حالتی که Haproxy نقش balance درخواست ها را دارد این موضوع به این شکل نیست. در این حالت دو روش وجود دارد که در ادمه به آن ها می پردازیم.
- SSL Termination
در این روش درخواست ها در سرور Haproxy که کار load balance را برعهده دارد terminate می شوند، به عبارتی رمز گشایی شده و پس از آن درخواست ها به صورت رمزنگاری نشده به سرور های Backend ارجاع داده می شود. این بدان معنی است که load balancer وظیفه رمزگشایی یک ssl connection را دارد که در مقابل یک درخواست بدون SSL ، کند تر و نیاز به صرف زمان بیشتری برای پردازش توسط CPU دارد.
از معایب این روش رمزنگاری نبودن اطلاعات بین Haproxy و سرور های Backend می باشد.
- SSL Pass-Through
همان طور که از نامش پیدا است درخواست ها در این روش به صورت مستقیم به سرور های Backend پاس داده می شوند که بر خلاف روش اول می باشد.
در این روش Connections SSL بروی سرور های backend توضیع می شوند و هر درخواست به یک سرور ختم می شود که مصرف و بار CPU نیز کاهش می یابد، گرچه در این روش شما به دلیل encrypt بودن درخواست ها امکان ویرایش و اضافه کردن header های http را نخواهید داشت، که از معایب آن عدم نمایش IP کاربران در لاگ وب سرور می باشد.
روش سومی نیز هست که ترکیبی از این دو روش می باشد و مفهوم مشابهی دارد، که Connections SSL بروی Load Balancer رمز گشایی می شوند و تغییراتی که می توان تغییراتی بروی header های http ایجاد کرد و مجدد آنها را رمز نگاری کرد و در نهایت به سرور های Backend ارسال شوند، در این روش معایب دو روش بالا را نخواهیم داشت اما بار زیادی به CPU سرور ها اضافه می شود که ممکن است باعث بوجود آمدن bottleneck شود، البته تنظیمات این روش کمی پیچیده می باشد.
در این مقاله تنها به روش اول پرداخته و روش دوم را برای مقاله بعدی در نظر میگیریم.
HAproxy با SSL Termination
روشی که بیشتر مورد استفاده عموم می باشد SSL Termination است که ما نیز ابتدا به آن می پردازیم، در این صورت گواهی SSL بروی سرور Load balancer نصب می شود.
در این روش از شرکت certum برای sign کردن CSR ( Certificate Signing Request ) تولیدی استفاده خواهیم کرد.
ابتدا پوشه ای دلخواه در مسیر /etc/ssl/ ایجاد نمایید، می توانید نام سایت را قرار دهید
mkdir /etc/ssl/sitessl/
openssl genrsa -out /etc/ssl/sitessl/ssl.key 2048 ساخت یک کلید خصوصی
openssl req -new -key /etc/ssl/sitessl/ssl.key -out /etc/ssl/sitessl/ssl.csr ساخت یک درخواست
پس از ایجاد فایل csr ، آنرا به مرکز ثبت ssl می دهیم و آنها به شما چند فایل میدهند که لازم است آنهارا با هم ادقام نمایید.
cat site _com.crt ssl.key site_com.ca-bundle > sitessl.pam
سپس در تنظیما haproxy.cfg موارد زیر را اضافه میکنیم:
Vi /etc/haproxy/haproxy.cfg
listen ha-www-https
bind 0.0.0.0:443 ssl crt /etc/ssl/sitessl/ sitessl.pam
mode http
stats enable
redirect scheme https if !{ ssl_fc }
server app-www-1 192.168.1.4:80 check
server app-www-2 192.168.1.5:80 check
موارد بالا تنها Option های مرتبط با SSL می باشد موارد دیگر را می توانید اضافه کنید.
دقت نمایید directive خط پنجم برای redirect کردن درخواست ها به https می باشد.