تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

رفع کامل و سریع انواع خطاهای SSL


۲۶ بهمن ۱۴۰۴

خلاصه کنید:

openaigeminiperplexity

اگر تا‌ به‌حال با خطای اتصال SSL مواجه شده‌اید، می‌دانید چقدر می‌تواند آزار دهنده باشد. این خطاها می‌توانند مانع برقراری یک ارتباط امن بین مرورگر شما یا برنامه‌ها و سرورها شوند و باعث شوند خدمات مهمی مانند وب‌گردی، ارسال ایمیل یا فراخوانی APIها مختل شوند. خطای اتصال SSL زمانی رخ می‌دهد که فرآیند TLS handshake شکست بخورد. به زبان ساده، وقتی کلاینت و سرور نتوانند به توافق برسند و اتصال امن HTTPS برقرار شود، این مشکل ممکن است در هر مرحله‌ای از توافق اولیه پروتکل تا بررسی نهایی گواهی‌نامه رخ دهد، و باعث نمایش پیام‌هایی مانند:

  • SSL connection failed
  • ERR_SSL_PROTOCOL_ERROR
  • SSL handshake failure

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

رایج‌ترین دلایل خطای SSL:

  • گواهینامه‌های SSL منقضی شده یا نامعتبر که نیاز به تمدید دارند.
  • گواهینامه‌های مرجع (CA) ناقص یا گمشده که مانع اعتبارسنجی صحیح می‌شوند.
  • ناسازگاری پروتکل‌ها بین نسخه‌های TLS کلاینت و سرور.
  • مشکلات همگام‌سازی ساعت سیستم که روی بررسی اعتبار گواهینامه تاثیر می‌گذارند.
  • مشکلات فایروال یا تنظیمات شبکه که ترافیک SSL را مسدود می‌کنند.

در این آموزش از وبلاگ لیارا، شما خواهید آموخت که چگونه خطاهای اتصال SSL را در پلتفرم‌ها و سناریو‌های مختلف تشخیص داده و رفع کنید. ما تکنیک‌های عیب‌یابی را برای مرورگرهای وب، ابزارهای خط فرمان و پیکربندی‌های سرور پوشش خواهیم داد تا بتوانید این مشکلات را سریع برطرف کرده و اتصالات امن برای اپلیکیشن‌ها و سرویس‌های خود داشته باشید.

رفع کامل و سریع انواع خطاهای SSL

آنچه در این مقاله می‌خوانید:

  • پیش نیازها
  • خطای اتصال SSL چیست؟
  • علت های اصلی خطاهای اتصال SSL در وب سایت ها کدامند؟
  • رایج ترین اشتباهاتی که باعث خطاهای اتصال SSL می‌شوند
  • بهترین روش برای پیشگیری از خطاهای اتصال SSL چیست؟
  • تحلیل کدهای رایج خطای اتصال SSL
  • ابزارها و دستورات برای عیب یابی خطاهای SSL کدامند؟
  • رفع مشکل ناسازگاری نسخه SSL/TLS
  • رفع مشکل گواهی مرجع صدور
  • سوالات متداول
  • نتیجه گیری

پیش نیازها

قبل از شروع این راهنما، شما به موارد زیر نیاز خواهید داشت:

  • یک سرور مجازی Ubuntu یا هر توزیع دیگر لینوکس. برای آموزش نحوه راه‌اندازی سرور مجازی اوبونتو این مقاله را مطالعه کنید.
  • دسترسی root یا sudo روی سرور
  • آشنایی با خط فرمان لینوکس، که می‌توانید مقاله آشنایی با خط فرمان لینوکس را مطالعه کنید.
  • یک نام دامنه که به سرور شما اشاره کند.
  • درک پایه‌ای از مفاهیم SSL/TLS
SSL چیست؟
SSL

خطای اتصال SSL چیست؟

در طول فرآیند TLS Handshake، کلاینت و سرور برای برقراری یک ارتباط امن چند مرحله را طی می‌کنند. در این مراحل اطلاعاتی مانند نسخه پروتکل، مجموعه الگوریتم‌های رمزنگاری و گواهی‌های امنیتی بین دو طرف رد و بدل می‌شود. اگر در هر یک از این بررسی‌ها مشکلی رخ دهد، ارتباط قطع شده و خطای SSL connect error نمایش داده می‌شود.

نمونه‌های رایج این خطا در ابزارها و زبان‌های مختلف:

  • curl: (35) SSL connect error
  • SSL: CERTIFICATE_VERIFY_FAILED‎ (در کتابخانهٔ Python Requests)
  • ERR_SSL_PROTOCOL_ERROR‎ (در مرورگر Chrome)
  • handshake_failure‎ (در OpenSSL)

تصویر زیر مراحل اصلی یک TLS Handshake را نشان می‌دهد:

علت های اصلی خطاهای اتصال SSL در وب سایت ها کدامند؟

در این بخش به مهم‌ترین دلایلی که منجر به خطای اتصال SSL می‌شود، می‌پردازیم.

علت خطاراه‌حل سریع
گواهی منقضی‌شده یا Self-Signedتمدید با Let’s Encrypt یا نصب گواهی از یک مرکز صدور معتبر (CA)
عدم تطابق نام میزبان (CN/SAN)صدور مجدد گواهی با دامنه یا دامنه‌های صحیح
نبود گواهی میانی (Intermediate CA)نصب کامل گواهی‌ها روی سرور (گواهی اصلی + میانی)
ناسازگاری نسخه TLSفعال‌سازی TLS 1.2 یا 1.3 روی سرور و به‌روزرسانی کتابخانه‌های کلاینت
اختلاف ساعت سیستمهمگام‌سازی زمان سیستم با NTP (مثلا timedatectl set-ntp true)
مداخله آنتی‌ویروس یا پروکسیغیرفعال کردن بررسی HTTPS یا اعتماد به Root CA پروکسی
شکست در اعتبارسنجی گواهیبررسی کامل زنجیره: گواهی ریشه → میانی → اصلی
ناسازگاری Cipher Suiteپیکربندی Cipher Suiteهای مدرن مانند TLS_AES_256_GCM_SHA384 و TLS_CHACHA20_POLY1305_SHA256
عدم اعتماد به Certificate Authority (CA)افزودن CA به سیستم اعتماد یا استفاده از CAهای معتبر جهانی
ابطال گواهی (CRL/OCSP)بررسی وضعیت گواهی از طریق OCSP یا نقاط توزیع CRL
مشکلات رزولوشن DNSاطمینان از صحت رکوردهای DNS و رزولوشن صحیح دامنه
مسدود شدن توسط فایروال یا شبکهباز کردن دسترسی به پورت HTTPS (443) و OCSP (80/443)
خطا در پیکربندی سروربررسی تنظیمات SSL در وب‌سرور (Apache یا Nginx)
نیاز به گواهی کلاینتپیکربندی صحیح mTLS یا غیرفعال کردن آن در صورت عدم نیاز
ثبت نشدن در Certificate Transparencyاطمینان از ثبت گواهی در CT Logs برای رعایت استانداردها

انواع خطاهای SSL Connect چیست و چگونه می‌توان آن‌ها را رفع کرد؟

در این بخش به انواع متنوع خطاهای SSL و همچنین راه‌حل‌های آن‌ها خواهیم پرداخت.

۱- گواهی منقضی شده یا Self-Signed

مشکل: زمانی که گواهینامه‌ها منقضی می‌شوند، مرورگرها و کلاینت‌ها آن‌ها را غیرقابل اعتماد می‌دانند و اتصال را رد می‌کنند، گواهی‌های Self-Signed به دلیل نداشتن اعتبارسنجی از یک CA، به سرعت رد می‌شوند.

راه‌حل‌ها

  • برای گواهی‌های منقضی شده: گواهی‌ها را قبل از تاریخ انقضا تمدید کنید. می‌توانید از ابزارهای خودکار مانند Certbot با Let’s Encrypt استفاده کنید:
sudo certbot renew --dry-run  # Test renewal process
sudo certbot renew            # Actual renewal
  • برای گواهی‌های Self-Signed: گواهی را با یک گواهی معتبر از یک CA جایگزین کنید:
    • نظارت بر گواهی‌ها،از ابزارهایی مانند Nagios یا Zabbix برای بررسی وضعیت گواهی‌ها استفاده کنید.
    • استفاده از Let’s Encrypt (رایگان) مانند، sudo certbot --nginx -d yourdomain.com
    • تمدید خودکار: با تنظیم cron job، تمدید گواهی‌ها به صورت خودکار انجام شود:
0 12 * * * /usr/bin/certbot renew --quiet

۲- عدم تطابق نام میزبان(CN/SAN)

مشکل: نام عمومی (Common Name- CN) یا با نام‌های جایگزین موضوعی در گواهی باید دقیقا با دامنه‌ای که درخواست می‌شود، مطابقت داشته باشد. گواهی‌های (Wildcard (*.example.com تنها یک سطح از زیردامنه‌ها را پوشش می‌دهند.

راه‌حل‌ها

  • بررسی جزئیات گواهی فعلی: مطمئن شوید که CN و SAN صحیح هستند:
openssl s_client -connect example.com:443 -servername example.com
  • صدور مجدد گواهی با دامنه‌های صحیح
# For Nginx
ssl_certificate /path/to/certificate.crt;
ssl_certificate_key /path/to/private.key;

# For Apache
SSLCertificateFile /path/to/certificate.crt
SSLCertificateKeyFile /path/to/private.key
SSLCertificateChainFile /path/to/chain.crt
  • برای گواهی‌های Wildcard: از روش DNS Challenge استفاده کنید:
openssl verify -CAfile /path/to/ca-bundle.crt certificate.crt
  • بررسی پوشش دامنه‌ها: مطمئن شوید که همه‌ی زیردامنه‌هایی که نیاز دارید در فیلد SAN (Subject Alternative Name) قرار گرفته‌اند.

۳. نبودن Intermediate CA (گواهی واسطه‌ای)

مشکل: سرورها باید کل زنجیره‌ی گواهی را ارائه دهند. اگر گواهی‌های واسطه (Intermediate Certificates) وجود نداشته باشند، کلاینت‌ها نمی‌توانند زنجیره را از گواهی نهایی (Leaf) تا روت CA اعتبارسنجی کنند و در نتیجه خطای اعتبارسنجی رخ می‌دهد.

راه‌حل‌ها

  • بررسی کامل بودن گواهی
openssl s_client -connect example.com:443 -servername example.com
  • نصب زنجیره‌ی کامل روی سرور
# For Nginx
ssl_certificate /path/to/certificate.crt;
ssl_certificate_key /path/to/private.key;

# For Apache
SSLCertificateFile /path/to/certificate.crt
SSLCertificateKeyFile /path/to/private.key
SSLCertificateChainFile /path/to/chain.crt

برای دانلود گواهی‌های واسطه‌ای گم‌شده، از پکیج Intermediate Certificate ارائه‌شده توسط CA استفاده کنید.

  • تست اعتبارسنجی زنجیره
openssl verify -CAfile /path/to/ca-bundle.crt certificate.crt

۴. ناسازگاری نسخه‌ی TLS

مشکل: نسخه‌های قدیمی TLS (مثل ۱.۰ و ۱.۱) منسوخ و ناامن هستند. کلاینت‌های امروزی نیاز به TLS 1.2 یا TLS 1.3 دارند. بنابراین سرورها باید این نسخه‌ها را همراه با Cipher Suiteهای امن پشتیبانی کنند.

راه‌حل‌ها

  • فعال‌سازی نسخه‌های مدرن TLS
# Nginx configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# Apache configuration
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder on
SSLCompression off
  • تست پیکربندی TLS
nmap --script ssl-enum-ciphers -p 443 example.com
  • به‌روزرسانی کتابخانه‌های کلاینت

۵. اختلاف ساعت سیستم (System Clock Skew)

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

راه‌حل‌ها

  • همگام‌سازی ساعت سیستم
sudo timedatectl set-ntp true
sudo systemctl enable systemd-timesyncd
sudo systemctl start systemd-timesyncd
  • بررسی همگام‌سازی ساعت سیستم
timedatectl status
ntpq -p  # If using NTP
  • تنظیم صحیح منطقه زمانی (Timezone)
sudo timedatectl set-timezone UTC
  • مانیتورینگ اختلاف ساعت: برای جلوگیری از خطای System Clock Skew و اطمینان از صحت اعتبارسنجی گواهی‌ها، هشدارهای زمان‌بندی شده راه‌اندازی کنید.

۶. بررسی مداخله آنتی‌ویروس یا پراکسی

مشکل: بسیاری از نرم‌افزارهای امنیتی ترافیک HTTPS را برای بررسی و اسکن می‌کنند و گواهی‌های خود را جایگزین گواهی اصلی می‌کنند. این موضوع باعث مشکلات اعتماد (Trust) می‌شود، مگر اینکه گواهی CA مربوط به پراکسی در سیستم مورد اعتماد قرار گرفته باشد.

راه‌حل‌ها:

  • غیرفعال کردن بررسی HTTPS برای دامنه‌های معتبر در تنظیمات آنتی‌ویروس
  • اضافه کردن گواهی CA پراکسی
# Copy proxy CA certificate to system
sudo cp proxy-ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
  • پیکربندی برنامه‌ها برای اعتماد به گواهی CA پراکسی
# For curl
curl --cacert /path/to/proxy-ca.crt https://example.com

# For Python requests
requests.get('https://example.com', verify='/path/to/proxy-ca.crt')
  • استفاده از Certificate Pinning در برنامه‌های حیاتی برای جلوگیری از حملات MITM

۷. خطای اعتبارسنجی گواهی

مشکل: کل گواهی باید قابل اعتبارسنجی باشد: گواهی نهایی (Leaf Certificate) → گواهی واسطه (Intermediate CA) → گواهی ریشه (Root CA). هر لینک ناقص یا خراب باعث شکست اعتبارسنجی می‌شود.

راه‌حل‌ها

  • بررسی کامل بودن گواهی
openssl verify -verbose -CAfile /path/to/ca-bundle.crt certificate.crt
  • بررسی ترتیب گواهی‌ها: اطمینان حاصل کنید که گواهی‌ها به ترتیب صحیح قرار دارند (ابتدا گواهی نهایی، سپس واسطه‌ها)
  • دانلود پکیج‌های به‌روزرسانی شده CA
# Update system CA certificates
sudo update-ca-certificates

# Download latest Mozilla CA bundle
curl -o ca-bundle.crt https://curl.se/ca/cacert.pem
  • آزمایش با ابزارهای مختلف
openssl s_client -connect example.com:443 -servername example.com -verify_return_error

۸. ناسازگاری Cipher Suite

مشکل: استانداردهای امنیتی مدرن نیازمند استفاده از Cipher Suiteهای قوی هستند. Cipherهای ضعیف یا منسوخ توسط مرورگرها و کلاینت‌های امروزی رد می‌شوند.

راه‌حل‌ها

  • پیکربندی Cipher Suiteهای امن
# Nginx - Modern configuration
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
  • تست سازگاری Cipherها
nmap --script ssl-enum-ciphers -p 443 example.com
  • فعال‌سازی HTTP/2 و OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;

۹. عدم اعتماد به مرجع صدور گواهی

مشکل: کلاینت‌ها تنها به گواهی‌هایی اعتماد می‌کنند که از CAs موجود در Trust Store آن‌ها صادر شده باشند. CAs ناشناخته یا سفارشی نیازمند پیکربندی اعتماد صریح هستند.

راه‌حل‌ها

  • استفاده از CAs معتبر و جهانی
  • افزودن CA سفارشی به Trust Store سیستم
# System-wide installation
sudo cp custom-ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

# Application-specific
export SSL_CERT_FILE=/path/to/custom-ca-bundle.crt
  • بررسی شناسایی و اعتماد به مرجع صدور گواهی (CA)
openssl verify -CAfile /path/to/ca-bundle.crt certificate.crt

۱۰. ابطال گواهی (Certificate Revocation)

مشکل: گواهی‌های ابطال‌شده (از طریق CRL یا OCSP) به‌صورت فوری رد می‌شوند. اتصال شبکه به سرورهای ابطال برای اعتبارسنجی ضروری است.

راه‌حل‌ها

  • بررسی وضعیت ابطال گواهی (Certificate Revocation Status)
openssl s_client -connect example.com:443 -servername example.com -crl_check
  • فعال‌سازی OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
  • پیکربندی قوانین فایروال: اجازه برقراری اتصال خروجی به سرورهای پاسخ‌دهنده OCSP
  • مانیتورینگ لیست‌های ابطال: راه‌اندازی هشدار برای گواهی‌های ابطال‌شده

۱۱. مشکلات رزولوشن DNS

مشکل: خطاهای رزولوشن DNS مانع از دسترسی کلاینت‌ها به سرور می‌شوند و باعث شکست SSL Handshake می‌گردند. این مشکلات می‌توانند شامل رکوردهای A/AAAA نادرست، تاخیر در انتشار DNS (DNS Propagation) یا مشکلات سرور DNS باشند.

راه‌حل‌ها

  • بررسی و اعتبارسنجی رکوردهای DNS
# Check A and AAAA records
dig example.com A
dig example.com AAAA

# Check from different locations
nslookup example.com 8.8.8.8
nslookup example.com 1.1.1.1
  • تست انتشار رکوردهای DNS
# Use online tools or multiple DNS servers
for server in 8.8.8.8 1.1.1.1 208.67.222.222; do
  echo "Testing $server:"
  nslookup example.com $server
done
  • بررسی پیکربندی DNS
# Verify local DNS settings
cat /etc/resolv.conf

# Test DNS resolution
host example.com
  • مانیتورینگ سالم بودن DNS: راه‌اندازی سیستم هشدار برای خطاهای رزولوشن DNS

۱۲. مسدود بودن فایروال یا شبکه

مشکل: ترافیک HTTPS و OCSP باید از فایروال‌ها عبور کند. مسدود شدن این ارتباطات باعث شکست اعتبارسنجی گواهی و تکمیل نشدن SSL Handshake می‌شود.

راه‌حل‌ها

  • پیکربندی قوانین فایروال (Configure Firewall Rules)
# Allow HTTPS traffic (port 443)
sudo ufw allow 443/tcp

# Allow OCSP traffic (port 80 for OCSP responders)
sudo ufw allow 80/tcp

# Check firewall status
sudo ufw status verbose
  • تست اتصال شبکه (Test Connectivity)
# Test HTTPS connectivity
telnet example.com 443

# Test OCSP responder connectivity
curl -I http://ocsp.digicert.com
  • پیکربندی iptables (در صورت استفاده)
# Allow HTTPS traffic
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Allow OCSP traffic
sudo iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
  • بررسی سیاست‌های شبکه: صحت فایروال‌ها و تنظیمات پروکسی سازمانی را تأیید کنید.

۱۳. خطاهای پیکربندی سرور

مشکل: وب‌سرورها باید برای SSL/TLS به‌درستی پیکربندی شوند. دستورات نادرست می‌توانند باعث شکست SSL Handshake، ناسازگاری پروتکل‌ها یا ایجاد آسیب‌پذیری‌های امنیتی شوند.

راه‌حل‌ها

  • پیکربندی SSL در Nginx
server {
    listen 443 ssl http2;
    server_name example.com;
    
    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/private.key;
    
    # Strong SSL configuration
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512;
    ssl_prefer_server_ciphers off;
    
    # Security headers
    add_header Strict-Transport-Security "max-age=63072000" always;
}
  • پیکربندی SSL در Apache 
<VirtualHost *:443>
    ServerName example.com
    SSLEngine on
    SSLCertificateFile /path/to/certificate.crt
    SSLCertificateKeyFile /path/to/private.key
    
    # Strong SSL configuration
    SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
    SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256
</VirtualHost>
  • تست پیکربندی
# Test Nginx configuration
sudo nginx -t

# Test Apache configuration
sudo apache2ctl configtest
  • مانیتورینگ SSL Handshake: استفاده از ابزارهایی مانند ssldump یا tcpdump برای تحلیل خطاهای Handshake

۱۴. احراز هویت با گواهی مشتری

مشکل: Mutual TLS (mTLS) نیازمند گواهی‌های هر دو طرف، هم سرور و هم کلاینت است. پیکربندی نادرست باعث شکست احراز هویت می‌شود و ارتباط امن برقرار نمی‌شود.

راه‌حل‌ها

  • پیکربندی سرور برای استفاده از گواهی‌های کلاینت (Configure Server for Client Certificates)
server {
    listen 443 ssl http2;
    server_name example.com;
    
    ssl_certificate /path/to/server.crt;
    ssl_certificate_key /path/to/server.key;
    
    # Client certificate configuration
    ssl_client_certificate /path/to/ca-bundle.crt;
    ssl_verify_client on;
    ssl_verify_depth 2;
}
  • ایجاد گواهی‌های کلاینت
# Generate client private key
openssl genrsa -out client.key 2048

# Generate client certificate signing request
openssl req -new -key client.key -out client.csr

# Sign client certificate
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365
  • تست احراز هویت با گواهی کلاینت
# Test with curl
curl --cert client.crt --key client.key https://example.com

# Test with OpenSSL
openssl s_client -connect example.com:443 -cert client.crt -key client.key
  • بررسی گواهی: مطمئن شوید که گواهی‌های کلاینت توسط CAهای معتبر امضا شده باشند.

۱۵. لاگ‌های شفافیت گواهی

مشکل: مرورگرهای مدرن نیاز دارند که گواهی‌ها در لاگ‌های Certificate Transparency (CT) ثبت شوند. عدم رعایت این موضوع باعث نمایش هشدار یا رد گواهی می‌شود و بر اعتماد کاربران تأثیر می‌گذارد.

راه‌حل‌ها

  • بررسی انطباق با CT
# Check certificate CT status
openssl s_client -connect example.com:443 -servername example.com | openssl x509 -noout -text | grep -A 5 "X509v3 Certificate Transparency"
  • مانیتورینگ لاگ‌های شفافیت گواهی
# Check certificate in CT logs
curl "https://crt.sh/?q=%.example.com&output=json" | jq '.[] | {id, name_value, not_before, not_after}'
  • پیکربندی مانیتورینگ لاگ‌های شفافیت گواهی
# Set up CT monitoring with tools like certspotter
certspotter-watcher --domain example.com --webhook-url https://your-webhook.com
  • سازگاری مرورگر: گواهی را در مرورگرهای مختلف تست کنید تا انطباق با CT تأیید شود.
تفاوت های مهم وکلیدی TLS و SSL را در مقاله زیر می‌توانید مطالعه کنید.
TLS در مقابل SSL

رایج ترین اشتباهاتی که باعث خطاهای اتصال SSL می‌شوند

در ادامه، مهم‌ترین اشتباهات رایج در پیکربندی SSL/TLS، اثرات آن‌ها و رویکردهای صحیح برای رفع آن‌ها ارائه شده است.

اشتباهاثررویکرد صحیح
Treating SSL and TLS as interchangeable in configsفعال شدن SSLv3 قدیمی و آسیب‌پذیری در برابر حمله POODLEغیر فعال کردن SSLv3 و TLS 1.0؛ استفاده از TLS 1.2 به بالا
Telling users to “just add -k”غیرفعال شدن بررسی گواهی و ایجاد ریسک MITMرفع مشکل گواهی به جای غیرفعال کردن بررسی
No platform-specific guidanceتوسعه‌دهندگان از Flagهای نادرست استفاده می‌کنند (مثلاً requests.verify=False)ارائه مثال‌های عملی برای curl، Python و Node.js
Ignoring root causes like expired certsقطعی‌های مکرر و آسیب‌پذیری‌های امنیتیخودکارسازی فرآیند تمدید و مانیتورینگ گواهی‌ها
Using self-signed certificates in productionهشدار مرورگر، عدم اعتماد کاربران، ریسک‌های امنیتیاستفاده از گواهی‌های CA معتبر (Let’s Encrypt یا CAهای تجاری)
Not validating certificate chainsاعتبارسنجی ناقص، شکاف‌های امنیتی احتمالیبررسی کامل گواهی: Root CA → Intermediate CA → Leaf Certificate
Disabling SSL verification in productionدور زدن بررسی‌های امنیتی و ایجاد امکان حملههمیشه بررسی گواهی فعال باشد؛ مشکلات زیربنایی را رفع کنید
Not monitoring certificate expirationقطعی‌های غیرمنتظره هنگام انقضای گواهی‌هاپیاده‌سازی مانیتورینگ و تمدید خودکار گواهی‌ها
Using weak cipher suitesآسیب‌پذیری در برابر حملات و وضعیت امنیتی ضعیفپیکربندی Cipher Suiteهای مدرن (مثلاً TLS_AES_256_GCM_SHA384)
Ignoring hostname validationخطاهای مطابقت گواهی و ریسک‌های امنیتیاطمینان از مطابقت دقیق CN/SAN با نام دامنه‌ها

بهترین روش برای پیشگیری از خطاهای اتصال SSL چیست؟

در این بخش، بهترین شیوه‌ها برای جلوگیری از خطاهای اتصال SSL ارائه شده است. این جدول به توسعه‌دهندگان و مدیران سیستم کمک می‌کند تا:

  • فرآیند مدیریت گواهی‌ها را خودکارسازی کنند،
  • پیکربندی TLS قوی و مطابق استانداردهای مدرن داشته باشند،
  • اعتبارسنجی کامل گواهی‌ها را انجام دهند،
  • وضعیت گواهی‌ها و OCSP را مانیتور کنند،
  • و مراحل تست، مستندسازی و بازیابی را به صورت منظم اجرا کنند.
بهترین شیوهتوضیحپیاده‌سازی
مدیریت خودکار گواهی‌هااستفاده از ابزارهایی مثل Certbot برای تمدید خودکارsudo certbot renew --quiet همراه با Cron Jobs
پیکربندی TLS قویاعمال حداقل TLS 1.2 و ترجیح TLS 1.3پیکربندی وب‌سرورها با تنظیمات SSL مدرن
اعتبارسنجی گواهیبررسی کامل سلسله‌مراتب گواهیاستفاده از openssl s_client -showcerts برای اعتبارسنجی
مانیتورینگ و هشداردهیپیگیری انقضای گواهی و وضعیت OCSPراه‌اندازی مانیتورینگ با ابزارهایی مثل Nagios یا Zabbix
ممیزی امنیتی منظمبررسی پیکربندی SSL/TLS به صورت دوره‌ایاستفاده از ابزارهایی مانند SSL Labs و TestSSL.sh
مدیریت صحیح خطاهاپیاده‌سازی fallback مناسب و ثبت لاگ‌هاثبت خطاهای SSL برای رفع مشکل بدون افشای اطلاعات حساس
مستندسازی و رویه‌هانگهداری راهنماهای واضح برای رفع مشکلاتمستندسازی مشکلات رایج و روش‌های حل آن‌ها
تست در محیط Stagingاعتبارسنجی پیکربندی قبل از تولیدتست گواهی‌ها و تنظیمات در محیط Staging
پشتیبان‌گیری و بازیابیحفظ نسخه‌های پشتیبان و رویه‌های بازیابیذخیره امن گواهی‌ها با کنترل دسترسی مناسب
مانیتورینگ انطباقاطمینان از رعایت استانداردهای امنیتیممیزی دوره‌ای برای PCI DSS، SOC 2 یا استانداردهای صنعتی
نحوه دریافت SSL در Nginx در سرور مجازی اوبونتو Ubuntu با Let’s Encrypt
نحوه دریافت SSL در Nginx در سرور مجازی اوبونتو

تحلیل کدهای رایج خطای اتصال SSL

رایج‌ترین کدهای خطای اتصال SSL و دلایل احتمالی آن‌ها در جدول زیر آورده شده است.

کلاینتکد خطاعلت احتمالیمراحل تشخیصی
curl(35) SSL connect errorشکست عمومی در SSL Handshakeاجرای curl -v برای بررسی جزئیات Handshake
curl(60) SSL certificate problemفقدان گواهی واسطه یا مشکل در گواهیبررسی گواهی با openssl s_client -showcerts
PythonCERTIFICATE_VERIFY_FAILEDگواهی منقضی شده یا عدم تطابق Hostnameبررسی تاریخ گواهی و اطمینان از مطابقت CN/SAN با دامنه
Node.jsUNABLE_TO_VERIFY_LEAF_SIGNATUREناقص بودن گواهینصب گواهی‌های واسطه گم‌شده
OpenSSLhandshake failureناسازگاری نسخه پروتکل یا Cipher Suiteبررسی پروتکل‌های پشتیبانی شده با openssl ciphers -v

ابزارها و دستورات برای عیب یابی خطاهای SSL کدامند؟

برای تشخیص خطاهای اتصال SSL، داشتن ابزارها و دستورات مناسب ضروری است. در ادامه، ابزارهای متداول به همراه توضیح و مثال کاربردی آمده است:

ابزار / دستورتوضیحمثال کاربردی
OpenSSLابزار خط فرمان برای پیکربندی SSL/TLS و بررسی جزئیات گواهی‌ها. می‌توان از آن برای بررسی اتصال SSL/TLS، جزئیات گواهی و تست نسخه‌های SSL/TLS استفاده کرد.openssl s_client -connect example.com:443 برای بررسی اتصال SSL/TLS و نمایش جزئیات گواهی
Curl با حالت Verbose (-v)فعال کردن حالت verbose برای مشاهده جزئیات فرآیند Handshake SSL/TLS. این کار کمک می‌کند مشکلات اتصال را دقیق‌تر شناسایی کنید.curl -v https://example.com برای بررسی دقیق Handshake SSL/TLS و شناسایی مشکلات احتمالی
Nmapابزار بررسی شبکه برای اسکن نسخه‌های SSL/TLS و Cipher Suiteها. می‌توان برای بررسی نسخه‌های پشتیبانی شده SSL/TLS و Cipher Suiteهای سرور استفاده کرد.nmap --script ssl-enum-ciphers -p 443 example.com برای اسکن نسخه‌های SSL/TLS و Cipher Suiteهای پشتیبانی شده توسط example.com در پورت 443
SSL Labs Testابزار آنلاین برای تست و ارزیابی پیکربندی SSL/TLS. گزارش جامعی از پیکربندی، نسخه پروتکل‌ها، Cipher Suiteها و جزئیات گواهی ارائه می‌دهد.https://www.ssllabs.com/ssltest/ برای تست پیکربندی SSL/TLS و دریافت گزارش کامل
TestSSL.shاسکریپت برای تست پیکربندی SSL/TLS و شناسایی آسیب‌پذیری‌ها. امکان تست دقیق پیکربندی و شناسایی نقاط ضعف احتمالی را فراهم می‌کند../testssl.sh example.com برای تست پیکربندی SSL/TLS و شناسایی آسیب‌پذیری‌های احتمالی

فلگ -v در دستور curl حالت verbose را فعال می‌کند. این حالت اطلاعات جزئی و کامل درباره فرآیند SSL/TLS Handshake ارائه می‌دهد. با استفاده از این حالت می‌توانید مشکلات احتمالی اتصال SSL/TLS را شناسایی کنید، مانند:

  • خطاهای اعتبارسنجی گواهی (Certificate Validation Errors)
  • ناسازگاری نسخه‌های SSL/TLS بین کلاینت و سرور

مثال کاربردی:

curl -v https://example.com

برای درک بهتر خروجی ابزارها و دستورات مشابه، می‌توان به خروجی نمونه دستور OpenSSL نگاه کرد. به عنوان مثال، اجرای دستور زیر:

openssl s_client -connect example.com:443

ممکن است خروجی‌ای مانند زیر تولید کند که شامل جزئیات اتصال، گواهی‌ها و نسخه‌های TLS پشتیبانی شده توسط سرور است. با تحلیل این خروجی می‌توانید بررسی کنید که:

  • گواهی‌ها به درستی نصب شده‌اند یا خیر
  • گواهی کامل است یا نقص دارد
  • نسخه‌های TLS و Cipher Suiteهای سازگار کدامند

به طور خلاصه، استفاده از حالت verbose در curl و دستور OpenSSL به شما یک تصویر دقیق از فرآیند SSL/TLS می‌دهد و کمک می‌کند هر گونه مشکل در اتصال امن را سریع شناسایی و رفع کنید.

Let’s Encrypt چیست؟ گواهی SSL رایگان برای امنیت وب‌سایت‌ها
Let’s Encrypt چیست؟

رفع مشکل ناسازگاری نسخه SSL/TLS

این خطا زمانی رخ می‌دهد که کلاینت و سرور نتواند روی یک نسخه مشترک SSL/TLS به توافق برسند. دلیل می‌تواند عدم پشتیبانی سرور از نسخه درخواستی کلاینت یا عدم پشتیبانی کلاینت از نسخه مورد نیاز سرور باشد.

تشخیص مشکل

۱. با OpenSSL:

openssl s_client -connect example.com:443 -servername example.com
  • اتصال به سرور را شبیه‌سازی می‌کند و فرآیند Handshake را نمایش می‌دهد.
  • به دنبال خط‌هایی باشید که نسخه SSL/TLS را نشان می‌دهند، مثلاً:
New, TLSv1.2, Cipher is ECDHE-RSA-AES256-GCM-SHA384
  • اگر نسخه‌های سرور و کلاینت مطابقت نداشته باشند، اتصال شکست می‌خورد و خروجی نشان‌دهنده ناسازگاری خواهد بود.

۲. با Curl (حالت Verbose):

curl -v https://example.com
  • حالت verbose جزئیات Handshake SSL/TLS را نمایش می‌دهد.
  • خروجی شامل نسخه‌های پشتیبانی شده توسط کلاینت است، مثلا:
SSLv3, TLSv1.0, TLSv1.1, TLSv1.2
  • اگر سرور هیچ یک از این نسخه‌ها را پشتیبانی نکند، اتصال با خطا مواجه خواهد شد.

رفع مشکل

۱. پیکربندی سرور

  • مطمئن شوید که سرور نسخه‌های SSL/TLS مورد نیاز کلاینت‌ها را پشتیبانی می‌کند.
  • ممکن است نیاز به به‌روزرسانی نرم‌افزار سرور یا تنظیم دستی نسخه‌های SSL/TLS باشد.

۲. پیکربندی کلاینت

  • مطمئن شوید کلاینت نسخه‌های مورد نیاز سرور را پشتیبانی می‌کند.
  • ممکن است نیاز به به‌روزرسانی نرم‌افزار کلاینت یا تنظیم دستی نسخه‌ها باشد.

۳. بررسی سازگاری نسخه‌ها

  • نسخه‌های پشتیبانی شده توسط کلاینت و سرور را بررسی و یک نسخه مشترک پیدا کنید.

با استفاده از OpenSSL و Curl -v برای تشخیص و اطمینان از سازگاری نسخه‌های SSL/TLS بین سرور و کلاینت، می‌توان مشکلات رایج ناسازگاری را رفع کرده و اتصال امن برقرار کرد.

رفع مشکل گواهی مرجع صدور

مشکل:

این خطا زمانی رخ می‌دهد که کلاینت نتواند گواهی ارائه شده توسط سرور را اعتبارسنجی کند، معمولا به دلیل:

  • نبود گواهی واسطه (Intermediate CA)
  • ناقص بودن زنجیره گواهی

در این حالت، کلاینت نمی‌تواند زنجیره اعتماد کامل تا Root CA را بسازد.

تشخیص مشکل

با OpenSSL:

openssl s_client -showcerts -connect example.com:443
  • اتصال به سرور را شبیه‌سازی می‌کند و زنجیره کامل گواهی‌ها را نمایش می‌دهد.
  • خروجی شامل همه گواهی‌های واسطه (Intermediate CA) خواهد بود

مثال خطای مربوط به گواهی واسطه ناقص:

depth=1 C = US, O = Example Intermediate CA, OU = Example Intermediate CA, CN = Example Intermediate CA
verify error:num=20:unable to get local issuer certificate
  • این خروجی نشان می‌دهد که گواهی واسطه‌ای گم شده و کلاینت نمی‌تواند هویت سرور را معتبرسازی کند.

رفع مشکل

نصب گواهی واسطه گم‌شده روی سرور:

  • گواهی Intermediate CA را روی سرور نصب کنید تا سرور زنجیره کامل گواهی را ارائه دهد.
  • این کار باعث می‌شود کلاینت‌ها بتوانند هویت سرور را به درستی اعتبارسنجی کنند.

با استفاده از OpenSSL برای تشخیص و رفع مشکلات زنجیره گواهی، می‌توان مطمئن شد که سرور زنجیره گواهی کامل و قابل اعتبارسنجی ارائه می‌دهد و اتصال امن با کلاینت برقرار می‌شود.

سوالات متداول

۱. خطای SSL Connect چیست؟

خطای SSL Connect زمانی رخ می‌دهد که کلاینت (مثلاً مرورگر، API یا ابزار خط فرمان) نتواند اتصال امن با سرور برقرار کند. علت این مشکل معمولاً یکی از موارد زیر است:

  • ناسازگاری نسخه‌های SSL/TLS بین کلاینت و سرور
  • مشکلات اعتبارسنجی گواهی‌ها
  • پیکربندی نادرست سرور یا کلاینت
  • موانع شبکه یا فایروال

۲. رفع خطای SSL Connect در curl

۱. بررسی گواهی سرور:

openssl s_client -connect example.com:443
  • اطلاعات کامل گواهی سرور، شامل تاریخ انقضا را نمایش می‌دهد.
  • اطمینان حاصل کنید گواهی معتبر و منقضی نشده باشد.

۲. بررسی نسخه SSL/TLS:

curl -v https://example.com

۳. بررسی شبکه و فایروال:

telnet example.com 443
  • مطمئن شوید که ترافیک SSL مسدود نشده است.

۴. استفاده از گزینه -k (فقط برای تست):

curl -k https://example.com
  • این گزینه بررسی گواهی را غیرفعال می‌کند و تنها برای تست یا رفع موقت مشکل توصیه می‌شود، نه در محیط تولید.

۳. رفع خطاهای SSL Connect در Python

خطاهای اتصال در Python می‌توانند ناشی از موارد زیر باشند:

  • نسخه SSL/TLS ناسازگار
  • گواهی ناقص یا نامعتبر
  • همگام نبودن ساعت سیستم
  • پیکربندی نادرست کتابخانه SSL

نمونه کد برای تعیین نسخه TLS و اعتبارسنجی گواهی:

import ssl
import socket

# پیکربندی Context با TLS 1.2
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
context.verify_mode = ssl.CERT_REQUIRED
context.check_hostname = True
context.load_verify_locations('/path/to/trusted/ca/certificates')

with socket.create_connection((host, port), timeout=timeout) as sock:
    with context.wrap_socket(sock, server_hostname=host) as ssock:
        # عملیات روی اتصال امن
        pass

همگام‌سازی ساعت سیستم:

  • از ابزارهایی مثل ntp یا chrony برای همگام کردن ساعت استفاده کنید تا اعتبارسنجی گواهی به درستی انجام شود.

بررسی پیکربندی کتابخانه SSL:

  • مطمئن شوید کتابخانه SSL در محیط Python به درستی نصب و به‌روز است.

۴. آیا می‌توانم بررسی SSL را غیرفعال کنم؟

  • غیرفعال کردن بررسی SSL توصیه نمی‌شود، زیرا امنیت اتصال را به خطر می‌اندازد.
  • تنها در مواقع تست یا عیب‌یابی موقت می‌توان از گزینه‌هایی مثل -k در curl استفاده کرد.

۵. ابزارهای مفید برای دیباگ SSL

  • curl -v → نمایش جزئیات Handshake SSL/TLS
  • OpenSSL → بررسی زنجیره گواهی و نسخه‌های SSL/TLS
  • Developer Tools مرورگر → بررسی خطاهای SSL/TLS در وب
  • ssldump / Wireshark → تحلیل شبکه و مشکلات SSL/TLS در سطح پایین

نتیجه گیری

در این آموزش یاد گرفتیم که چرا گاهی اتصال SSL برقرار نمی‌شود و چه عواملی باعث خطای SSL Connect می‌شوند، مثل ناسازگاری نسخه‌های TLS بین کلاینت و سرور، گواهی‌های ناقص یا منقضی، همگام نبودن ساعت سیستم و مشکلات پیکربندی کتابخانه SSL در Python. برای پیدا کردن مشکل می‌توان از ابزارهایی مثل OpenSSL و curl در حالت verbose استفاده کرد و مطمئن شد که فایروال یا شبکه جلوی اتصال را نمی‌گیرد. راه حل‌ها هم ساده‌اند: نسخه‌های TLS را سازگار کنید، گواهی‌های واسطه‌ای گم‌شده را نصب کنید، کتابخانه‌ها را به‌روز نگه دارید و ساعت سیستم را همگام کنید. در کنار این‌ها، رعایت بهترین شیوه‌ها مثل مدیریت خودکار گواهی‌ها، پیکربندی TLS مدرن، اعتبارسنجی کامل زنجیره گواهی‌ها و مانیتورینگ دوره‌ای، به شما کمک می‌کند که خطاهای SSL کمتر شوند و همیشه اتصال امن داشته باشید.

به اشتراک بگذارید