วันอังคารที่ 22 มิถุนายน พ.ศ. 2553

Apache + SSL ตอนที่ 1 ตั้งตัวเองเป็น CA

มีหลายๆครั้งที่ การใช้งานเว็บเซิฟเวอร์ก็ต้องการในส่วนของ SSL (Secure Socket Layer) ซึ่งใน การตั้งเซิฟเวอร์ production จริงๆ ก็จะใช้วิธีการ ซื้อ Cert มาจาก CA แล้วนำมาคอนฟิก ทีนี้แล้วถ้าเราจะทำการทดสอบเฉยๆ หรือ เป็นการใช้งานภายในองค์กร (ซึ่งอาจจะไม่ได้ใช้ IP จริง และ ไม่ได้เชื่อมต่ออินเตอร์เน็ต) จะทำยังไงหล่ะทีนี้ ?

หากว่าคุณซื้อไม่ได้ก็ไม่ต้องซื้อครับ ตั้งตัวเองเป็น CA ขึ้นมาเลย (บทความนี้ Assume ว่าคุณติดตั้ง FreeBSD + Apache 2.2 + openssl เรียบร้อยแล้วนะครับ)

ขั้นตอนแรก แก้ไขไฟล์ /etc/ssl/openssl.cnf ให้แก้อยู่ 2 ตำแหน่งคือ ตำแหน่งที่เก็บ Signature ต่างๆ และ วันหมดอายุของ Cert (อย่าลืมสร้างไดเรคทอรี่ /root/sslCA)

# vi /etc/ssl/openssl.cnf

-------------------------------------------
dir = /root/sslCA
default_days = 3650
-------------------------------------------

และถ้าคุณต้องการสร้าง Cert เยอะ ให้หลายๆเซิฟเวอร์ คุณอาจจะแก้ไขไฟล์ /etc/ssl/openssl.cnf ในส่วนของค่า Default อื่นๆได้เช่น

contryName_default = TH
stateOrProvinceName_default = NE
localityName_default = JJthai

ขั้นตอนต่อไปก็คือการสร้างไดเรคทอรี่ที่จำเป็น เพื่อเป็นการประหยัดเวลา และ เพื่อความเข้าใจที่ตรงกัน ก็ให้เซฟ shell script ข้างล่างนี้ไปรัน

createCA.sh

-------------------------------------------
#!/bin/sh
##############################################
# CA Creator
# http://www.freebsdmadeeasy.com/
#
# This Script creates a certificate of authority
# using OpenSSL. It was written and tested on
# FreeBSD 6.1-RELEASE Use at your own risk
#
#
##############################################


echo "Setting up the directories"
mkdir ~/sslCA
echo "sslCA"
mkdir ~/sslCA/certs
echo "sslCA/certs"
mkdir ~/sslCA/private
echo "sslCA/private"
mkdir ~/sslCA/newcerts
echo "sslCA/newcerts"

cd ~/sslCA
echo 1000 > serial
touch index.txt

echo "Setting the permission to 700 on sslCA"
chmod -R 700 ~/sslCA

echo "Creating the CA"
echo "Use a strong password and keep it safe!"
openssl req -new -x509 -days 3650 -extensions v3_ca -keyout private/cakey.pem -out cacert.pem -config /etc/ssl/openssl.cnf

more ~/sslCA/cacert.pem
more ~/sslCA/private/cakey.pem

echo "sslCA/cacert.pem"
echo "sslCA/private/cakey.pem"

echo "All Done!"
-------------------------------------------

เพื่อความปลอดภัย เมื่อรัน script เสร็จ ให้ เปลี่ยนสิทธิ์ในการเข้าถึง เป็น 700 ด้วย (ให้ root เข้าได้คนเดียว)

# cd /root
# chmod 700 sslCA

ถัดไปเป็นคำสั่ง ตั้งตัวเองเป็น CA

# cd ~root/sslCA
# openssl req -new -x509 -days 3650 -extensions v3_ca \
-keyout private/cakey.pem \
-out cacert.pem -config /etc/ssl/openssl.cnf

ผลลัพธ์ที่ได้จะออกมาเป็นประมาณนี้ (มีอยู่ช่วงนึงต้องใส่ password ห้ามลืม password อันนี้นะ เพราะมันคือ password ของ ca)

-------------------------------------------
Generating a 1024 bit RSA private key
...................++++++
.....................++++++
writing new private key to 'private/cakey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that
will be incorporated
into your certificate request.
What you are about to enter is what is called a
Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [TH]:
State or Province Name (full name) [NE]:
Locality Name (eg, city) [JJthai]:
Organization Name (eg, company) []: JJthai
Organizational Unit Name (eg, section) []: Developemnt
Common Name (eg, YOUR name) []: JJthai
Email Address []: support@jjthai.net
-------------------------------------------

เมื่อเสร็จเรียบร้อย สิ่งที่ควรจะได้ก็คือ 2 ไฟล์นี้

/root/sslCA/cacert.pem
/root/sslCA/private/cakey.pem

เท่านี้ก็ให้ไปอ่าน ตอนที่ 2 ซึ่งเป็นการ Gen Cert และตั้งค่า Apache + SSL ได้แล้ว

ไม่มีความคิดเห็น:

แสดงความคิดเห็น