OpenSSL یکی از مهم‌ترین ابزارهایی است که مدیران سرور، کارشناسان امنیت، DevOpsها و مدیران وب‌سایت برای مدیریت گواهی‌های SSL/TLS استفاده می‌کنند. با چند دستور OpenSSL می‌توانید یک Private Key بسازید، CSR ایجاد کنید، اطلاعات یک Certificate را بخوانید، تاریخ انقضای SSL را بررسی کنید، مطمئن شوید Certificate و Private Key متعلق به یکدیگر هستند، اتصال واقعی TLS یک سایت را تست کنید یا فرمت گواهی را از PEM به PFX، DER یا P7B تبدیل کنید.

در بسیاری از سناریوهای عملی، زمانی که نصب SSL با خطا مواجه می‌شود، Certificate روی Nginx یا Apache بالا نمی‌آید، فایل PFX برای Windows Server نیاز دارید یا CA از شما CSR درخواست می‌کند، OpenSSL سریع‌ترین ابزار برای پیدا کردن علت مشکل است.

در این راهنما، OpenSSL را از دید عملی مدیریت گواهی SSL، CSR و Private Key بررسی می‌کنیم و مجموعه‌ای از دستورهای کاربردی را با توضیح دقیق ارائه می‌دهیم.

اگر ابتدا می‌خواهید مفهوم Certificate، HTTPS، CA و TLS را یاد بگیرید، بهتر است مقاله SSL چیست؟ را بخوانید. همچنین برای تفاوت فنی SSL قدیمی با TLS امروزی، مقاله تفاوت SSL و TLS مکمل خوبی برای این راهنماست.

سطح: متوسط | مناسب برای: مدیران سرور، کاربران VPS، DevOpsها، کارشناسان امنیت، مدیران هاستینگ و افرادی که نصب یا عیب‌یابی SSL/TLS را انجام می‌دهند.

فهرست مطالب

OpenSSL چیست؟

OpenSSL یک Toolkit متن‌باز برای پیاده‌سازی و مدیریت قابلیت‌های رمزنگاری و پروتکل‌های TLS است. بسته OpenSSL علاوه بر Libraryهای مورد استفاده برنامه‌ها، ابزار Command-Line قدرتمندی با نام openssl ارائه می‌دهد.

مدیران سیستم از OpenSSL برای کارهایی مثل این استفاده می‌کنند:

  • ساخت Private Key
  • ایجاد CSR
  • ساخت Certificate آزمایشی Self-Signed
  • مشاهده جزئیات Certificate
  • بررسی SAN، Issuer و Subject
  • بررسی تاریخ شروع و پایان اعتبار گواهی
  • اعتبارسنجی Certificate Chain
  • بررسی تطابق Private Key و Certificate
  • تست TLS روی Nginx، Apache، HAProxy و Mail Server
  • تبدیل PEM، DER، PKCS#۱۲ و PKCS#۷

OpenSSL در بسیاری از توزیع‌های Linux به‌صورت پیش‌فرض نصب است و ابزار بسیار مهمی برای مدیریت HTTPS و گواهی SSL محسوب می‌شود.

رابطه Private Key، CSR و Certificate چیست؟

قبل از اجرای دستورها، باید تفاوت سه فایل اصلی را بدانید.

Private Key چیست؟

Private Key کلید محرمانه‌ای است که باید فقط در اختیار مالک سرور باقی بماند.

نمونه نام فایل:

example.com.key

Private Key نباید برای CA ارسال شود و نباید در تیکت پشتیبانی، ایمیل، Git Repository یا پیام‌رسان قرار بگیرد.

CSR چیست؟

CSR مخفف Certificate Signing Request است.

CSR شامل Public Key و اطلاعاتی است که برای صدور Certificate به CA ارسال می‌شود.

نمونه فایل:

example.com.csr

Certificate چیست؟

بعد از بررسی درخواست، CA گواهی صادر می‌کند:

example.com.crt
example.com.pem

در نتیجه Workflow معمول این است:

Private Key
    ↓
CSR
    ↓
Certificate Authority
    ↓
SSL/TLS Certificate
    ↓
Install on Web Server

یک نکته بسیار مهم این است که Private Key هرگز برای CA ارسال نمی‌شود. CSR فقط Public Key متناظر را در خود دارد.

بررسی نسخه OpenSSL

اول نسخه نصب‌شده را بررسی کنید:

openssl version

برای جزئیات بیشتر:

openssl version -a

این دستور اطلاعاتی مثل Version، Build، Platform، مسیر تنظیمات OpenSSL و Providerها را نمایش می‌دهد.

روی توزیع‌های جدید Linux معمولاً OpenSSL ۳.x وجود دارد. دستورهای قدیمی مثل genrsa هنوز در بسیاری از نسخه‌ها کار می‌کنند، اما برای Scriptهای جدید استفاده از genpkey انتخاب عمومی‌تر و مدرن‌تری است.

ساخت Private Key با OpenSSL

Private Key نقطه شروع فرآیند صدور SSL است.

در سیستم‌های جدید می‌توانید با genpkey کلید بسازید.

ساخت RSA Private Key

RSA با طول ۲۰۴۸ بیت

openssl genpkey \
  -algorithm RSA \
  -pkeyopt rsa_keygen_bits:2048 \
  -out example.com.key

RSA ۲۰۴۸ هنوز یکی از رایج‌ترین گزینه‌ها برای Certificateهای عمومی است.

RSA با طول ۴۰۹۶ بیت

openssl genpkey \
  -algorithm RSA \
  -pkeyopt rsa_keygen_bits:4096 \
  -out example.com.key

RSA ۴۰۹۶ کلید بزرگ‌تری ایجاد می‌کند، اما عملیات Cryptographic آن نیز سنگین‌تر است. لزوماً برای هر وب‌سایتی مزیت عملی مهمی نسبت به RSA ۲۰۴۸ ندارد.

روش قدیمی با genrsa

openssl genrsa -out example.com.key 2048

این دستور همچنان در بسیاری از نسخه‌های OpenSSL پشتیبانی می‌شود، اما برای آموزش و Automation جدید، genpkey انعطاف بیشتری برای Algorithmهای مختلف دارد.

ساخت EC Private Key

OpenSSL از Elliptic Curve نیز پشتیبانی می‌کند.

برای ساخت EC Key روی منحنی P-۲۵۶:

openssl genpkey \
  -algorithm EC \
  -pkeyopt ec_paramgen_curve:P-256 \
  -out example.com.key

EC Key نسبت به RSA حجم کلید کمتری دارد و در بسیاری از سناریوهای TLS عملکرد مناسبی ارائه می‌دهد.

بااین‌حال قبل از انتخاب EC باید مطمئن شوید CA، Load Balancer، Web Server و Clientهای موردنظر از Algorithm انتخاب‌شده پشتیبانی می‌کنند.

ساخت Private Key رمزگذاری‌شده

می‌توانید Private Key را با Passphrase محافظت کنید:

openssl genpkey \
  -algorithm RSA \
  -aes-256-cbc \
  -pkeyopt rsa_keygen_bits:2048 \
  -out example.com.key

هنگام ساخت، OpenSSL از شما Passphrase می‌خواهد.

مزیت این روش این است که اگر فایل Key به‌تنهایی سرقت شود، استفاده از آن بدون Passphrase دشوارتر خواهد بود.

اما در Web Serverهای بدون Operator، Encrypted Private Key ممکن است باعث شود سرویس هنگام Restart نیازمند ورود دستی رمز شود. بنابراین باید میان امنیت کلید و نیاز Automation تعادل برقرار کنید.

تنظیم Permission امن Private Key

بعد از ساخت کلید، Permission آن را محدود کنید:

chmod 600 example.com.key

بررسی:

ls -l example.com.key

خروجی مناسب شبیه این است:

-rw------- 1 user user ... example.com.key

Private Key نباید World Readable باشد.

همچنین توصیه می‌شود آن را خارج از Document Root سایت نگهداری کنید.

ساخت CSR با OpenSSL

اگر Private Key را قبلاً ساخته‌اید:

openssl req \
  -new \
  -key example.com.key \
  -out example.com.csr

OpenSSL اطلاعات Subject را از شما می‌پرسد:

Country Name:
State or Province Name:
Locality Name:
Organization Name:
Organizational Unit Name:
Common Name:
Email Address:

برای یک Certificate دامنه، Common Name معمولاً دامنه اصلی است:

example.com

اما در Certificateهای امروزی فقط CN کافی نیست و Hostnameهایی که Certificate باید پوشش دهد باید در Subject Alternative Name یا SAN قرار بگیرند.

ساخت CSR با SAN

برای دامنه اصلی و www:

openssl req \
  -new \
  -key example.com.key \
  -out example.com.csr \
  -subj "/C=TR/ST=Istanbul/L=Istanbul/O=Example/CN=example.com" \
  -addext "subjectAltName=DNS:example.com,DNS:www.example.com"

اگر چند Subdomain نیاز دارید:

-addext "subjectAltName=DNS:example.com,DNS:www.example.com,DNS:api.example.com"

برای IP Address:

-addext "subjectAltName=IP:192.0.2.10"

نکته: Certificate عمومی IP محدودیت‌ها و سیاست‌های مخصوص خود را دارد و همه CAها مانند Certificate دامنه آن را صادر نمی‌کنند.

ساخت CSR بدون Command Line

اگر به Shell دسترسی ندارید یا می‌خواهید CSR را سریع‌تر بسازید، می‌توانید از ابزار CSR Generator پویاسازان استفاده کنید.

البته در محیط‌های حساس، اصل مهم این است که Private Key فقط در محیطی که کنترل کامل آن را دارید تولید و نگهداری شود.

مشاهده اطلاعات CSR

برای دیدن جزئیات CSR:

openssl req \
  -in example.com.csr \
  -text \
  -noout

موارد زیر را بررسی کنید:

  • Subject
  • Public Key Algorithm
  • Key Size
  • Requested Extensions
  • Subject Alternative Name
  • Signature Algorithm

قبل از ارسال CSR به CA حتماً دامنه‌ها و SANها را بررسی کنید. اشتباه در CSR معمولاً نیازمند Reissue کردن Certificate خواهد بود.

بررسی Signature خود CSR

openssl req \
  -in example.com.csr \
  -verify \
  -noout

اگر CSR سالم باشد، OpenSSL تأیید Signature را نمایش می‌دهد.

ساخت Self-Signed Certificate

برای محیط Development، Lab یا شبکه داخلی می‌توانید Certificate Self-Signed بسازید.

ساخت Key و Certificate در یک مرحله

openssl req \
  -newkey rsa:2048 \
  -nodes \
  -keyout example.com.key \
  -x509 \
  -days 365 \
  -out example.com.crt \
  -subj "/CN=example.com" \
  -addext "subjectAltName=DNS:example.com,DNS:www.example.com"

این دستور:

  • Private Key می‌سازد.
  • یک X.۵۰۹ Certificate ایجاد می‌کند.
  • Certificate را برای ۳۶۵ روز معتبر می‌کند.
  • SAN را اضافه می‌کند.

هشدار: Self-Signed Certificate برای یک سایت عمومی جای Certificate صادرشده توسط CA معتبر را نمی‌گیرد. مرورگر به‌صورت پیش‌فرض به آن اعتماد نمی‌کند.

ساخت Self-Signed از Private Key موجود

openssl req \
  -key example.com.key \
  -new \
  -x509 \
  -days 365 \
  -out example.com.crt

ساخت Certificate از CSR موجود

openssl x509 \
  -req \
  -in example.com.csr \
  -signkey example.com.key \
  -days 365 \
  -out example.com.crt

مشاهده جزئیات Certificate

یکی از پرکاربردترین دستورات OpenSSL:

openssl x509 \
  -in example.com.crt \
  -text \
  -noout

این خروجی اطلاعاتی مثل موارد زیر را نشان می‌دهد:

  • Version
  • Serial Number
  • Signature Algorithm
  • Issuer
  • Validity
  • Subject
  • Public Key
  • SAN
  • Key Usage
  • Extended Key Usage

نمایش فقط Subject

openssl x509 \
  -in example.com.crt \
  -noout \
  -subject

نمایش Issuer

openssl x509 \
  -in example.com.crt \
  -noout \
  -issuer

نمایش Serial Number

openssl x509 \
  -in example.com.crt \
  -noout \
  -serial

نمایش SAN

openssl x509 \
  -in example.com.crt \
  -noout \
  -ext subjectAltName

بررسی تاریخ انقضای گواهی SSL

برای مشاهده تاریخ شروع و پایان:

openssl x509 \
  -in example.com.crt \
  -noout \
  -dates

نمونه:

notBefore=...
notAfter=...

فقط تاریخ پایان:

openssl x509 \
  -in example.com.crt \
  -noout \
  -enddate

بررسی اینکه Certificate تا ۳۰ روز دیگر معتبر است یا نه

openssl x509 \
  -in example.com.crt \
  -checkend 2592000 \
  -noout

عدد 2592000 برابر ۳۰ روز بر حسب ثانیه است.

این دستور برای Monitoring و Alert قبل از Expiration بسیار مفید است.

برای بررسی سریع Certificate یک سایت بدون دسترسی به فایل‌های سرور، می‌توانید از ابزار SSL Checker پویاسازان استفاده کنید.

بررسی Certificate Chain

برای بررسی Certificate نسبت به Root CA:

openssl verify \
  -CAfile ca-bundle.pem \
  example.com.crt

اگر Intermediate CA جدا دارید:

openssl verify \
  -CAfile root-ca.pem \
  -untrusted intermediate.pem \
  example.com.crt

در صورت موفقیت:

example.com.crt: OK

خطای unable to get local issuer certificate

معمولاً یعنی Intermediate Certificate لازم وجود ندارد یا Chain به‌درستی ساخته نشده است.

در Nginx معمولاً باید Full Chain نصب شود:

ssl_certificate /path/fullchain.pem;

چطور مطمئن شویم Private Key و Certificate با هم Match هستند؟

یکی از خطاهای بسیار رایج هنگام نصب SSL این است که Certificate با Private Key اشتباه استفاده می‌شود.

روش مناسب و عمومی برای RSA و EC

Public Key را از Private Key استخراج کنید:

openssl pkey \
  -in example.com.key \
  -pubout \
  -outform PEM | sha256sum

Public Key را از Certificate استخراج کنید:

openssl x509 \
  -in example.com.crt \
  -pubkey \
  -noout | sha256sum

اگر Hashها یکسان باشند، Key و Certificate متعلق به یک Key Pair هستند.

این روش برای انواع Key مناسب‌تر از روش قدیمی Modulus است.

روش قدیمی برای RSA با Modulus

openssl rsa \
  -noout \
  -modulus \
  -in example.com.key | openssl sha256
openssl x509 \
  -noout \
  -modulus \
  -in example.com.crt | openssl sha256

اگر خروجی‌ها یکسان باشند، RSA Key و Certificate Match هستند.

بررسی تطابق CSR با Private Key

Public Key از CSR:

openssl req \
  -in example.com.csr \
  -pubkey \
  -noout | sha256sum

Public Key از Key:

openssl pkey \
  -in example.com.key \
  -pubout | sha256sum

خروجی یکسان یعنی CSR از همان Private Key ساخته شده است.

بررسی سلامت Private Key

در OpenSSL جدید:

openssl pkey \
  -in example.com.key \
  -check \
  -noout

برای RSA می‌توان از این دستور نیز استفاده کرد:

openssl rsa \
  -in example.com.key \
  -check \
  -noout

OpenSSL مستند کرده که گزینه -check consistency ساختار Key Pair را بررسی می‌کند. citeturn803065search0

تست SSL/TLS سایت با openssl s_client

openssl s_client یکی از بهترین ابزارهای عیب‌یابی TLS است.

برای اتصال به HTTPS:

openssl s_client \
  -connect example.com:443 \
  -servername example.com

خروجی می‌تواند شامل این موارد باشد:

  • Certificate Chain
  • Certificate Subject
  • Issuer
  • TLS Version
  • Cipher Suite
  • Verification Result

DigitalOcean نیز استفاده از s_client را برای بازسازی TLS Handshake خارج از Browser توصیه می‌کند. citeturn569949search0

چرا -servername مهم است؟

روی بسیاری از سرورها چند دامنه روی یک IP میزبانی می‌شوند. این ساختار از SNI استفاده می‌کند.

اگر فقط این را اجرا کنید:

openssl s_client -connect example.com:443

ممکن است Certificate پیش‌فرض Server را دریافت کنید.

روش درست:

openssl s_client \
  -connect example.com:443 \
  -servername example.com

تست TLS ۱.۲ و TLS ۱.۳

TLS 1.2

openssl s_client \
  -connect example.com:443 \
  -servername example.com \
  -tls1_2

TLS 1.3

openssl s_client \
  -connect example.com:443 \
  -servername example.com \
  -tls1_3

اگر Server از نسخه موردنظر پشتیبانی نکند، Handshake ناموفق می‌شود.

برای اینکه بدانید چرا در وب امروزی TLS ۱.۲ و ۱.۳ استفاده می‌شوند و SSL قدیمی دیگر مناسب نیست، مقاله تفاوت SSL و TLS را بخوانید.

مشاهده تمام Certificateهای Chain

openssl s_client \
  -connect example.com:443 \
  -servername example.com \
  -showcerts

این دستور برای بررسی Missing Intermediate یا ترتیب نادرست Chain بسیار مفید است.

نمایش Certificate واقعی سایت با خروجی کوتاه

echo | \
openssl s_client \
  -connect example.com:443 \
  -servername example.com \
  2>/dev/null | \
openssl x509 \
  -noout \
  -subject \
  -issuer \
  -dates

تبدیل فرمت Certificate با OpenSSL

گواهی SSL در چند Format مختلف استفاده می‌شود.

فرمتکاربرد رایج
PEMLinux، Apache، Nginx
DERBinary Certificate
PFX / P12Windows، IIS، Import/Export
P7B / PKCS7Windows و Certificate Chain

تبدیل PEM به DER

openssl x509 \
  -in certificate.pem \
  -outform DER \
  -out certificate.der

تبدیل DER به PEM

openssl x509 \
  -inform DER \
  -in certificate.der \
  -out certificate.pem

ساخت PFX یا PKCS#۱۲

برای Windows Server و IIS معمولاً Certificate و Private Key در فایل PFX قرار می‌گیرند.

openssl pkcs12 \
  -export \
  -out certificate.pfx \
  -inkey example.com.key \
  -in example.com.crt \
  -certfile intermediate.pem

OpenSSL برای فایل PFX از شما Export Password می‌خواهد.

این Password هنگام Import فایل در Windows یا IIS لازم است.

استخراج Private Key از PFX

openssl pkcs12 \
  -in certificate.pfx \
  -nocerts \
  -out private-key.pem

برای خروجی بدون Passphrase:

openssl pkcs12 \
  -in certificate.pfx \
  -nocerts \
  -nodes \
  -out private-key.pem

هشدار: در این حالت Private Key بدون Encryption روی دیسک ذخیره می‌شود.

استخراج Certificate از PFX

openssl pkcs12 \
  -in certificate.pfx \
  -clcerts \
  -nokeys \
  -out certificate.pem

استخراج CA Certificateها

openssl pkcs12 \
  -in certificate.pfx \
  -cacerts \
  -nokeys \
  -out ca-chain.pem

کار با P7B یا PKCS#۷

مشاهده محتویات P7B:

openssl pkcs7 \
  -print_certs \
  -in certificate.p7b \
  -out certificates.pem

اگر P7B در DER است:

openssl pkcs7 \
  -inform DER \
  -print_certs \
  -in certificate.p7b \
  -out certificates.pem

استخراج Public Key از Private Key

openssl pkey \
  -in example.com.key \
  -pubout \
  -out public-key.pem

استخراج Public Key از Certificate:

openssl x509 \
  -in example.com.crt \
  -pubkey \
  -noout \
  > public-key-from-cert.pem

این روش برای مقایسه Key Pair و عملیات Cryptographic بسیار کاربردی است.

ساخت CSR از Certificate و Private Key موجود

اگر Certificate قبلی را دارید ولی CSR اصلی گم شده است:

openssl x509 \
  -in old-certificate.crt \
  -signkey example.com.key \
  -x509toreq \
  -out new-request.csr

بعد از ساخت حتماً SAN و Subject را بررسی کنید؛ چون Extensionهای موردنیاز Certificate جدید ممکن است نیازمند تعریف مجدد باشند.

خطاهای رایج OpenSSL و SSL

Private key does not match the certificate

معمولاً Certificate و Key متعلق به یک Pair نیستند.

راه‌حل:

openssl pkey -in example.com.key -pubout | sha256sum

openssl x509 -in example.com.crt -pubkey -noout | sha256sum

اگر Hash متفاوت است، فایل‌ها Match نیستند.


unable to get local issuer certificate

معمولاً Intermediate CA وجود ندارد یا Chain ناقص است.

Certificate Bundle یا Full Chain درست را نصب کنید.


certificate has expired

تاریخ را بررسی کنید:

openssl x509 \
  -in certificate.pem \
  -noout \
  -enddate

self signed certificate in certificate chain

ممکن است Root Certificate غیرقابل‌اعتماد در Chain ارسال شده باشد یا Trust Store مناسب وجود نداشته باشد.


no peer certificate available

دلایل احتمالی:

  • پورت اشتباه
  • TLS روی آن Port فعال نیست
  • Firewall اتصال را مسدود می‌کند
  • Server Handshake را Reject می‌کند

برای بررسی دسترسی پورت می‌توانید از ابزار Port Checker استفاده کنید.


wrong version number

این خطا اغلب زمانی دیده می‌شود که به یک Port بدون TLS با OpenSSL TLS Client متصل شده باشید.

برای مثال اگر HTTPS روی ۴۴۳ است ولی به Port یک HTTP Plaintext متصل شوید.

نکات امنیتی مهم هنگام کار با OpenSSL

  • Private Key را در اختیار CA یا شخص ثالث قرار ندهید.
  • Private Key را داخل Git Repository Commit نکنید.
  • Permission فایل Key را محدود کنید.
  • از ارسال خروجی کامل Private Key در Ticket خودداری کنید.
  • Backup رمزگذاری‌شده از Key داشته باشید.
  • اگر Key افشا شد، Certificate را Revoke و یک Key جدید ایجاد کنید.
  • Self-Signed Certificate را برای سایت عمومی استفاده نکنید.
  • قبل از نصب Certificate، SANها و Expiration را بررسی کنید.
  • Full Chain را روی Web Server به‌درستی نصب کنید.
  • Certificate Expiration را مانیتور کنید.

Private Key ریشه اعتماد Certificate است. اگر Private Key سرقت شود، صرف داشتن Certificate معتبر دیگر تضمین‌کننده امنیت Identity شما نیست.

OpenSSL و گواهی SSL خریداری‌شده چه ارتباطی دارند؟

برای دریافت Certificate از یک CA تجاری معمولاً Workflow به این صورت است:

  1. Private Key را روی Server تولید می‌کنید.
  2. CSR را از همان Key می‌سازید.
  3. CSR را برای CA ارسال می‌کنید.
  4. مالکیت دامنه یا سازمان تأیید می‌شود.
  5. Certificate صادر می‌شود.
  6. Certificate و Intermediate Chain را روی Server نصب می‌کنید.

اگر برای سایت خود به گواهی معتبر نیاز دارید، انواع Certificateهای DV، OV، EV و Wildcard را می‌توانید در صفحه خرید SSL پویاسازان بررسی کنید.

جدول سریع دستورات OpenSSL

کاردستور
نمایش نسخهopenssl version
ساخت RSA Keyopenssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out domain.key
ساخت CSRopenssl req -new -key domain.key -out domain.csr
مشاهده CSRopenssl req -in domain.csr -text -noout
مشاهده Certificateopenssl x509 -in domain.crt -text -noout
بررسی Expirationopenssl x509 -in domain.crt -noout -enddate
بررسی Keyopenssl pkey -in domain.key -check -noout
استخراج Public Keyopenssl pkey -in domain.key -pubout
تست HTTPSopenssl s_client -connect example.com:443 -servername example.com
نمایش Chainopenssl s_client -connect example.com:443 -servername example.com -showcerts
ساخت PFXopenssl pkcs12 -export -out cert.pfx -inkey domain.key -in domain.crt
PEM به DERopenssl x509 -in cert.pem -outform DER -out cert.der
DER به PEMopenssl x509 -inform DER -in cert.der -out cert.pem

سوالات متداول درباره OpenSSL، CSR و Private Key

OpenSSL چیست؟

OpenSSL یک Toolkit رمزنگاری و TLS است که ابزار Command-Line آن برای ساخت و مدیریت Private Key، CSR، X.۵۰۹ Certificate و تست اتصال TLS استفاده می‌شود.

CSR چیست؟

CSR یا Certificate Signing Request فایلی است که Public Key و اطلاعات موردنیاز برای درخواست صدور Certificate را در خود دارد.

Private Key چیست؟

Private Key کلید محرمانه‌ای است که برای اثبات مالکیت Key Pair استفاده می‌شود و نباید از کنترل مالک خارج شود.

آیا Private Key را باید برای صادرکننده SSL ارسال کنیم؟

خیر. فقط CSR برای CA ارسال می‌شود. Private Key باید روی سیستم یا زیرساخت تحت کنترل شما باقی بماند.

چطور بفهمم Certificate و Private Key با هم Match هستند؟

Public Key هر دو را استخراج و Hash آن‌ها را مقایسه کنید:

openssl pkey -in domain.key -pubout | sha256sum

openssl x509 -in domain.crt -pubkey -noout | sha256sum

اگر خروجی یکسان باشد، Match هستند.

چطور Certificate سایت را بدون Browser بررسی کنم؟

openssl s_client \
  -connect example.com:443 \
  -servername example.com

چطور تاریخ انقضای SSL سایت را بررسی کنم؟

اگر فایل Certificate را دارید:

openssl x509 -in certificate.pem -noout -enddate

برای سایت آنلاین نیز می‌توانید از SSL Checker پویاسازان استفاده کنید.

Self-Signed Certificate چیست؟

Certificateی است که به‌جای CA معتبر، با Private Key خودش Sign شده است. ارتباط را Encrypt می‌کند، اما Clientهای عمومی به‌صورت پیش‌فرض به آن Trust ندارند.

PEM چیست؟

PEM یک Encoding متنی Base64 است که معمولاً Certificate و Key را بین Header و Footerهایی مثل زیر نگه می‌دارد:

-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

PFX چیست؟

PFX یا PKCS#۱۲ Containerی است که می‌تواند Certificate، Private Key و CA Chain را داخل یک فایل نگه دارد. در Windows و IIS بسیار رایج است.

فرق CRT و PEM چیست؟

پسوند فایل لزوماً Format واقعی را مشخص نمی‌کند. فایل `.crt` ممکن است PEM یا DER باشد. برای تشخیص، محتوا و Encoding فایل را بررسی کنید.

چرا openssl s_client بدون -servername Certificate اشتباه نشان می‌دهد؟

چون Server ممکن است چند دامنه را روی یک IP میزبانی کند و برای انتخاب Certificate صحیح به SNI نیاز داشته باشد.

آیا OpenSSL فقط برای SSL قدیمی است؟

خیر. نام پروژه OpenSSL تاریخی است، اما ابزار آن برای TLS مدرن، از جمله TLS ۱.۲ و TLS ۱.۳ نیز استفاده می‌شود.

جمع‌بندی

OpenSSL یکی از ابزارهای ضروری برای مدیریت SSL/TLS روی سرور است. با آن می‌توان Private Key ساخت، CSR ایجاد کرد، Certificate را بررسی کرد، تاریخ انقضا را مانیتور کرد، Chain را اعتبارسنجی کرد، اتصال واقعی TLS را تست کرد و Certificateها را میان فرمت‌های مختلف تبدیل کرد.

سه اصل مهم را همیشه به خاطر داشته باشید: Private Key را محرمانه نگه دارید، قبل از نصب مطمئن شوید Certificate و Key با هم Match هستند و Certificate Chain را به‌صورت کامل روی Server نصب کنید.

اگر فقط می‌خواهید یک CSR بسازید، ابزار CSR Generator پویاسازان در دسترس است و برای بررسی Certificate نصب‌شده نیز می‌توانید از SSL Checker استفاده کنید. این دو ابزار در Sitemap فعلی سایت هم به‌عنوان ابزارهای مستقل منتشر شده‌اند. fileciteturn15file0

برای یادگیری مفاهیم پایه‌تر، مقاله SSL چیست؟ و برای درک تفاوت استانداردهای قدیمی و جدید، مقاله تفاوت SSL و TLS را مطالعه کنید. هر دو URL در Sitemap فعلی وبلاگ وجود دارند. fileciteturn15file7 fileciteturn15file12

منابع پیشنهادی

طبقه بندی شده در:

SSL و گواهی‌های امنیتی,

آخرین به روز رسانی: ۹ شهریور ۱۴۰۵