एक self-signed certificate वह है जो आप खुद create करते हैं — आप अपने खुद के Certificate Authority के रूप में act करते हैं। एक CA-signed certificate एक trusted Certificate Authority (जैसे Let’s Encrypt या DigiCert) द्वारा issue और sign किया जाता है जिस पर browsers पहले से trust करते हैं।
Practical difference: self-signed certificates browser security warnings trigger करते हैं। CA-signed certificates नहीं करते।
Comparison
| Self-signed | CA-signed | |
|---|---|---|
| Created by | आप (openssl command) | एक trusted CA |
| Browser trust | No Warning: “Not trusted” | Yes Padlock icon |
| Encryption strength | Same | Same |
| Cost | Free | Free (Let’s Encrypt) या paid |
| Validation | None — आप खुद vouch करते हैं | CA domain/org verify करता है |
| Use case | Development, internal, testing | Production websites |
| Renewal | Manual (आप validity set करते हैं) | 90 days (LE) या 1 year (paid) |
| Man-in-the-middle protection | Weak — users warnings पर click-through करने के आदी | Strong — warnings सिर्फ real problems पर |
Self-signed certificates warnings क्यों show करते हैं
Browsers certificates पर इस basis पर trust करते हैं कि किसने sign किए हैं। आपका OS और browser ~100-150 trusted root CAs की list के साथ आते हैं। जब कोई server इनमें से किसी CA द्वारा signed certificate present करता है, तो browser padlock show करता है।
एक self-signed certificate किसी भी trusted CA द्वारा signed नहीं है — यह अपनी own private key से signed है। Browser के पास verify करने का कोई way नहीं है कि certificate legitimate है, इसलिए यह warning show करता है। यह correct behavior है — CA verification के बिना, कोई भी google.com claim करने वाला certificate create कर सकता था।
Self-signed certificates कब use करें
Internal services
ऐसी services जो internet पर exposed नहीं हैं — internal dashboards, monitoring tools, database admin panels। आपकी team self-signed CA को अपने trust stores में add कर सकती है।
Development और testing
Local development के लिए quick HTTPS जब आप mkcert set up नहीं करना चाहते। Browser warning annoying है लेकिन testing के लिए काम करती है।
IoT और embedded devices
ऐसे devices जो एक known server के साथ communicate करते हैं और certificate pin कर सकते हैं — कोई browser trust store involved नहीं।
Air-gapped networks
बिना internet access वाले networks जहाँ Let’s Encrypt का ACME protocol reach नहीं कर सकता। Self-signed only option है।
Self-signed certificates कब use न करें
कोई भी public-facing website
Users एक scary warning देखते हैं और leave कर जाते हैं। Search engines untrusted certificates वाले HTTPS pages crawl नहीं कर सकते। जब Let’s Encrypt certificates free हैं, तो self-sign करने का कोई reason नहीं है।
User data handle करने वाली कोई भी site
Self-signed certificates users को security warnings पर click-through करने की habit डालते हैं — good security के opposite। जब कोई real attack warning trigger करता है, तो “Proceed anyway” click करने के आदी users को पता नहीं चलेगा।
Self-signed certificate कैसे create करें
# ECDSA (recommended)
openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:P-256 \
-keyout key.pem -out cert.pem -days 365 -nodes \
-subj "/CN=internal.example.com" \
-addext "subjectAltName=DNS:internal.example.com,IP:10.0.0.5"
# RSA
openssl req -x509 -newkey rsa:2048 \
-keyout key.pem -out cert.pem -days 365 -nodes \
-subj "/CN=internal.example.com"
Resulting cert.pem और key.pem को अपने server config में use करें। Note: fullchain.pem और chain.pem ज़रूरी नहीं — self-signed certs के साथ कोई chain नहीं होती।
हर scenario के लिए better alternatives
| Scenario | Self-signed के बजाय, use करें |
|---|---|
| Production website | GetHTTPS से Let’s Encrypt — free, trusted, 5 minutes |
| Local development | mkcert — locally trusted, कोई warnings नहीं |
| Internal services | Let’s Encrypt (अगर internet-accessible है) या private CA |
| Testing/staging | Let’s Encrypt staging environment — unlimited test certs |
Self-signed certificates तब sense बनाते थे जब SSL certificates $100+/year cost करते थे। अब जब Let’s Encrypt free है, तो truly isolated environments से beyond किसी भी चीज़ के लिए self-sign करने का hardly कोई reason है।
FAQ
क्या self-signed certificate CA-signed से कम secure है?
Encryption same है — same algorithms, same key strengths। Difference trust का है: एक CA-signed certificate एक trusted third party के through server की identity prove करता है। एक self-signed certificate कुछ prove नहीं करता — कोई भी किसी भी domain के लिए एक create कर सकता है। Security issue crypto नहीं है; यह authentication की lack है।
क्या मैं browsers को अपने self-signed certificate trust करा सकता हूँ?
हाँ, उन machines पर जिन्हें आप control करते हैं। Certificate (या इसे sign करने वाले self-signed CA) को OS/browser trust store में import करें। यही mkcert automate करता है। लेकिन आप दूसरे लोगों के browsers को इस पर trust नहीं करा सकते — इसके लिए real CA चाहिए।
मेरे hosting provider ने मुझे self-signed certificate दिया। क्या यह okay है?
नहीं, public website के लिए। अपने provider से free Let’s Encrypt enable करने के लिए कहें (ज़्यादातर hosts इसे support करते हैं)। अगर वे नहीं करते, तो खुद trusted certificate get करने के लिए GetHTTPS use करें।
अपना CA क्यों नहीं बनाते?
आप बना सकते हैं, लेकिन browsers इस पर तब तक trust नहीं करेंगे जब तक आप browser trust stores में include होने की years-long, expensive process से नहीं गुज़रते। एक private CA internal infrastructure के लिए काम करता है (आपकी team root cert install करती है), लेकिन public websites के लिए नहीं। Public sites के लिए, Let’s Encrypt जैसे trusted CA use करें।