สำนักวิทยบริการและเทคโนโลยีสารสนเทศ (สวส.)

Office of Academic Resources and Information Technology

การสร้าง Self-Signed SSL Certificate สำหรับการทดลองหรือใช้ภายในองค์กร

การพัฒนาระบบเวบแอปพลิเคชั่นที่ผ่านโปรโตคอล http นั้น ข้อมูลที่วิ่งในระบบจะไม่ถูกเข้ารหัส ทำให้อาจเกิดการดักจับข้อมูลหรืออื่น ๆ ซึ่งสร้างความไม่ปลอดภัยในการใช้งาน เพื่อความปลอดภัย เราควรให้เวบแอปพลิเคชั่นของเรา วิ่งบนโปรโตคอล https ซึ่งมีการเข้ารหัสข้อมูล และเราต้องใช้ SSL Certificate โดยต้องเสียตังให้กับองค์กรที่รับรองการออก SSL Certificate เหล่านี้ให้กับเรา แต่ถ้าเราอยากจะสร้าง SSL Certificate ของเราเอง เพื่อทดลองหรือใช้ภายในองค์กร เราก็สามารถทำได้ง่าย ๆ ในระบบ Ubuntu ด้วยคำสั่ง openssl ง่าย ๆ ดังนี้ครับ

1. สร้าง Private Key
ในขั้นนี้เราจะสร้าง Private Key ขึ้นมาโดยจะเข้ารหัสแบบ Triple-DES และมีขนาด 1024 บิต ด้วยคำสั่งดังนี้ครับ
$ openssl genrsa -des3 -out server.key 1024
Generating RSA private key, 1024 bit long modulus
....................................++++++
..++++++
e is 65537 (0x10001)
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:

ในขั้นตอนนี้ ระบบจะให้เราใส่ pass phrase ด้วยนะครับ เมื่อเรากำหนด pass phrase เสร็จแล้วเราจะได้ไฟล์ server.key มาหนึ่งไฟล์ ซึ่งก็คือไฟล์ Private Key นั่นเองครับ

2. สร้าง CSR (Certificate Signing Request)
ในขั้นนี้เราจะสร้างไฟล์ CSR ขึ้น เมื่อเราสร้างแล้ว เราสามารถนำไฟล์ CSR และ Private Key เพื่อนำไปขอ SSL Certificate ได้ครับ หรือไม่ก็นำไปสร้าง self-signed SSL Certificate ของเราขึ้นมาเองเพื่อทดลองหรือใช้ภายในองค์กรได้ครับ โดยการสร้าง CSR ทำได้ดังนี้ครับ
$ openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key:
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) [AU]:TH
State or Province Name (full name) [Some-State]:Songkhla
Locality Name (eg, city) []:Muang
Organization Name (eg, company) [Internet Widgits Pty Ltd]:xData Company
Organizational Unit Name (eg, section) []:Information Tenchnology
Common Name (e.g. server FQDN or YOUR name) []:xdata.com
Email Address []:authapon@gmail.com

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

ระบบจะส่งคำถามต่าง ๆ มาให้เรา เราก็ตอบไปเรื่อย ๆ ครับ พอครบก็จะได้ไฟล์ server.csr มาครับ

3. เอา pass pharse ออกจาก Private Key
ในส่วนของ Private Key นั้นจะมี pass phrase อยู่ ซึ่งเมื่อเวลานำไปใช้งานจริง จะทำให้ Browser ทำการถาม pass phrase เพื่อเข้าเวบทุกครั้ง ซึ่งอาจจะไม่เหมาะสมกับความต้องการของเรา เพราะเราต้องการให้สามารถเข้าเวบได้ทันที โดยไม่ต้องถาม pass phrase ให้ยุ่งยาก เราก็สามารถนำ pass phrase ออกจาก Private Key ได้ดังนี้ครับ
$ cp server.key server.key.org
$ openssl rsa -in server.key.org -out server.key
Enter pass phrase for server.key.org:
writing RSA key

เราก็จะได้ไฟล์ server.key ที่ไม่มี pass phrase แล้วครับ

4. สร้าง Self-Signed Certificate
ขั้นตอนสุดท้าย เราก็จะสร้าง Self-Signed Certificate ขึ้นมาดังนี้ครับ
$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Signature ok
subject=/C=TH/ST=Songkhla/L=Muang/O=xData Company/OU=Information Tenchnology/CN=xdata.com/emailAddress=authapon@gmail.com
Getting Private key

เราก็จะได้ไฟล์ server.crt เพิ่มมาอีกหนึ่งไฟล์ เวลานำไปใช้งาน ไฟล์ที่ใช้มี 2 ไฟล์ ซึ่งก็คือ server.crt และ server.key นั่นเองครับ สำหรับในบางระบบ เช่น apache2 หรือ pound อาจจะต้องการไฟล์ pem เราก็จะสามารถสร้างไฟล์ pem ได้ง่าย ๆ ดังนี้ครับ
$ cat server.csr server.key > server.pem

แค่นี้เราก็ได้ไฟล์ pem มาใช้งานแล้วครับ

ที่มา : How to create a self-signed SSL Certificate ...