जैसे-जैसे ऑनलाइन सुरक्षा के बारे में हर किसी की जागरूकता बढ़ती है, और प्रमुख इंटरनेट कंपनियां HTTPS को लोकप्रिय बनाने को बढ़ावा देती हैं, HTTPS SSL अब मूल रूप से वेबसाइट बनाने के लिए मानक बन गया है। Let's Encrypt, Digicert, TrustAsia, Symantec इत्यादि द्वारा प्रदान किए गए मुफ्त SSL प्रमाणपत्रों के लिए धन्यवाद, HTTPS का उपयोग करने की लागत अब नगण्य है, चाहे वह व्यक्तिगत वेबसाइट हो या कॉर्पोरेट वेबसाइट।

सुरक्षा के लिए, हमें HTTPS का उपयोग करने की आवश्यकता है, लेकिन SSL चालू करने से मेमोरी, CPU और नेटवर्क बैंडविड्थ का ओवरहेड बढ़ जाएगा। HTTP की तुलना में, कनेक्शन स्थापित करने के लिए टीसीपी थ्री-वे हैंडशेक का उपयोग करते हुए, क्लाइंट और सर्वर को टीसीपी के तीन पैकेटों के अलावा, एसएसएल हैंडशेक के लिए आवश्यक 9 पैकेटों की भी आवश्यकता होती है, कुल 12। पैकेट. इसलिए, यदि HTTPS को बहुत अधिक अनुकूलित किया जाता है, तो इसका प्रदर्शन धीमा होने का खतरा होता है।

बेशक, कुछ लोग सोच सकते हैं कि HTTPS और SSL का बढ़ा हुआ सर्वर ओवरहेड मूल रूप से महसूस नहीं किया जाता है क्योंकि वेबसाइट का ट्रैफ़िक अपेक्षाकृत छोटा है, और सर्वर का प्रदर्शन कॉन्फ़िगरेशन वर्तमान ट्रैफ़िक का समर्थन करने के लिए पर्याप्त है। लेकिन Baidu, Google और लोकप्रिय ऐप्स जैसी बड़ी वेबसाइटों के लिए, HTTPS प्रदर्शन को अनुकूलित करने और संसाधन खपत को कम करने के लिए यह अभी भी बहुत उपयोगी है।

HTTPS और SSL को अनुकूलित करने के तरीके पर आठ युक्तियाँ - प्रतीक्षा समय कम करें, HTTPS प्रदर्शन हानि कम करें और SSL कैशिंग बढ़ाएँ

यह आलेख HTTPS और SSL के उपयोग को अनुकूलित करने में कुछ अनुभव साझा करेगा। SSL प्रमाणपत्र और HTTPS के बारे में अधिक अनुभव ट्यूटोरियल हैं:

  1. निःशुल्क एसएसएल प्रमाणपत्र संग्रह और सारांश - वेबसाइट पर निःशुल्क HTTPS सुरक्षित एन्क्रिप्टेड एक्सेस जोड़ें
  2. दस क्लाउडफ्लेयर फ्री सीडीएन एक्सेलेरेशन युक्तियाँ जो आप नहीं जानते होंगे-SSLDDOSCache
  3. HSTS को सक्षम करें और वेबसाइट तक HTTPS पहुंच को अधिक सुरक्षित बनाने के लिए HSTS प्रीलोड सूची में शामिल हों - HSTS को हटाने के तरीकों के साथ

PS: 6 सितंबर, 2018 को अपडेट किया गया, यदि आप सशुल्क DNS रिज़ॉल्यूशन सेवा का उपयोग करना चाहते हैं, तो यहां दो सस्ती DNS सेवाएं हैं जो व्यक्तियों के लिए अधिक उपयुक्त हैं: व्यक्तिगत उपयोग के लिए उपयुक्त दो DNS उत्पाद: ClouDNS और DNS आसान डोमेन नाम रिज़ॉल्यूशन बनाया गया।

पीएस: 15 जनवरी, 2019 को अपडेट किया गया, यदि आप तेज गति और उच्च प्रदर्शन के लिए एसएसएल एक्सेस चाहते हैं, तो आप टीएलएसवी1.3 और ब्रॉटली संपीड़न का प्रयास कर सकते हैं: वेबसाइट अनुकूलन त्वरण-टीएलएसवी1.3 और ब्रॉटली संपीड़न चालू करें -वनस्टैक, एलएनएमपी, पैगोडा पैनल।

1. निःशुल्क एसएसएल प्रमाणपत्र कैसे चुनें?

लेट्स एनक्रिप्ट को चुनने की अनुशंसा की जाती है। हालांकि लेट्स एनक्रिप्ट फ्री एसएसएल प्रमाणपत्र केवल 90 दिनों का है, इसे अनिश्चित काल तक नवीनीकृत किया जा सकता है और मैन्युअल और स्वचालित नवीनीकरण का समर्थन करता है। लेट्स एनक्रिप्ट एसएसएल को सभी प्रमुख ब्राउज़रों द्वारा मान्यता प्राप्त है और यह मुफ्त एसएसएल प्रमाणपत्रों के लिए पहली पसंद है। ट्यूटोरियल: आइए वाइल्डकार्ड मुक्त डोमेन नाम एसएसएल प्रमाणपत्र को एक-क्लिक एप्लिकेशन और एसएसएल उपयोग ट्यूटोरियल एन्क्रिप्ट करें।

लेट्स एनक्रिप्ट वीपीएस जैसे स्वतंत्र आईपी वाले होस्ट के लिए उपयुक्त है, अन्यथा, आप केवल लेट्स एनक्रिप्ट एपीआई का उपयोग करके विकसित कुछ ऑनलाइन एसएसएल प्रमाणपत्र अनुप्रयोगों का उपयोग कर सकते हैं। बेशक, यदि आपके पास एक निश्चित वित्तीय ताकत है, तो सशुल्क एसएसएल प्रमाणपत्र चुनना अधिक संभव है। अधिक एसएसएल प्रमाणपत्रों के लिए, देखें: निःशुल्क एसएसएल प्रमाणपत्रों का संग्रह और सारांश।

2. सर्वर पर HSTS सक्षम करें

एचएसटीएस प्रोटोकॉल का उपयोग करने वाली वेबसाइटें यह सुनिश्चित करेंगी कि ब्राउज़र हमेशा वेबसाइट के HTTPS संस्करण से कनेक्ट हो, उपयोगकर्ताओं को यूआरएल एड्रेस बार में मैन्युअल रूप से https:// वाला एन्क्रिप्टेड पता दर्ज करने की आवश्यकता नहीं है। मैं Nginx सर्वर का उपयोग करता हूं। मुझे केवल Nginx कॉन्फ़िगरेशन फ़ाइल (जैसे: /usr/local/nginx/conf/nginx.conf) को संपादित करने और HTTPS कॉन्फ़िगरेशन के सर्वर ब्लॉक में निम्नलिखित पंक्तियां जोड़ने की आवश्यकता है:

add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

Apache, Lighttpd, आदि के लिए HSTS को सक्षम करने के तरीके के विवरण के लिए देखें: सर्वर पर HSTS सक्षम करें।

3. डोमेन नाम को HSTS प्रीलोड सूची योजना में जोड़ें

यद्यपि एचएसटीएस प्रोटोकॉल ऊपर यह सुनिश्चित करने के लिए सक्षम किया गया है कि उपयोगकर्ता हमेशा एचटीटीपी कनेक्शन तक पहुंचें, आम तौर पर जो उपयोगकर्ता पहली बार वेबसाइट पर जाते हैं वे आदतन गैर-https डोमेन नाम दर्ज करेंगे, जिससे पहली बार वेबसाइट पर जाने पर http अपहरण की समस्या पैदा होती है। समय। HSTS प्रीलोड सूची योजना इस समस्या को हल करने के लिए है। यह chromeFirefoxEdge जैसे ब्राउज़र में एक अंतर्निहित सूची है।

एचएसटीएस प्रीलोड सूची में कैसे शामिल हों: एचएसटीएस सक्षम करें और वेबसाइट तक एचटीटीपीएस पहुंच को अधिक सुरक्षित बनाने के लिए एचएसटीएस प्रीलोड सूची में शामिल हों - एचएसटीएस को हटाने की विधि संलग्न है। वर्तमान में, wzfou.com को HSTS प्रीलोड सूची में सफलतापूर्वक जोड़ा गया है यदि आप क्रोम या फ़ायरफ़ॉक्स का उपयोग कर रहे हैं, तो पहली बार इस साइट पर जाने पर, आप डिफ़ॉल्ट रूप से कनेक्ट करने के लिए HTTPS का उपयोग करेंगे।

Nginx में OCSP स्टेपलिंग सक्षम करें। (यदि ssl_certificate निर्देश संपूर्ण प्रमाणपत्र श्रृंखला निर्दिष्ट करता है तो ssl_trusted_certificate को छोड़ा जा सकता है)

ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /path/to/certs/chained.pem;

अपाचे में OCSP स्टेपलिंग सक्षम करें:

<VirtualHost></VirtualHost> में जोड़ें:

SSLUseStapling on

<VirtualHost></VirtualHost> के बाहर जोड़ें:

SSLStaplingCache shmcb:/tmp/stapling_cache(128000)

5. ईसीसी और आरएसए दोहरे प्रमाणपत्र का उपयोग करें

डिफ़ॉल्ट रूप से, हम सभी आरएसए प्रमाणपत्रों का उपयोग करेंगे क्योंकि आरएसए प्रमाणपत्रों में व्यापक अनुकूलता होती है। हालाँकि, ECC प्रमाणपत्र में छोटे आकार, तेज़ कंप्यूटिंग गति और उच्च सुरक्षा की विशेषताएं हैं (256-बिट ECC कुंजी 3072-बिट RSA कुंजी के समान सुरक्षा प्रदान कर सकती है) यह कुछ हद तक HTTPS प्रदर्शन प्रदान कर सकता है।

Let's Encrypt पहले से ही ECC प्रमाणपत्र बनाने का समर्थन करता है। प्रमाणपत्र प्रकार को ECC में बदलने के लिए --keylength ec-256 निर्दिष्ट करने के लिए acme.sh का उपयोग करें।

acme.sh --issue -w /data/wwwroot/wzfou.com -d wzfou.com -d www.wzfou.com --keylength ec-256

यह ध्यान दिया जाना चाहिए कि ECC Windows XP पर संगत नहीं है, इस समय, हम दोहरे प्रमाणपत्रों का उपयोग करने के बारे में सोचेंगे, जब ECC प्रमाणपत्र समर्थित नहीं है, तो Nginx स्वचालित रूप से उपयोगकर्ता को RSA प्रमाणपत्र प्रदर्शित करेगा। यदि nginx का संस्करण 1.11 से बड़ा है, तो आप सीधे कॉन्फ़िगरेशन फ़ाइल में ECC और RSA दोहरे प्रमाणपत्रों के पथ लिख सकते हैं: wzfou.com निम्नानुसार दर्शाता है:

#ECC
ssl_certificate /root/.acme.sh/wzfou.com_ecc/fullchain.cer;
ssl_certificate_key /root/.acme.sh/wzfou.com_ecc/wzfou.com.key;
#RSA
ssl_certificate /usr/local/nginx/conf/ssl/wzfou.com.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/wzfou.com.key;

Nginx को पुनरारंभ करें। जब XP जैसे उपयोगकर्ता जो ECC प्रमाणपत्रों का समर्थन नहीं करते हैं, वे वेबसाइट तक पहुंचते हैं, तो RSA प्रमाणपत्र प्रदर्शित होता है।

अन्य उपयोगकर्ता ईसीसी प्रमाणपत्रों का उपयोग करना पसंद करते हैं।

यदि आप पाते हैं कि ईसीसी को प्राथमिकता से प्रदर्शित नहीं किया गया है, तो जांचें कि क्या ssl_prefer_server_ciphers सक्षम है, और क्या ssl_ciphers ठीक से कॉन्फ़िगर किया गया है। निम्नलिखित wzfou.com द्वारा उपयोग किया जाने वाला कॉन्फ़िगरेशन है:

ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;

इसके अलावा, आप निम्नलिखित तीन में से किसी एक को चुन सकते हैं (केवल परीक्षण के लिए):

ssl_ciphers 'EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5';

ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';

ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK';

6. डीएनएस सीएए सक्षम करें

DNS CAA का कार्य केवल रिकॉर्ड में सूचीबद्ध CA को डोमेन नाम (या उपडोमेन नाम) के लिए प्रमाणपत्र जारी करने की अनुमति देना है ताकि किसी को SSL प्रमाणपत्र जारी करने से रोका जा सके। साथ ही, CAA रिकॉर्ड एकल डोमेन जारी करने को नियंत्रित कर सकता है एसएसएल प्रमाणपत्रों को नाम दें और वाइल्डकार्ड प्रमाणपत्र को भी नियंत्रित कर सकते हैं। विस्तृत तरीकों के लिए, देखें: जेडी क्लाउड डीएनएस सेटिंग्स सीएए।

समस्या:DNS CAA को सक्षम करने से त्रुटि उत्पन्न होती है: त्रुटि सत्यापित करें: *.wzfou.comprevents जारी करने के लिए CAA रिकॉर्ड। समाधान यह है कि issuewild रिकॉर्ड जोड़ें: 0issuewild "letsencrypt.org" । इसके अलावा, सीएए कॉन्फ़िगरेशन सही है या नहीं यह जांचने के लिए दो वेबसाइटें प्रदान की गई हैं:

  1. HTTPS://CAA test.co.UK/
  2. HTTPS://नए साल की पूर्वसंध्या Friends.IO/labs/CAA-validator

7. एसएसएल प्रमाणपत्रों को स्वचालित रूप से नियमित रूप से अपडेट करें

यदि आप मैन्युअल रूप से अपडेट करना चाहते हैं:

# RSA
$ acme.sh --renew -d wzfou.com –d www.wzfou.com --force

# ECC
acme.sh --renew -d wzfou.com –d www.wzfou.com --force --ecc

आम तौर पर, acme.sh ने लेट्स एनक्रिप्ट प्रमाणपत्र को नियमित रूप से अपडेट करने के लिए स्वचालित रूप से निर्धारित कार्यों को जोड़ा है। यदि आप पाते हैं कि प्रमाणपत्र नियमित रूप से अपडेट नहीं होता है, तो जांचें कि क्या आपका क्रॉन कार्य सही है। आप अपडेट को बाध्य करने का भी प्रयास कर सकते हैं।

"/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" --force

8. एसएसएल प्रमाणपत्र कॉन्फ़िगरेशन की जाँच करें

आम तौर पर इस्तेमाल की जाने वाली परीक्षण वेबसाइटों में शामिल हैं:

  1. HTTPS://wuwuwu.SSL labs.com/SSL test/analyze.HTML
  2. https://nokill.com/

ssllabs.com का उपयोग करने की अत्यधिक अनुशंसा की जाती है। परीक्षण के परिणाम अभी भी बहुत सटीक हैं, जो इस प्रकार हैं:

9. व्यापक

उपरोक्त अनुकूलन रणनीतियों के आधार पर, Nginx कॉन्फ़िगरेशन फ़ाइल का विशिष्ट अनुकूलन इस प्रकार है:

server {

listen 443 ssl http2;
#使用HTTP/2,需要Nginx1.9.7以上版本

add_header Strict-Transport-Security "max-age=6307200; includeSubdomains; preload";
#开启HSTS,并设置有效期为“6307200秒”(6个月),包括子域名(根据情况可删掉),预加载到浏览器缓存(根据情况可删掉)

add_header X-Frame-Options DENY;
#禁止被嵌入框架

add_header X-Content-Type-Options nosniff;
#防止在IE9、Chrome和Safari中的MIME类型混淆攻击

ssl_certificate /usr/local/nginx/conf/vhost/sslkey/www.linpx.com.crt;
ssl_certificate_key /usr/local/nginx/conf/vhost/sslkey/www.linpx.com.key;
#SSL证书文件位置

ssl_trusted_certificate /usr/local/nginx/conf/vhost/sslkey/chaine.pem;
#OCSP Stapling的证书位置

ssl_dhparam /usr/local/nginx/conf/vhost/sslkey/dhparam.pem;
#DH-Key交换密钥文件位置

#SSL优化配置

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#只允许TLS协议

ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
#加密套件,这里用了CloudFlare's Internet facing SSL cipher configuration

ssl_prefer_server_ciphers on;
#由服务器协商最佳的加密算法

ssl_session_cache builtin:1000 shared:SSL:10m;
#Session Cache,将Session缓存到服务器,这可能会占用更多的服务器资源

ssl_session_tickets on;
#开启浏览器的Session Ticket缓存

ssl_session_timeout 10m; 
#SSL session过期时间

ssl_stapling on; 
#OCSP Stapling开启,OCSP是用于在线查询证书吊销情况的服务,使用OCSP Stapling能将证书有效状态的信息缓存到服务器,提高TLS握手速度

ssl_stapling_verify on;
#OCSP Stapling验证开启

resolver 8.8.8.8 8.8.4.4 valid=300s;
#用于查询OCSP服务器的DNS

resolver_timeout 5s;
#查询域名超时时间

···

}

वास्तविक उपयोग के दौरान, यह पाया गया कि व्यक्तिगत "अनुकूलन" को किसी की अपनी आवश्यकताओं के अनुसार निर्धारित किया जाना चाहिए, केवल संदर्भ के लिए, वर्तमान में wzfou.com द्वारा उपयोग किया जाने वाला Nginx कॉन्फ़िगरेशन निम्नलिखित है:

listen 80; 
listen 443 ssl http2;
#ECC
ssl_certificate /root/.acme.sh/wzfou.com_ecc/fullchain.cer;
ssl_certificate_key /root/.acme.sh/wzfou.com_ecc/wzfou.com.key;  
#RSA 
ssl_certificate /usr/local/nginx/conf/ssl/wzfou.com.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/wzfou.com.key; 
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_timeout 10m;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_buffer_size 1400;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
ssl_stapling on; 
ssl_stapling_verify on;

PS: 5 अगस्त, 2018 को अपडेट किया गया। अनुस्मारक के लिए xiaoz को धन्यवाद। यहां मोज़िला से ऑनलाइन एसएसएल कॉन्फ़िगरेशन उत्पन्न करने के लिए एक वेबसाइट है, जो बहुत ही संदर्भ योग्य है:

  1. https://Mozilla.GitHub.IO/server-dead-torres/ratatings-config-generator/

उत्तर छोड़ दें