Let's Go بهبودهای سرور و امنیت › تولید گواهینامه TLS خودامضا
قبلی · فهرست · بعدی
فصل ۹.۳.

تولید گواهینامه TLS خودامضا

بیایید توجه خود را به استفاده از HTTPS (به جای HTTP ساده) برای تمام درخواست‌ها و پاسخ‌ها معطوف کنیم.

HTTPS اساساً HTTP است که از طریق یک اتصال TLS (Transport Layer Security) ارسال می‌شود. مزیت این است که ترافیک HTTPS رمزگذاری و امضا شده است که به حفظ حریم خصوصی و یکپارچگی آن در حین انتقال کمک می‌کند.

قبل از اینکه سرور ما بتواند از HTTPS استفاده کند، باید یک گواهی TLS تولید کنیم.

برای سرورهای تولیدی، استفاده از Let’s Encrypt را برای ایجاد گواهی‌های TLS توصیه می‌کنم، اما برای اهداف توسعه، ساده‌ترین کار این است که گواهی خودامضا خود را تولید کنید.

گواهی خودامضا همانند یک گواهی TLS معمولی است، با این تفاوت که توسط یک مرجع صدور گواهی معتبر به صورت رمزنگاری امضا نشده است. این بدان معناست که مرورگر وب شما در اولین بار استفاده از آن هشدار می‌دهد، اما با این حال ترافیک HTTPS را به درستی رمزگذاری می‌کند و برای اهداف توسعه و تست مناسب است.

به راحتی، بسته crypto/tls در کتابخانه استاندارد Go شامل یک ابزار generate_cert.go است که می‌توانیم از آن برای ایجاد آسان گواهی خودامضای خود استفاده کنیم.

اگر در حال دنبال کردن هستید، ابتدا یک دایرکتوری جدید tls در ریشه مخزن پروژه خود برای نگهداری گواهی ایجاد کنید و به آن تغییر دهید:

$ cd $HOME/code/snippetbox
$ mkdir tls
$ cd tls

برای اجرای ابزار generate_cert.go، باید محل نصب کد منبع کتابخانه استاندارد Go در کامپیوتر خود را بدانید. اگر از Linux، macOS یا FreeBSD استفاده می‌کنید و دستورالعمل‌های نصب رسمی را دنبال کرده‌اید، فایل generate_cert.go باید در /usr/local/go/src/crypto/tls قرار داشته باشد.

اگر از macOS استفاده می‌کنید و Go را با استفاده از Homebrew نصب کرده‌اید، فایل احتمالاً در /usr/local/Cellar/go/<version>/libexec/src/crypto/tls/generate_cert.go یا مسیر مشابهی قرار دارد.

پس از اینکه محل آن را دانستید، می‌توانید ابزار generate_cert.go را به این صورت اجرا کنید:

$ go run /usr/local/go/src/crypto/tls/generate_cert.go --rsa-bits=2048 --host=localhost
2024/03/18 11:29:23 wrote cert.pem
2024/03/18 11:29:23 wrote key.pem

در پشت صحنه، این دستور generate_cert.go در دو مرحله کار می‌کند:

  1. ابتدا یک جفت کلید RSA ۲۰۴۸ بیتی تولید می‌کند که یک کلید عمومی و کلید خصوصی رمزنگاری شده است.

  2. سپس کلید خصوصی را در یک فایل key.pem ذخیره می‌کند و یک گواهی TLS خودامضا برای میزبان localhost حاوی کلید عمومی تولید می‌کند که آن را در یک فایل cert.pem ذخیره می‌کند. هم کلید خصوصی و هم گواهی به صورت PEM کدگذاری شده‌اند که فرمت استاندارد مورد استفاده اکثر پیاده‌سازی‌های TLS است.

مخزن پروژه شما اکنون باید چیزی شبیه به این باشد:

09.01-01.png

و تمام! اکنون یک گواهی TLS خودامضا (و کلید خصوصی مربوطه) داریم که می‌توانیم در طول توسعه از آن استفاده کنیم.


اطلاعات تکمیلی

ابزار mkcert

به عنوان جایگزینی برای ابزار generate_cert.go، ممکن است بخواهید استفاده از mkcert را برای تولید گواهی‌های TLS در نظر بگیرید. اگرچه این نیاز به تنظیمات اضافی دارد، اما مزیت آن این است که گواهی‌های تولید شده به صورت محلی قابل اعتماد هستند — یعنی می‌توانید از آن‌ها برای تست و توسعه استفاده کنید بدون اینکه هشدارهای امنیتی در مرورگر وب خود دریافت کنید.