Day: August 18, 2022

  • การติดตั้ง SSL บน apache2

    สำหรับ APACHE2
    1. สร้าง DH parameters
    #sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

    2. เปิดใช้ module headers ของ apache2
    #sudo a2enmod headers

    3. แก้ไขแฟ้ม  /etc/apache2/mods-available/ssl.conf ดังนี้
    SSLProtocol -ALL +TLSv1.2 +TLSv1.3
    //บาง OS เช่น CENTOS ใช้ SSLProtocol ALL -TLSv1 -TLSv1.1 -SSLv3 -SSLv2
    SSLOpenSSLConfCmd DHParameters “/etc/ssl/certs/dhparam.pem”
    SSLHonorCipherOrder on
    SSLCompression off
    SSLSessionTickets off
    SSLOptions +StrictRequire

    //เปลี่ยนตามที่ตัวเองใช้
    SSLCertificateKeyFile /etc/apache2/certificate/STAR_oas.psu.ac.th.key
    SSLCertificateChainFile /etc/apache2/certificate/STAR_oas.psu.ac.th.ca-bundle
    SSLCertificateFile /etc/apache2/certificate/STAR_oas.psu.ac.th.crt

    SSLOpenSSLConfCmd ECDHParameters brainpoolP512r1
    SSLOpenSSLConfCmd Curves brainpoolP512r1:sect571r1:secp521r1:secp384r1
    SSLCipherSuite TLSv1.3 TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384

    SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:TLS13_AES_128_GCM_SHA256:TLS13_AES_256_GCM_SHA384:TLS13_CHACHA20_POLY1305_SHA256:TLS_ECDHE_RSA_AES_256_GCM_SHA384:TLS_DHE_RSA_AES_256_GCM_SHA384:TLS_ECDHE_RSA_CHACHA20_POLY1305_SHA256:TLS_DHE_RSA_CHACHA20_POLY1305_SHA256:TLS_DHE_RSA_AES_256_CCM_8:TLS_DHE_RSA_AES_256_CCM:TLS_ECDHE_RSA_ARIA_256_GCM_SHA384:TLS_DHE_RSA_ARIA_256_GCM_SHA384:TLS_ECDHE_RSA_AES_128_GCM_SHA256:TLS_DHE_RSA_AES_128_GCM_SHA256:TLS_DHE_RSA_AES_128_CCM_8:TLS_DHE_RSA_AES_128_CCM:TLS_ECDHE_RSA_ARIA_128_GCM_SHA256:TLS_DHE_RSA_ARIA_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:PSK-CHACHA20-POLY1305:ECDHE-PSK-CHACHA20-POLY1305:DHE-PSK-CHACHA20-POLY1305:RSA-PSK-CHACHA20-POLY1305:DHE-RSA-AES256-GCM-SHA384:DH-RSA-AES256-GCM-SHA384:DHE-DSS-AES256-GCM-SHA384:DH-DSS-AES256-GCM-SHA384:ADH-AES256-GCM-SHA384:TLS_AES_256_GCM_SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDH-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDH-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-CCM8:DHE-RSA-AES256-CCM:PSK-AES256-CCM:DHE-PSK-AES256-CCM:PSK-AES256-CCM8:DHE-PSK-AES256-CCM8:ECDHE-ECDSA-AES256-CCM:ECDHE-ECDSA-AES256-CCM8:

    #
    ############
    # – OCSP Stapling, only in httpd 2.3.3 and later
    SSLUseStapling on
    SSLStaplingResponderTimeout 5
    SSLStaplingReturnResponderErrors off
    SSLStaplingCache “shmcb:logs/ssl_stapling(32768)”
    #
    # – HTTP Strict Transport Security Header.
    Header always set Strict-Transport-Security “max-age=31536000; includeSubDomainsi; preload”

    สำหรับคนที่ใช้ letsencrypt.org ตอนสร้าง cert ให้เพิ่มคำสั่งนี้ครับ –rsa-key-size 4096
    #sudo certbot certonly –rsa-key-size 4096 –manual –preferred-challenges dns

    เสร็จไปทดสอบที่
    https://www.ssllabs.com/ssltest/


    ปล.1 ถ้าใช้ Certificate ที่สำนักนวัตกรรมดิจิทัลและระบบอัจฉริยะ จัดชื้อมา จะได้ RSA key ขนาด 2048 bit ทำให้คะแนน Key Exchange ได้ 90 คะแนน

    ปล.2 ส่วนของ IIS ค่อยทำครับ เพราะต้องใช้ Windows 2022 ขึ้นไปครับ จึงจะ support TLSv1.3
    ที่ผมมีเพียง Windows 2019 จึงได้ คะแนน ส่วนของ Cipher Strength ได้แค่ 90

    ปล.3 ถ้าท่านตามนี้จะทำให้ browser version เก่าเข้าใช้งาน web ท่านไม่ได้เพราะได้ตัด Cipher ที่เป็นจุดอ่อนของระบบออกไป ซึ่ง browser เหล่านนั้นล่วนแต่ใช้ Cipher ที่ถุกตัดออก

    ปล.4 สำหรับ Windows ใช้คำสั่งนี้สร้าง cert สำหรับ IIS ครับ #sudo openssl pkcs12 -export -out oas.psu.ac.th.pfx -inkey oas.psu.ac.th.key -certfile intermediate_oas.psu.ac.th_ca.crt -in oas.psu.ac.th.crt

    ปล.5 เพิ่ม SSLCipherSuite ตาม https://www.tenable.com/plugins/nessus/156899 (2560/11/03)

  • การเปลี่ยน IP Bridge ของ Docker

    IP ของ Docker โดย Default เป็น Private IP Class B มันจะมีปัญหา Network ที่ใช้ Private IP Class B
    ในที่นี้เราจะเปลี่ยน Default ของ Docker กัน
    1. แก้ไขแฟ้ม /etc/docker/daemon.json เพิ่ม
    {
        “default-address-pools”:
            [
                {“base”:”10.10.0.0/16″,”size”:24}
            ]
    }
    ถ้ามี ค่าอื่นอยู่ให้ใส่ , หลัง ]
    {
        “dns”: [“172.18.1.2”, “172.18.1.3”],
        “default-address-pools”:
            [
                {“base”:”10.10.0.0/16″,”size”:24}
            ]
    }

    2. ตรวจสอบว่า Docker มีการสร้าง Network อะไรบ้าง
    #sudo docker network ls

    3.ลบ network ที่วงกลมสีแดงตามข้อ 2
       3.1 ต้องหยุดการทำงานของ container ที่เรียกใช้ก่อน
             #sudo docker network inspect taneeoaspsuacth_default

             #sudo docker stop tanee_mysql tanee_web
       3.2 ลบ network
             #sudo docker network rm taneeoaspsuacth_default

    4. สร้าง network ใหม่
    #sudo docker network create –driver bridge taneeoaspsuacth_default <= ชื่อไม่จำเป็นต้องเหมือนเดิม

    5. เชื่อม network และ container
    #sudo docker network connect taneeoaspsuacth_default tanee_web
    #sudo docker network connect taneeoaspsuacth_default tanee_web

    6. เริ่มการทำงานของ container 
    #sudo docker start tanee_mysql tanee_web

    7. ตรวจสอบ netwrok
    #sudo docker network inspect taneeoaspsuacth_default

    จะพบว่า ip ของ container  ได้เปลี่ยนไปแล้ว

    8. ลบ Bridge Network เดิม
    #ifconfig

    #sudo ip link set br-0f333b026e6f down
    #sudo ip link set br-b698ee3e22e0 down
    #sudo brctl delbr br-0f333b026e6f
    #sudo brctl delbr br-b698ee3e22e0