เปลี่ยน Certificate!?

เนื่อง Certificate *.psu.ac.th จาก Comodo เดิมซึ่งกลายเป็น Cert. ที่จัดว่า WEAK แล้ว ทางเจ้าหน้าที่เครือข่ายจึงได้ขอ Cert. ใหม่มา ที่ Strong ขึ้น 🙂 ก็ต้องมานั่งเปลี่ยน Cert. ในเครื่องที่ให้บริการขั้นตอนดังนี้

  • Download Cert. ใหม่มาซึ่งต้องติดต่อขอไปที่ Net@dmin โดยผ่านช่องทางของ help.psu.ac.th
  • ไฟล์ที่จะโหลดมาใช้งานมีทั้งหมด 3 ไฟล์ได้แก่ STAR_psu_ac_th.ca-bundle, STAR_psu_ac_th.crt และ STAR_psu_ac_th_key.key เมื่อดาวน์โหลดมาเสร็จแล้วให้เอาไปแทนที่เก่าได้เลย ในตัวอย่างนี้จะเก็บไว้ที่ /etc/ssl/private
  • ทีนี้ มาดู config เก่าของ apache2

<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName bahamut.psu.ac.th
ServerAdmin cc-server-admin@group.psu.ac.th
DocumentRoot "/var/www/html"
ErrorLog ${APACHE_LOG_DIR}/bahamut.ssl_error_log
TransferLog ${APACHE_LOG_DIR}/bahamut.ssl_access_log
LogLevel warn

SSLEngine on
SSLCertificateFile /etc/ssl/private/STAR_psu_ac_th.crt
SSLCertificateKeyFile /etc/ssl/private/STAR_psu_ac_th.key
SSLCertificateChainFile /etc/ssl/private/STAR_psu_ac_th.ca-bundle

RewriteEngine On
RewriteRule /avl https://licensing.psu.ac.th

<Directory /var/www/licensing>
AllowOverride All
Order deny,allow
Deny from all
Allow from 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16
</Directory>
</VirtualHost>
</IfModule>

    • จะเห็นว่าไฟล์ชื่อไม่ตรงอยู่ไฟล์หนึ่งคือ STAR_psu_ac_th.key ก็เปลี่ยนชื่อให้ตรง เป็นอันเสร็จ
    • แต่ … เนื่องจากเป็น Cert. ใหม่ เพื่อเพิ่มความแข็งแรง เจ้าหน้าที่เครือข่ายจึงได้กำหนด Passphrase ไว้ด้วย ต้องแก้ไขแฟ้ม /etc/apache2/mods-enabled/ssl.conf ในบรรทัดที่เขียนว่า SSLPassPhraseDialog exec:/usr/share/apache2/ask-for-passphrase ให้แก้ /usr/share/apache2/ask-for-passphrase เป็น /etc/ssl/private/passphrase-script แล้วสร้างแฟ้ม /etc/ssl/private/passphrase-script มีข้อความว่า

#!/bin/sh
echo "passphrase ที่ได้รับแจ้งจาก Net@dmin"

    • chmod +x /etc/ssl/private/passphrase-script และทดสอบ script ด้วยว่าผลลัพธ์ที่ได้ตรงกับ passphrase ที่ Net@dmin แจ้งมา
    • restart apache2 ด้วยคำสั่ง sudo service apache2 restart ถ้า passphrase ที่ใส่ไว้ในแฟ้ม passphrase-script ถูกต้องจะ restart สำเร็จ
    • เป็นอันเสร็จ

สิ่งที่ต้องแก้เพื่อให้ได้ A+ ในการทดสอบกับเว็บ https://www.ssllabs.com/ssltest/analyze.html

  • แก้ไขแฟ้ม /etc/apache2/mods-enabled/ssl.conf โดยแก้ไข/เพิ่ม ข้อความดังต่อไปนี้

SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:
RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
SSLHonorCipherOrder on
SSLProtocol all -SSLv3 -SSLv2
SSLCompression off

  • sudo a2enmod headers เพื่อให้ module headers ของ apache2 ทำงาน
  • แก้ไขแฟ้มของไซต์ที่เปิด ssl ไว้ จากตัวอย่างนี้คือ /etc/apache2/sites-enabled/licensing-ssl.conf โดยเพิ่มข้อความว่า
    Header add Strict-Transport-Security "max-age=15768000;includeSubDomains"
  • ตัวอย่าง

<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName licensing.psu.ac.th
ServerAdmin cc-server-admin@group.psu.ac.th
DocumentRoot "/var/www/html/avl"
ErrorLog ${APACHE_LOG_DIR}/licensing.ssl_error_log
TransferLog ${APACHE_LOG_DIR}/licensing.ssl_access_log
LogLevel warn
SSLEngine on
Header add Strict-Transport-Security "max-age=15768000;includeSubDomains"
SSLCertificateFile /etc/ssl/private/STAR_psu_ac_th.crt
SSLCertificateKeyFile /etc/ssl/private/STAR_psu_ac_th.key
SSLCertificateChainFile /etc/ssl/private/STAR_psu_ac_th.ca-bundle
</VirtualHost>
</IfModule>

  • restart apache2 ด้วยคำสั่ง sudo service apache2 restart
  • ทั้งหมดนี้ทำ บน Ubuntu 14.04.1
  • ผลของการตั้งค่าตามนี้ จะทำให้ผู้ใช้ที่ยังใช้งาน Windows XP และ IE6 ไม่สามารถใช้งานเว็บไซต์ได้
  • จบ ขอให้สนุกครับ

จุดสังเกตุเมื่อเปลี่ยน certificate แล้ว
ก่อนเปลี่ยนบน Chrome เบราเซอร์
https-sharedrive-chrome-before-update-cert

หลังเปลี่ยนบน Chrome เบราเซอร์
after

ที่มา:

http://www.bauer-power.net/2014/04/how-to-enable-http-strict-transport.html#.VJJ8pXtKW7A

http://www.hackido.com/2009/10/quick-tip-auto-enter-password-for-your.html