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

Apache + SSL ตอนที่ 2 สร้าง Cert และ Config Apache

** ต้องผ่านตอนที่ 1 มาก่อนนะครับ ถ้ายังไม่ผ่านตอนที่ 1 ให้กลับไปตรวจสอบจนครบก่อนค่อยมา **

ขั้นตอนการสร้าง SSL request

# cd ~root/sslCA
# openssl req -new -nodes \
-out jjthai-req.pem \
-keyout private/jjthai-key.pem \
-config /etc/ssl/openssl.cnf

จะได้ผลลัพธ์ประมาณนี้ (ในช่วงท้ายจะมีการ ถาม challenge password ให้ เคาะ enter ผ่านเลย - คือไม่มี password เพราะ ถ้าใส่ challenge password ทุกครั้งที่ start apache มันจะขึ้น prompt เพื่อถาม password)

-------------------------------------------------
Generating a 1024 bit RSA private key
.............................++++++
.............................++++++
writing new private key to 'private/jjthai-key.pem'
-----
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) []: Development
Common Name (eg, YOUR name) []: JJthai
Email Address []: support@jjthai.net

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
-------------------------------------------------

ขั้นตอนการสร้าง SSL Certificate

# openssl ca
-config /etc/ssl/openssl.cnf
-out jjthai-cert.pem \
-infiles jjthai-req.pem

มันจะถาม password ของ CA (ที่บอกให้จำ password ในตอนที่ 1)

-------------------------------------------------
Using configuration from /etc/ssl/openssl.cnf
Enter pass phrase for /root/sslCA/private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 4096 (0x1000)
Validity
Not Before: Aug 5 02:51:42 2006 GMT
Not After : Aug 2 02:51:42 2007 GMT
Subject:
countryName = TH
stateOrProvinceName = NE
organizationName = JJthai
commonName = JJthai
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
8B:48:A5:3A:C7:EA:9A:B3:61:9F:AC:B9
X509v3 Authority Key Identifier:
keyid:F8:D3:77:0C:78:6D:87:20:00:BF
DirName:/C=TH/ST=NE/L=JJthai
/O=JJthai
/CN=JJthai
serial:E5:A5:39:3F:6E:63:FA:7E

Certificate is to be certified until
Aug 2 02:51:42 2007 GMT (365 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
-------------------------------------------------

สร้างไดเรคทอรี่เพื่อเก็บ Certificate

# mkdir /etc/ssl/crt
# mkdir /etc/ssl/key

# cp ~/sslCA/jjthai-cert.pem /etc/ssl/crt
# cp ~/sslCA/private/jjthai-key.pem /etc/ssl/key

กำหนดค่า Apache 2.2 ให้ใช้งาน SSL

ในไฟล์ httpd.conf ด้านล่างๆ มันจะ มี comment ในการ include ไฟล์ ไว้ ให้มองหาบรรทัดนี้แล้วเอา comment ออก (ไดเรคทอรี่อาจจะมีไม่ตรงกันบ้างขึ้นอยู่กับวิธีการติดตั้ง Apache ของแต่ละคน)

# Secure (SSL/TLS) connections
Include etc/apache22/extra/httpd-ssl.conf

จากนั้นก็เข้าไปแก้ไขไฟล์ /usr/local/etc/apache22/extra/httpd-ssl.conf concept หลักๆ ก็คือ ตัวเข้มที่ต้องชี้ ตำแหน่ง cert, key ให้ถูกต้อง

SSLCertificateFile /etc/ssl/crt/jjthai-cert.pem
SSLCertificateKeyFile /etc/ssl/key/jjthai-key.pem


หากในเครื่องมีหลายเว็บ แล้วแต่ละเว็บก็ต้องใช้ SSL คนละอันก็ต้องกำหนดค่า ของ แต่ละ virtualhost ให้ถูกแค่นั้นเอง ข้างล่างนี้เป็นตัวอย่าง (ยังไม่ได้ทดลองนะครับ อาจจะ work หรือ ไม่ work ก็ต้องไปลองแก้กันดู)

-------------------------------------------------

ServerName ssl.jjthai.net
SSLEngine on
SSLCertificateFile /etc/ssl/crt/jjthai-cert.pem
SSLCertificateKeyFile /etc/ssl/key/jjthai-key.pem

DocumentRoot /usr/local/www/apache22/data
CustomLog /usr/local/www/logs/ssl-access_log combined
ErrorLog /usr/local/www/logs/ssl-error_log

-------------------------------------------------

จากนั้นให้ รีสตาร์ท apache service แล้วลอง ใช้ browser เรียก https:// เพื่อทดสอบ จะต้องใช้งานได้ ถ้าไม่ได้ แต่ทำตามขั้นตอนข้างบนทุกอย่างแล้ว ก็อาจจะเป็นที่ Firewall ที่ปิดพอร์ต หรือไม่ก็ Browser ที่ block certificate อยู่ แค่นั้นเอง

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

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