วิธีการติดตั้ง ECDHE ECDSA SSL Ceritificate กับ Let’s Encrypt

วิธีการติดตั้ง ECDHE ECDSA SSL Ceritificate กับ Let’s Encrypt เนื่องจากว่าทาง Let’s Encrypt นั้นยังไม่ลองรับการ Generate ECDHE ECDSA โดยตรงเราจะต้องทำการ Generate SSL Certificate ขึ้นมาเองแล้วให้ทาง Let’s Encrypt เป็นคน Sign Certificate ให้

เดิมทีนั้นกระบวนการเข้ารหัส SSL นั้นใช้วิธีการ RSA และใช้ Diffie Hellman เป็นหลักโดยกุญแจแบบไม่สมมราตร RSA นั้นใช้ในการแลกเปลี่ยนกุญแจ key exchange แบบ Diffie Hellman โดย RSA ใช้การประกาศผลคุณของเลขจำนวนเฉพาะสองจำนวนเป็นกุญแจสาธรณะปัจจุบันยังไม่มีการพิสูจน์ว่าการแยกตัวประกอบนั้นเป็นงานที่ยากในทางคณติศาสตร์ว่าจริงหรือไม่และความเชื่อใจว่า RSA นั้นกระบวนการที่ใช้ในการแยกที่มีประสิทธิภาพนั้นยังไม่ถูกค้นพบเพราะว่าเนื่องด้วยความกังวลว่า RSA Diffie Hellman นั้นจะสามารถถอดรหัสได้จึงมาการประยุกต์กระบวนการเข้ารหัสแบบใหม่ที่มีชื่อเรียกว่า elliptic curve cryptography (ECC)ขึ้นมา

สิ่งที่ต้องเตรียมก่อนที่จะใช้งาน ECDHE ECDSA SSL Certificate
1. Ubuntu 14.04 – 16.04 ผู้เขียนใช้ OS ทางฝั่งนี้
2. openssl
3. Let’s Encrypt ติดตั้งจาก Git อ่านได้จาก คลิ๊ก
4. NGINX

****ในบทความนี้ใช้ตัวอย่างเก็บไฟล์ทั้งหมด /home เพื่อความสะดวกในการเขียนไม่แนะนำให้ทำตามเด็ดขาดควรเก็บไฟล์ทั้งหมดไว้ใน path ที่ปลอดภัยและตั้ง permission ไฟล์ให้เหมาะสม บทความนี้ไม่ครอบคลุมถึงการ hardening ระบบ****

เอาล่ะมาเริ่มกันเลยวิธีการก็ไม่มีอะไรมาก
#openssl ecparam -genkey -name secp384r1 > “/home/privkey.pem”
ใช้ openssl generate certificate key ขึ้นมา

#cat /etc/ssl/openssl.cnf > “/home/openssl.cnf”
สร้าง open SSL configuration file

#echo “[SAN]” >> “/home/openssl.cnf”
เพิ่มหัวข้อ SAN เพื่อที่จะทำการเพิ่มโดเมนที่เราจะทำการขอให้ Let’s Encrypt เป็นคน sign certificate
#echo “subjectAltName=DNS.1:example.com,DNS.2:www.example.com” >> “/home/openssl.cnf”
DNS.1:example.com
DNS.2:www.example.com
DNS คือจำนวนโดเมนที่เราต้องการจะ Sign เพิ่มได้เท่าที่ตามต้องการ

#openssl req -new -sha256 -key “/home/privkey.pem” -nodes -out “/home/request.csr” -outform pem -subj “/O=example.com/[email protected]/CN=example.com” -reqexts SAN -config “/home/openssl.cnf”
ทำการ Generate Certificate ออกมาเพื่อที่เตรียมพร้อมให้ Let’s Encrypt

ขั้นตอนต่อไปจะเป็นการขอให้ Let’s Encrypt Sign Certificate ของเราที่เพิ่ง Gen ออกมา
#cd /opt/letsencrypt/
cd ไป path ที่ Let’s Encrypt ติดตั้งไว้อยู่

#./letsencrypt-auto certonly -d example.com,www.example.com –email “[email protected]” –csr “/home/request.csr”
เริ่มการขอให้ Let’s Encrypt Sign Certificate ถ้าหากใครต้องการใช้ Webroot ก็ทำตามนี้
#./letsencrypt-auto certonly –webroot /var/www/ -d example.com –email “[email protected]” –csr “/home/request.csr”

หลังจากขั้นตอนนี้ก็เหมือนกับการให้ Let’s Encrypt Gen Certificate ให้ถ้า Sign เสร็จแล้ว Let’s Encrypt ก็จะแจ้งว่าไฟล์ที่ Sign Certificate ให้ชื่อว่าอะไรและเก็บไว้ที่ไหน
โดย default แล้วจะตั้งชื่อว่า 0001_chain.pem

ไฟล์ที่เรามีทั้งหมดตอนนี้ก็จะมีทั้งหมด 4 file คือ
0001_chain.pem
openssl.cnf
privkey.pem
request.csr

ขั้นตอนต่อมาก็จะเป็นการ config ให้ NGINX ชี้ที่เก็บ Certificate ไป Certificate ใหม่ที่เราได้มาในบทความนี้เก็บไว้ที่ /home

server {
listen 443 http2;
server_name _;
ssl on;

ssl_certificate /home/0001_chain.pem;
ssl_certificate_key /home/privkey.pem;

}
ในส่วนของ config ssl_ciphers ถ้าหากใครยังไม่ได้เพิ่ม cipher suit ของ ECDHE ECDSA ก็ต้องเพิ่มเข้าไปด้วยไม่งั้น Browser ก็จะไม่เลือกใช้  ECDHE ECDSA

ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256;

หลังจากทุกอย่างพร้อมแล้วก็ restart NGINX เท่านี้เวปของเราก็พร้อมใช้งาน ECDHE ECDSA แล้วดูได้จากเวลาเข้าเวปแล้วให้ดูตรง SSL
ssl1

 

Comments

comments

Leave a Reply

Your email address will not be published. Required fields are marked *