Apache + SSL

posted on 25 May 2009 22:33 by pongtawat  in admin

จดไว้กันลืม เนื่องจากลืมไปแล้วรอบหนึ่ง

วิธีเปิด SSL บน Apache 2 บน Ubuntu

  1. ต้องสร้าง SSL Certificate/Key ก่อน วิธีสร้างแบบละเอียดไปดูได้ที่ mini-Howto หรือที่นี่ ส่วนวิธีสร้างแบบขี้เกียจอ่านก็ตามนี้เลย

    openssl genrsa -out server.key 1024
    openssl req -new -key server.key -out server.csr
    openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
  2. อีกวิธีในการสร้าง Certificate คือใช้ SSLeay script ช่วย แต่จำ link ไม่ได้แล้ว
  3. เราจะได้ไฟล์มาสองไฟล์ server.key กับ server.crt ให้ copy ไปไว้ตามนี้

    server.crt -> /etc/ssl/certs
    server.key -> /etc/ssl/private
  4. enable SSL ใน apache

    a2enmod ssl
  5. แก้ Virtual host file ของเรา ให้เริ่มต้นไฟล์ด้วย

    NameVirtualHost *:443

    เพื่อจะได้ไม่ตีกับ Virtual host ปกติ และแก้ <VirtualHost *> ให้เป็น <VirtualHost *:443>
  6. เพิ่ม config ต่อไปนี้ลงใน Virtual Host ของเรา

    SSLEngine on
    SSLProtocol -all +TLSv1 +SSLv3
    SSLCertificateFile /etc/ssl/certs/server.crt
    SSLCertificateKeyFile /etc/ssl/private/server.key
    SSLCipherSuite HIGH:MEDIUM
  7. restart Apache 2 เป็นอันเสร็จ

จริงๆ แล้วมีวิธีที่ง่ายกว่ามากๆ คือใช้ stunnel ครอบ Apache เอา

แต่ว่า stunnel ดันมีปัญหากับการใช้กับ subversion เนื่องจากเวลาที่สั่ง svn copy (เช่นเวลา branch, tag) subversion WebDAV จะใช้ full URL ทำให้ source URL (ผ่าน stunnel แล้วเลยเป็น http) กับ destination URL (ยังคงเป็น https) มันถูกมองเป็นคนละ site กัน มันเลยจะขึ้น Error 502 Bad Gateway เท่าที่ค้นหาดูก็ไม่เห็นมีวิธีแก้ไขเลย เลยทำให้ต้องมาใช้ SSL บน Apache แทน

หมายเหตุ

  1. การใช้งาน SSL นั้น "ไม่" สนับสนุนการทำ Name-based Virtual Host เนื่องจากข้อจำกัดของตัว protocol เอง (แต่ถ้าใช้ stunnel จะใช้ Virtual Host ได้ตามปกติ)
  2. เวลาสร้าง Certificate ถ้ามี subdomain สามารถใส่ * เพื่อให้ใช้กับทุก subdomain ได้ เช่น *.exteen.com

Comment



smilebig smileopen-mounthed smileconfused smilesad smileangry smiletonguequestionembarrassedsurprised smilewinkdouble winkcry

Tweet

ทำไมเก่งอย่างงี้หล่ะคะ
โปรแกรมเมอร์แน่เลยงะHot!