วิธีกำหนดค่า SSL ใน apache


10

ฉันได้ติดตั้ง apache ใน RHEL 6 ทุกอย่างทำงานได้ดี สิ่งที่เปลี่ยนแปลงและการกำหนดค่าที่ควรทำเพื่อใช้ https: // localhost: 443 /

หากฉันเปลี่ยน "Listen 80" เป็น 443 แสดงว่าเกิดข้อผิดพลาดในการเชื่อมต่อ SSL

"ข้อผิดพลาด 107 (สุทธิ :: ERR_SSL_PROTOCOL_ERROR): ข้อผิดพลาดของโปรโตคอล SSL"

คำตอบ:


13

หากคุณกำลังใช้apache2งานคุณต้องทำสิ่งต่อไปนี้:

ขั้นตอนที่ 1:ใช้ OpenSSL เพื่อสร้างคีย์ที่ใช้ในการรักษาความปลอดภัยเว็บไซต์ของคุณ คีย์เหล่านี้ใช้เมื่อทำการเข้ารหัสและถอดรหัสการรับส่งข้อมูลไปยังไซต์ที่ปลอดภัยของคุณ

$ openssl genrsa -out mydomain.key 1024

คำสั่งนี้จะสร้างคีย์ส่วนตัว 1024 บิตและวางไว้ในไฟล์ mydomain.key

ขั้นตอนที่ 2:สร้างใบรับรองของคุณเอง

$ openssl req -new -key mydomain.key -x509 -out mydomain.crt

ขั้นตอนที่ 3:เก็บกุญแจส่วนตัวในไดเรกทอรีและใบรับรองในไดเรกทอรี/etc/apache2/ssl.key//etc/apache2/ssl.crt/

หมายเหตุ:ssl.keyไดเรกทอรีจะต้องสามารถอ่านได้เท่านั้นโดยราก

ขั้นตอนที่ 4:ตอนนี้คุณต้องแก้ไขไฟล์ในhttpd.conf/etc/apache2

ตอนนี้ไฟล์นี้ควรมีเนื้อหาเช่นนี้:

NameVirtualHost *:80
NameVirtualHost *:443
Listen 443

<VirtualHost *:80>
ServerAdmin webmaster@mydomain.com
DocumentRoot /srv/www/htdocs/mydomain
ServerName www.mydomain.com
ServerAlias mydomain.com
</VirtualHost>


<VirtualHost *:443>
ServerAdmin webmaster@mydomain.com
DocumentRoot /srv/www/htdocs/mydomain-secure
ServerName mail.mydomain.com
SSLEngine on
SSLCertificateFile /etc/apache2/ssl.crt/mydomain.crt
SSLCertificateKeyFile /etc/apache2/ssl.key/mydomain.key
</VirtualHost>


<Directory /srv/www/htdocs/mydomain-secure>
SSLRequireSSL
</Directory>


<VirtualHost *:80>
ServerAdmin webmaster@mydomain.com
DocumentRoot /srv/www/htdocs/mydomain
ServerName mail.mydomain.com
RedirectMatch permanent (/.*) https://mail.mydomain.com$1
</VirtualHost>

สามบรรทัดแรกไม่จำเป็น 1. NameVirtualHostเลิกใช้แล้วและจะถูกลบใน Apache รุ่นอนาคต ปัจจุบันมันไม่มีอยู่แล้ว 2. Listen 443สามารถทำให้เกิดปัญหาหาก apache ได้รับการกำหนดค่าให้ฟังบนพอร์ต 443 ซึ่งในการกระจาย linux จำนวนมากเป็นกรณีที่แล้ว เพิ่มเฉพาะเมื่อคุณแน่ใจว่าบรรทัดนี้ไม่ได้กำหนดค่าไว้ที่อื่น
lanoxx

3

อย่าเปลี่ยนListen 80ไปใน443 /etc/httpd/conf/httpd.confSSL /etc/httpd/conf.d/ssl.confการกำหนดค่าใน บน RHEL 6 SSL จะเปิดใช้งานและรับฟังโดยค่าเริ่มต้นด้วยใบรับรองที่ลงชื่อด้วยตนเอง

คุณสามารถไปที่ไซต์เริ่มต้นโดยใช้ SSL เพียงแค่เรียกดูhttps://localhost(คุณไม่จำเป็นต้องเพิ่มพอร์ตในส่วนท้ายของ URL)

หากคุณต้องการที่จะส่งต่อการร้องขอ HTTP ทั้งหมดเพื่อ HTTPS (ซึ่งเป็นสิ่งที่ผมเชื่อว่าคุณกำลังพยายามที่จะบรรลุ) mod_rewriteคุณสามารถเพิ่มการเปลี่ยนเส้นทางถาวรหรือใช้โมดูล

วิธีที่ง่ายและปลอดภัยที่สุดคือตั้งค่าการเปลี่ยนเส้นทางแบบถาวร เปิดใช้งานชื่อโฮสต์เสมือนและเพิ่มRedirectคำสั่งไปยัง VirtualHost /etc/httpd/conf/httpd.confใน

NameVirtualHost *:80
<VirtualHost *:80>
   ServerName localhost
   Redirect permanent / https://localhost
</VirtualHost>

ใช้mod_rewriteคุณยังสร้างโฮสต์เสมือนที่มีชื่อ นี่ไม่ใช่วิธีที่แนะนำ แต่ใช้งานได้

NameVirtualHost *:80
<VirtualHost *:80>
   # Enable the Rewrite engine
   RewriteEngine On
   # Make sure the connection is not already HTTPS
   RewriteCond %{HTTPS} !=on
   # This rewrites the URL and forwards to https
   RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
</VirtualHost>

หากคุณต้องการปิด SSL ให้ใส่เครื่องหมายบรรทัดเหล่านี้/etc/httpd/conf.d/ssl.confและรีสตาร์ท Apache

LoadModule ssl_module modules/mod_ssl.so
Listen 443

ที่จริงแล้วถ้าคุณเพิ่มแพ็คเกจ mod_ssl สำหรับ RHEL6 มันจะสร้าง /etc/httpd/conf.d/ssl.conf ซึ่งโหลดโมดูลและตั้งค่า<VirtualHost _default_:443>โดยมีพารามิเตอร์ที่จำเป็นทั้งหมดซึ่งแต่ละอันมีความคิดเห็น mod_sslแพคเกจไม่ได้ติดตั้งโดยอัตโนมัติหากคุณติดตั้งhttpdแพคเกจ
jsbillings

1
ฉันต้องการเพิ่มสิ่งเดียวในการเขียนใหม่ของคุณ: ใช้[R=301,L]แทนเพียง[R,L]วิธีนี้การเขียนใหม่จะใช้ตัวเลือกถาวรของรหัสสถานะHTTP 3xx
dcestari
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.