Technical Tutorial
PEM Format SSL Certificate इम्प्लीमेंटेशन गाइड
Certificate Authority (CA) के management console से जारी किए गए PEM format SSL certificates को
Ubuntu 24 + Apache + WordPress environments में लागू करने के लिए एक सामान्य ट्यूटोरियल।
Apache
WordPress
PEM SSL
अस्वीकरण (Disclaimer) #
यह लेख एक तकनीकी ट्यूटोरियल है जो Ubuntu 24 + Apache + WordPress environments में SSL certificates (PEM format) लागू करने की सामान्य प्रक्रियाएँ समझाता है।
सामग्री लेखन के समय की जानकारी पर आधारित है, लेकिन ऑपरेशनल प्रक्रियाएँ और configuration के तरीके विशिष्ट environment, configuration, certificate के प्रकार, CA की specifications, middleware के versions और अन्य कारकों के आधार पर भिन्न हो सकते हैं।
अवलोकन #
यह लेख PEM format SSL certificates
(वह प्रकार जो CA management console में एक text box में दिखाई देता है) को
Ubuntu 24 + Apache + WordPress साइटों में लागू करने के लिए एक सामान्य ट्यूटोरियल है।
चाहे certificate EV / OV / DV हो, server पर deployment की मूल प्रक्रियाएँ एक जैसी ही हैं।
पूर्व-आवश्यकताएँ #
- OS: Ubuntu 24 (root या sudo privileges के साथ)
- Web: Apache (
apache2) चल रहा है - CMS: WordPress Apache के अंतर्गत चल रहा है
- Certificate: CA से Server Certificate जारी किया जा चुका है
- Intermediate Certificate: CA से Intermediate Certificate (CA Bundle) उपलब्ध है
- महत्वपूर्ण: CSR जनरेट करते समय बनाई गई Private Key आपके पास मौजूद है (खो जाने पर re-issuance आवश्यक है)
CA Console में दिखने वाला Certificate Format (सैंपल डिस्प्ले) #
CA management console में, निम्न block (PEM) एक text box में दिखाई दे सकता है। इस block को शुरुआत से अंत तक copy करें और server पर save करें।
-----BEGIN CERTIFICATE-----
(long string of alphanumeric characters)
-----END CERTIFICATE-----सावधानी
- Copy करते समय
BEGIN/ENDवाली लाइनें भी शामिल करें। - Line breaks बिगड़ जाने पर भी configuration काम कर जाएगा, लेकिन सबसे सुरक्षित यही है कि जैसा दिखाया गया है ठीक वैसा ही paste करें।
- Private Key (BEGIN PRIVATE KEY) paste न करें।
इम्प्लीमेंटेशन का समग्र फ्लो #
- Certificate फ़ाइलों को निर्धारित स्थान पर save करें
- Intermediate certificate (chain) तैयार करें
- Fullchain बनाएँ (server certificate + intermediate)
- सत्यापित करें कि private key और certificate मेल खाते हैं
- Apache HTTPS VirtualHost configure करें (80 → 443 redirect सहित)
- Apache reload करें और WordPress URL / mixed content तैयार करें
- ऑपरेशन सत्यापित करें (chain, redirect, certificate जानकारी)
Step 1Certificate फ़ाइल का प्लेसमेंट (Server Certificate) #
एक सामान्य Ubuntu placement उदाहरण (अपनी ऑपरेशनल पॉलिसी के अनुसार बदलें)।
Save लोकेशन (उदाहरण) #
- Private Key (मौजूदा):
/etc/ssl/private/example.com.key - Server Certificate:
/etc/ssl/certs/example.com.crt - Intermediate Certificate:
/etc/ssl/certs/intermediate-ca.pem - Fullchain:
/etc/ssl/certs/example.com.fullchain.pem
Directory बनाना और Permissions #
sudo mkdir -p /etc/ssl/private /etc/ssl/certs
sudo chmod 700 /etc/ssl/privateCA Console से Certificate (PEM) को फ़ाइल में Save करें #
CA console के text box से certificate block copy करें और उसे /etc/ssl/certs/example.com.crt में save करें।
sudo nano /etc/ssl/certs/example.com.crt
sudo chmod 644 /etc/ssl/certs/example.com.crtलोकली automated तरीके से save करने का उदाहरण:
sudo tee /etc/ssl/certs/example.com.crt >/dev/null <<'EOF'
-----BEGIN CERTIFICATE-----
(paste certificate content here)
-----END CERTIFICATE-----
EOF
sudo chmod 644 /etc/ssl/certs/example.com.crtStep 2Intermediate Certificate तैयार करें (CA Bundle / Intermediate) #
कई CA, server certificate से अलग एक Intermediate Certificate (या CA Bundle) प्रदान करते हैं। इसके बिना, कुछ devices पर “untrusted” संदेश दिख सकते हैं।
Intermediate Certificate Save करें (उदाहरण) #
CA से प्राप्त intermediate certificate (एक या एकाधिक) को PEM format में निम्न स्थान पर save करें:
sudo nano /etc/ssl/certs/intermediate-ca.pem
sudo chmod 644 /etc/ssl/certs/intermediate-ca.pemयदि एक से अधिक Intermediate हों #
यदि CA Bundle में एक से अधिक intermediate certificates हैं, तो उन्हें CA द्वारा निर्दिष्ट क्रम में (आमतौर पर root की दिशा में) एक ही फ़ाइल में जोड़ दें।
Step 3Fullchain बनाएँ (Server Certificate + Intermediate) #
Apache में, certificate फ़ाइल के रूप में fullchain (server certificate + intermediate) specify करना मानक प्रथा है।
sudo cat /etc/ssl/certs/example.com.crt \
/etc/ssl/certs/intermediate-ca.pem \
| sudo tee /etc/ssl/certs/example.com.fullchain.pem >/dev/null
sudo chmod 644 /etc/ssl/certs/example.com.fullchain.pemStep 4Private Key और Certificate के मिलान की जाँच करें (महत्वपूर्ण) #
यदि certificate और private key मेल नहीं खाते, तो Apache configure करने के बाद भी HTTPS ठीक से काम नहीं करेगा। हमेशा जाँच करें।
जाँच विधि A: RSA Key का मामला (Modulus तुलना) #
openssl x509 -noout -modulus -in /etc/ssl/certs/example.com.crt | openssl md5
openssl rsa -noout -modulus -in /etc/ssl/private/example.com.key | openssl md5यदि दोनों MD5 values समान हैं, तो वे मेल खाते हैं।
जाँच विधि B: Key Type से स्वतंत्र (Public Key SHA256 तुलना) #
# Certificate → Public Key → SHA256
openssl x509 -in /etc/ssl/certs/example.com.crt -pubkey -noout \
| openssl pkey -pubin -outform DER \
| openssl sha256
# Private Key → Public Key → SHA256
openssl pkey -in /etc/ssl/private/example.com.key -pubout -outform DER \
| openssl sha256यदि दोनों SHA256 values समान हैं, तो वे मेल खाते हैं।
यदि वे मेल नहीं खाते #
- संभव है कि CSR किसी अन्य private key से बनाया गया था।
- यदि सही private key नहीं मिलती, तो आपको CA की ओर से re-issue (Reissue) करवाना होगा और सही key के साथ CSR फिर से बनाना होगा।
Step 5Apache में HTTPS सक्षम करें #
आवश्यक Modules सक्षम करें #
sudo a2enmod ssl
sudo a2enmod headers
sudo a2enmod rewrite
sudo systemctl reload apache2सत्यापित करें कि Port 443 पर Listen हो रहा है #
आमतौर पर /etc/apache2/ports.conf में Listen 443 होता है। आवश्यकतानुसार जाँच करें।
Step 6Apache VirtualHost Configuration (443 + 80→443 Redirect) #
यहाँ हम उदाहरण के तौर पर example.com के लिए एक site configuration फ़ाइल बनाकर लागू करेंगे।
Site Configuration फ़ाइल बनाएँ (उदाहरण) #
sudo nano /etc/apache2/sites-available/example.com.confConfiguration उदाहरण (WordPress मानकर) #
※ Code में example.com और DocumentRoot को अपने वास्तविक environment के अनुसार बदलें।
<VirtualHost *:80>
ServerName example.com
# HTTP → HTTPS permanent redirect
RewriteEngine On
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName example.com
DocumentRoot /var/www/example.com/public
# For WordPress (.htaccess operation case)
<Directory /var/www/example.com/public>
AllowOverride All
Require all granted
</Directory>
SSLEngine on
# Specify fullchain (server certificate + intermediate)
SSLCertificateFile /etc/ssl/certs/example.com.fullchain.pem
SSLCertificateKeyFile /etc/ssl/private/example.com.key
# Recommended: Enable as needed (prioritize operation verification first)
# Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
ErrorLog ${APACHE_LOG_DIR}/example.com-ssl-error.log
CustomLog ${APACHE_LOG_DIR}/example.com-ssl-access.log combined
</VirtualHost>
</IfModule>Site सक्षम करें #
sudo a2ensite example.com.confConfiguration Test → Reload #
sudo apache2ctl configtest
sudo systemctl reload apache2यह जाँचने के लिए कि कौन-सा VirtualHost सक्षम है:
sudo apache2ctl -SStep 7WordPress को HTTPS में बदलें #
Site URL को HTTPS पर एकीकृत करें #
- WordPress Admin Console → Settings → General
- “WordPress Address (URL)” और “Site Address (URL)” दोनों को
https://example.comपर सेट करें
Mixed Content का समाधान #
- यदि images और CSS / JS
http://पर ही रहते हैं, तो lock icon गायब हो जाएगा। - Database replacement, theme settings, plugins आदि के जरिए
https://पर एकीकृत करें (ऑपरेशन से पहले backup की सिफारिश की जाती है)।
Step 8ऑपरेशन सत्यापित करें #
HTTPS कनेक्टिविटी (curl) #
curl -I https://example.com/
curl -I http://example.com/अपेक्षित परिणाम:
https://example.com/200 / 301 या अन्य सामान्य response लौटाता हैhttp://example.com/301 के साथ https पर redirect होता है
Certificate Chain की जाँच (openssl) #
echo | openssl s_client -connect example.com:443 -servername example.com -showcertsBrowser से जाँच #
- कोई certificate error नहीं दिखता
- Certificate details में अपेक्षित issuer / expiration / SAN और अन्य जानकारी दिखती है
आम समस्याओं का निवारण #
Certificate सही होने के बावजूद “Untrusted” दिखता है #
- Intermediate certificate (CA Bundle) प्रदान नहीं किया गया हो सकता है या fullchain में शामिल नहीं है।
- सत्यापित करें कि
SSLCertificateFilefullchain की ओर इंगित करता है।
Apache Startup / Reload SSL Error के साथ विफल होता है #
- Private key का path गलत हो सकता है, permissions अनुपयुक्त हो सकती हैं, या key और certificate मेल नहीं खा रहे हों।
- “Step 4” की मिलान जाँच फिर से चलाएँ।
Redirect Loop होता है #
- WordPress पक्ष (siteurl / home) और Apache पक्ष (80 → 443) एक-दूसरे के विरोधाभासी हो सकते हैं।
- यदि Cloudflare जैसे CDN / reverse proxy का उपयोग हो रहा है, तो SSL mode settings का भी असर हो सकता है।
Rollback #
- लागू करने से पहले Apache site configuration फ़ाइलों और certificate-संबंधित फ़ाइलों के backup की सिफारिश की जाती है।
- यदि समस्याएँ आती हैं, तो संबंधित site को अक्षम करके reload करें।
sudo a2dissite example.com.conf
sudo apache2ctl configtest
sudo systemctl reload apache2ऑपरेशन नोट्स (Renewal / Re-issuance) #
- Renewal / re-issuance की मूल प्रक्रिया: नया CSR → CA पर Re-issue / Renewal → Fullchain बदलें → Apache reload
- Private key compromise का संदेह होने पर: Revoke → नई key से CSR बनाएँ → Re-issue
- Certificate फ़ाइलों में बदलाव न करें; जारी की गई सामग्री (PEM) को सटीक रूप से save रखें