รอบนี้เราจะมาทดลองทำ SSL Certificate ให้เว็บไซต์ของเราปลอดภัยขึ้นไปอีกนิดนึงบน nginx ครับ

โดยจะพูดถึง SSL ก่อนนะครับ

SSL ย่อมาจาก Secure Socker Layer ซึ่งได้ถูกพัฒนามาเป็น TLS(Transport Layer Security) ที่เป็นเทคโนโลยีการเข้ารหัสข้อมูล เพื่อให้การส่งข้อมูลผ่านเครือข่ายมีความปลอดภัยมากขึ้น โดยเรียกผ่านโปรโตคอลความปลอดภัยต่างๆ ตามการใช้งาน ที่อาจจะเคยได้ยินกันบ่อยๆเช่น HTTPS

การที่เราสร้าง SSL ขึ้นมาเองเพื่อการทดลองนั้น จะเรียกว่าเป็น SSL แบบ Self-signed ซึ่งเป็นใบรับรองที่ใช้คอมพิวเตอร์เครื่องไหนสร้างก็ได้ แต่จะไม่ผ่านการรับรองจาก CA (Certification authority)

ในการเข้ารหัส Certifacte Authority (CA) เป็นคนที่ออกใบรับรองดิจิตอล ใบรับรองดิจิตอลรับรองความเป็นเจ้าของ Public Key โดยมีชื่อเรื่องของใบรับรอง ใบรับรองอนุญาตให้คนอื่นใช้งานได้ โดยขึ้นอยู่กับลายเซ็นหรือยืนยันตัวโดยการทำ private key ที่สอดคล้องกับ public key ที่ถูกรับรอง ในรูปแบบความสัมพันธ์ที่เชื่อถือได้นี้ CA เป็นบุคคลที่สามที่เชื่อถือได้ เชื่อถือในเรื่องเจ้าของใบรับรองและกลุ่มคนที่ขึ้นอยู่กับใบรับรอง ผังของ Public Key Infrastructure (PKI) จำนวนมากจะแสดงตนเป็น CA
อ้างอิง : วิกิพีเดีย Certificate authority

เริ่มต้นครับ เราต้องมี nginx ก่อนโดยลงตามนี้ครับ

sudo apt-get update
sudo apt-get install nginx

เริ่มแรก ทำการสร้าง directory สำหรับเก็บใบรับรอง โดยในที่นี้จะใช้เป็น /etc/nginx/ssl

sudo mkdir /etc/nginx/ssl

เราจะสร้างใบรับรอง SSL กัน โดยการที่เราสร้างเองนี่จะเป็นแบบ Self-signed ด้วยคำสั่ง

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

openssl เป็นคำสั่งพื้นฐานที่ใช้สำหรับสร้างและจัดการของ OpenSSL จัดการ ใบรับรอง Key และอื่นๆ
req เป็นสั่งย่อยที่ใช้สำหรับการร้องขอใบรับรอง ในที่นี้เราจะใช้ certificate signing request (CSR) แบบ X.509
-x509 เป็นการประกาศใช้ certificate signing request (CSR) แบบ X.509
-nodes เป็นการบอก OpenSSL ที่ไว้ข้ามการใส่รหัสผ่าน (passphrase) เพื่อให้ nginx สามารถใช้งานได้โดยไม่ต้องให้ ผู้ใช้ใส่รหัสทุกครั้งที่ restart เครื่อง
-days 365 เป็นการระบุระยะเวลาของใบรับรอง ในที่นี้ระบุให้เป็น 1 ปี
-newkey rsa:2048 เป็นการประกาศให้สร้างใบรับรอง และ key พร้อมกัน เป็นคีย์แบบ RSA ที่เข้ารหัสยาว 2048 บืท
-keyout ใช้ระบุ directory ที่เก็บ key ที่ถูกสร้างขึ้นมา ตามที่เราระบุ
-out ใช้ระบุ directory ที่เก็บ ใบรับรับรอง ตามที่เราระบุ

จากนั้นให้เราระบุข้อมูลต่างๆลงไปในใบรับรองของเรา

Country Name (2 letter code) [AU]:TH
State or Province Name (full name) [Some-State]:Your State
Locality Name (eg, city) []:Your City
Organization Name (eg, company) [Internet Widgits Pty Ltd]:ProntoTools
Organizational Unit Name (eg, section) []:R&D
Common Name (e.g. server FQDN or YOUR name) []:<span class="highlight">your_domain.com</span>
Email Address []:admin@your_domain.com

ขั้นตอนต่อมาคือการไป Config nginx ของเรา โดยของผมจะเอาไว้ที่ /etc/nginx/conf.d/sites1.conf

sites1.conf

server {
        listen 80 default_server;

        root /usr/share/nginx/html;
        index index.html index.htm;

        server_name sites1.com;

        location / {
                try_files $uri $uri/ =404;
        }
}

เราจะต้องไปตั้งค่าให้ nginx ของเรารับการ request ที่พอร์ท 443 (HTTPS) และระบุ ssl_certificate กับ ssl_certificate_key ของเราให้กับ nginx โต้ดของเราจะออกมาหน้าตาประมาณนี้

server {
        listen 80 default_server;

        #Listen HTTPS port
        listen 443 ssl;

        root /usr/share/nginx/html;
        index index.html index.htm;

        server_name sites1.com;

        #Add certificate and key
        ssl_certificate /etc/nginx/ssl/nginx.crt;
        ssl_certificate_key /etc/nginx/ssl/nginx.key;

        location / {
                try_files $uri $uri/ =404;
        }
}

จากนั้นทำการเซฟไฟล์ให้เรียบร้อย แล้วก็ restart nginx

sudo service nginx restart

จากนั้นทดลองเข้าไซต์ของเรา อย่าลืมเซต Hosts ก่อนนะครับ

http://sites1.com
2016-12-28-212406_1366x768_scrot
เข้าได้ปกติ เย้~~

จากนั้นลองเข้าผ่าน HTTPS ครับ

2016-12-28-213040_1366x768_scrot
เริ่มมาจะมีการเตือนจาก Browser ของเราครับ เพราะใบรับรองไม่ได้การรับรองจาก CA
2016-12-28-213051_1366x768_scrot
เราก็ไปคลิกเข้าไปครับ เรารับได้ ใบรับรองเราเอง อิอิ
2016-12-28-213100_1366x768_scrot
เย้!! https:// แดงมาเลย 555

ถ้าหากไม่สามารถเข้าผ่าน https ได้เลยให้ลองตรวจสอบ firewall ก่อนนะครับได้ allowed port 80,443 ไว้รึเปล่า

สำหรับคราวนี้ก็เสร็จแล้วครับ แต่ถ้าหากเรานำไปใช้งานจริงๆ ใบรับรองแดงแบบนี้จะไม่น่าเชื่อถือครับและจะแดงเตือนแบบนี้ แหม ประทับใจแต่แรกพบ เป็นเรา เราก็ไม่เข้านะ กลัว

เดียวครั้งหน้า ผมจะมาพูดถึงการใช้ใบรับรอง ของ Let’s Encrypt ซึ่งเป็นผู้ให้บริการ Certificate Authority (CA) หรือคนที่ออกใบรับรองให้กับเรา แบบฟรี!!! เราจะไม่ตัวแดงกันต่อไปแล้ว ฮ่าๆๆ ติดตามต่อในบทความหน้านะครับผม

.<

Leave a comment

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: