अपाचे एसएसएल: सर्वर सर्टिफिकेट में वह आईडी शामिल नहीं है जो सर्वर नाम से मेल खाती है


21

मैं अपने अपाचे 2 वेबसर्वर पर एसएसएल स्थापित करने की कोशिश कर रहा हूं, लेकिन ऐसा लगता है कि यह बिल्कुल भी काम नहीं करता है।

मैंने ओपनस्प्ल के साथ प्रमाणित फ़ाइलों को बनाने और /etc/apache2/sites-available/default-ssl.confठीक से कॉन्फ़िगर करने के लिए एक ट्यूटोरियल का पालन किया है ।

हर बार जब मैं अपनी वेबसाइट को https के साथ खोलने का प्रयास करता हूं, तो मेरा ब्राउज़र सुरक्षा समस्याओं के कारण कनेक्ट करने से इनकार कर देता है। यह कहता है कि मैंने अपनी वेबसाइट को सही ढंग से कॉन्फ़िगर नहीं किया है।

मेरे में /var/log/apache2/error.logमुझे चेतावनी मिल रही है, जो कहता है कि मेरे सर्वर प्रमाणपत्र में एक आईडी शामिल नहीं है जो सर्वर नाम से मेल खाता है।

[Mon Apr 10 11:03:24.041813 2017] [mpm_prefork:notice] [pid 1222] AH00169: caught SIGTERM, shutting down
[Mon Apr 10 11:03:30.566578 2017] [ssl:warn] [pid 661] AH01909: 127.0.0.1:443:0 server certificate does NOT include an ID which matches the server name
[Mon Apr 10 11:03:31.579088 2017] [ssl:warn] [pid 1194] AH01909: 127.0.0.1:443:0 server certificate does NOT include an ID which matches the server name
[Mon Apr 10 11:03:31.592958 2017] [mpm_prefork:notice] [pid 1194] AH00163: Apache/2.4.25 (Raspbian) OpenSSL/1.0.2k configured -- resuming normal operations
[Mon Apr 10 11:03:31.593136 2017] [core:notice] [pid 1194] AH00094: Command line: '/usr/sbin/apache2'

क्या आपके पास इसे हल करने के बारे में कोई विचार है? धन्यवाद के संबंध में!


क्या आप Apache 2.2 या 2.4 का उपयोग कर रहे थे? मैंने 2.2 से 2.4 तक अपग्रेड किया और यह त्रुटि प्राप्त की। मेरे मामले में यह एक सार्वजनिक सर्वर नहीं है, यह एक आंतरिक है, इसलिए मैं अनुमान लगा रहा हूं कि स्व-हस्ताक्षरित प्रमाणपत्र क्या करेगा।
svhyd

जब मुझे यह त्रुटि मिली तब मैं अपने सार्वजनिक सर्वर (डेबियन 8) पर अपाचे 2.2 का उपयोग कर रहा था। लेट्स एनस्क्रिप्ट पर स्विच करने के बाद त्रुटि हो गई थी इसलिए मुझे लगता है कि यह स्व-हस्ताक्षरित प्रमाण पत्र था जो त्रुटि का कारण बना।
Pixmusic

जवाबों:


7

ठीक है, मैंने देखा कि इस पोस्ट को हाल ही में बहुत बार देखा गया है और इसलिए ऐसा लगता है कि बहुत सारे लोग उसी मुद्दे का सामना कर रहे हैं जो मैंने किया था। यदि ऐसा है तो यह आपकी मदद कर सकता है।

मैंने अपने वेबसर्वर के लिए SSL-प्रमाणीकरण बनाने के लिए एक सरल चरण-दर-चरण ट्यूटोरियल का पालन किया है। इतने सारे ट्यूटोरियल की तरह वहाँ भी ट्यूटोरियल के परिणाम का मैंने ओपनएसएसएल का उपयोग करते हुए एक स्व-हस्ताक्षरित प्रमाण पत्र दिया था। हां स्व-हस्ताक्षरित , यही समस्या थी। यह प्रमाणपत्र होने के कारण ब्राउज़र सर्वर पर भरोसा नहीं कर सकता है जो स्वयं हस्ताक्षरित है। खैर मैं भी नहीं होगा ...

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

स्थापना

1) अपने पुराने ssl सर्टिफिकेट फाइलों को डिलीट करें, जिन्हें आपने OpenSSL का उपयोग करके बनाया है

2) डेबियन पर सर्टिफिकेट क्लाइंट प्राप्त करने के लिए ओपन बैकपोर्ट। आपको पता होना चाहिए कि यह अधूरा सॉफ्टवेयर के लिए एक छेद खोल देगा! जब आप जो कर रहे हैं उसके बारे में जागरूक होने पर ही पैकेजों को स्थापित करें।

echo 'deb http://ftp.debian.org/debian jessie-backports main' | sudo tee /etc/apt/sources.list.d/backports.list

3) अपने लिनक्स सिस्टम को अपडेट करें

sudo apt-get update

4) प्रमाण पत्र स्थापित करें

sudo apt-get install python-certbot-apache -t jessie-backports

5) Apache ServerName और ServerAlias ​​सेट करें

sudo nano /etc/apache2/sites-available/000-default.conf

6) Apache config फाइल को एडिट करें

<VirtualHost *:80>
    . . .
    ServerName example.com
    ServerAlias www.example.com
    . . .
</VirtualHost>

7) एक सही वाक्यविन्यास के लिए जाँच करें

sudo apache2ctl configtest

8) अगर कॉन्फिग फाइल ठीक लगे, तो अपाचे सर्वर को रीस्टार्ट करें

sudo systemctl restart apache2

9) सर्टिफिकेट का उपयोग करके एक प्रमाण पत्र सेट करें और स्क्रीन पर दिए गए निर्देश का पालन करें।

sudo certbot --apache

नवीकरण

लेट्स एनक्रिप्ट द्वारा सभी प्रमाण पत्र 3 महीने के माध्यम से मान्य हैं। नवीनीकृत करने के लिए आप मैन्युअल रूप से चला सकते हैं

sudo certbot renew

या क्रोन जॉब के रूप में इस सेवा को स्वचालित करें

sudo crontab -e

और प्रत्येक सोमवार को 2:30 बजे एक नवीनीकरण शुरू करने के लिए निम्न पंक्ति दर्ज करें।

. . .
30 2 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log

आप यहाँ एक और अलग ट्यूटोरियल का अनुसरण कर सकते हैं: https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-debian-8


इसका उपयोग लोकलहोस्ट (स्थानीय नेटवर्क पर वर्चुअल मशीन) के लिए नहीं किया जा सकता है, मेरा मतलब है कि आपको एनक्रिप्ट करने के लिए डोमेन खरीदने की आवश्यकता है?
lewis4u

1
हाँ, आपके वेबसर्वर को काम करने के लिए एनक्रिप्ट करने के लिए एक पंजीकृत डोमेन के माध्यम से सुलभ होना होगा।
पिक्सेलम्यूजिक

2

यदि आप कोई अन्य एसएसएल त्रुटियों को नहीं देख रहे हैं, और यदि आपने httpd.conf फ़ाइल में 'LogLevel डिबग' सेट करने का प्रयास किया है, तो यह त्रुटि संदेश httpd.conf फ़ाइल से 'सुनो 443' अनुपलब्ध है।


मैं अपाचे को 443 सुनने के लिए पूरी तरह से भूल गया यह केवल 80 धन्यवाद सुन रहा था
रॉबर्ट

1

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

उत्तरार्द्ध आपके मामले में सही प्रतीत नहीं होता है। जैसा कि जैकब कहते हैं, आपको CSR बनाते समय सही होस्ट नाम को सामान्य नाम (या अन्य नाम) के रूप में निर्दिष्ट करना होगा ।

यह देखने के लिए कि वर्तमान में कौन से नाम प्रमाणपत्र पर हैं:

openssl s_client -showcerts -connect ${HOSTNAME}:443

यदि मशीन पर कई प्रमाणपत्र स्थापित हैं और एक ही आईपी पते पर सेवा दी जाती है, तो:

openssl s_client -showcerts -connect ${HOSTIP}:443 -servername ${HOSTNAME}

(जहां $ {...} मूल्य प्लेसहोल्डर हैं, जिन्हें आपको प्रासंगिक मूल्यों के साथ बदलना चाहिए)।


(1) आपको CSR में कॉमननेम में सर्वर का नाम डालना चाहिए , लेकिन क्या वास्तव में इसकी जरूरत है (चाहे सीए जाँच करे और / या इसे कॉपी करे) CA पर निर्भर करता है (2) openssl s_clientपत्ता प्रमाण पत्र के लिए विषय और जारीकर्ता दिखाता है, जो केवल एक है आपको यहां जरूरत है, बिना -showcerts, लेकिन 2010 के बाद से वास्तविक-सीए सेर्ट्स (और सक्षम लोगों द्वारा DIY सेर्ट्स ) के लिए आपको जो देखने की जरूरत है, वह विषय नहीं है, लेकिन सब्जेक्टएनलनेम (सैन) एक्सटेंशन और इसके लिए आपको जरूरत हैopenssl s_client -connect h:p [-servername h] | openssl x509 -noout -text
dave_thenpson_085

ध्यान दें कि 2018 के मध्य से, आपको वैकल्पिक नामों में भी DNS नाम निर्दिष्ट करना होगा, यदि आप चाहते हैं कि आपका प्रमाणपत्र आधुनिक ब्राउज़रों में सही तरीके से मान्य हो।
सिम्बियन

मुझे 2018 में किसी भी बदलाव का पता नहीं है; Chrome को 2017 की शुरुआत से SAN (DNS या IP के लिए, हालाँकि बाद वाले का उपयोग शायद ही कभी किया जाता है) के लिए आवश्यक है , और फ़ायरफ़ॉक्स और IE (जिसे मैं अभी भी आधुनिक मानता हूं) को आज इसकी आवश्यकता नहीं है - हालाँकि जैसा कि मैंने पहले कहा था कि सार्वजनिक सीए ने प्रदान किया है यह बहुत लंबा है।
dave_thompson_085

0

मैं हाल ही में इस समस्या में भाग गया, जब मेरा स्व-हस्ताक्षरित प्रमाणपत्र समाप्त हो गया। मैंने गुगली की और बस एक वेब साइट से एक नया प्रमाण पत्र बनाने के लिए कमांड की प्रतिलिपि बनाई।

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/apache2/ssl/apache.crt

मेरी अपाचे विन्यास फाइल में: /etc/apache2/sites-available/default-ssl.conf। प्रमाणपत्र फ़ाइल और कुंजी फ़ाइल निम्न फ़ाइल नाम को संदर्भित करती है।

    SSLCertificateFile  /etc/apache2/ssl/apache.crt
    SSLCertificateKeyFile /etc/apache2/ssl/apache.key

इसलिए, ssl प्रमाणपत्र बनाते समय प्रमाणपत्र कुंजी फ़ाइल का सही स्थान प्रदान करके, मेरे मामले में यहां देखी गई त्रुटि आसान थी।

इसलिए, यहां वह कमांड है जिसका मुझे सही उपयोग और टाइप करना चाहिए था।

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt

0

मेरे मामले में मैंने इसे प्रत्येक संबंधित डोमेन के लिए मेरी अपाचे ssl config फाइल में बदल दिया है:

ServerName mydomain.com
ServerAlias www.mydomain.com

द्वारा :

ServerName www.mydomain.com
ServerAlias mydomain.com

क्योंकि मेरा प्रमाणपत्र "www.mydomain.com" के लिए है, न कि "mydomain.com" के लिए

पूरा अपाचे फ़ाइल:

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin noreply@mydomain.com
        ServerName www.mydomain.com
        ServerAlias mydomain.com
    DocumentRoot /home/mydomain.com/public_html
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|ico|png)$ \ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ \no-gzip dont-vary
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

    <Directory />
        Options +FollowSymLinks
        AllowOverride All
    </Directory>
    <Directory /home/mydomain.com/public_html>
        Options -Indexes +FollowSymLinks +MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride All
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>


ErrorLog ${APACHE_LOG_DIR}/error.log

LogLevel warn
SSLCertificateFile /etc/letsencrypt/live/www.mydomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.mydomain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

0

हमें DefaultN-sl फाइल में ServerName और ServerAlias ​​को जोड़ना था, न कि केवल विशिष्ट डोमेन के लिए conf फाइल।
यह हमारे लिए pesky त्रुटि से छुटकारा दिलाया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.