Feb 4, 2013

Cài đặt OpenCA theo kiến trúc phân tầng

Trong bài hướng dẫn Cài đặt openca kiến trúc SingleCA trên Centos 5.x  tôi đã hướng dẫn các bạn cài đặt  openCA với kiến trúc "All in one". Thực tế triển khai thì người ta sẽ không dùng đến kiến trúc này vì những lý do mà trong bài viết Chương 3. Kiến trúc PKI tôi đã nói đến. Hôm nay tôi sẽ cài đặt hệ thống thực theo kiến trúc phân cấp hay phân tầng.


Kiến trúc:
Nhắc lại chút xíu về kiến trúc 3 tầng tách biệt: "
... Trong một PKI X.509, nói chung có ba thành phần: một cơ quan cấp chứng nhận (CA), một cơ quan đăng (RA) và điểm cung cấp chứng nhận (CDP). Ba phần của một PKI được đặt tại một tòa nhà ("Trustcenter") được bảo vệ vật lý  bằng cách sử dụng biometry, người bảo vệ, cammera giám sát, hệ thống báo động và các thiết bị khác..."

Chúng ta sẽ cài đặt 3 thành phần này như mô tả sau:
+ 1 server đóng vai trò "cơ quan cấp chứng nhận" cao nhất đặt tên là RootCA
+ 1 server đóng vai trò "cơ quan cấp chứng nhận địa phương"  đặt tên là SubCA
+ 1 server đóng vai trò "cơ quan đăng " đặt tên là RA  - Đồng thời có 1 giao diên trên RA gọi là CDP.

Lần lượt chúng ta cài đặt: RootCA, SubCA, RA

Chuẩn bị:
3 máy ảo chạy HĐH Centos 5.7 (Mẹo: bạn cài đặt 1 máy thôi, update này kia xong, rồi clone thêm 2 máy nữa)

I. Cài đặt RootCA

Cài đặt các thư viện cần thiết:


yum install -y gcc-c++
yum install -y openssl-devel db4 db4-devel mysql-server mysql-devel perl-XML-Parser httpd

Tạo người dùng mới phục vụ quá trình biên dịch và cấu hình openca


groupadd openca
useradd -g openca -u 1201 openca
 

Tạo database cho openca:

mysql -u root -p

mysql> show databases;

mysql>create database dbrootca;

mysql> grant all privileges on *.* to 'openca'@'localhost' identified by '123456';

mysql> FLUSH PRIVILEGES;

mysql> exit;

Sửa file host /etc/hosts thêm vào cuối file như sau

diachiipcuamayban     diachi.local     diachi

Ví dụ : 192.168.1.2        tvuca.local                tvuca

Download openca-tool:

wget http://ftp.openca.org/openca/openca-tools/releases/current/binaries/linux/CentOS5.5-i686/openca-tools-1.3.0-1.el5.i386.rpm

Hoặc

wget  https://www.dropbox.com/s/b3xlka95tuxrx02/openca-tools-1.3.0-1.el5.i386.rpm

Cài đặt:  rpm -Uvh openca-tools-1.3.0-1.el5.i386.rpm

Download openca-base:
wget http://ftp.openca.org/openca-base/releases/current/sources/openca-base-1.1.1.tar.gz
Hoặc:  wget https://www.dropbox.com/s/8m00w36n5ou85k7/openca-base-1.1.1.tar.gz

Giải nén openca-base: 

tar -xvf
openca-base-1.1.1.tar.gz

cd openca-base-1.1.1


Tiến hành build:

# ./configure --prefix=/opt/openca \
--with-ca-oganization="TVU RootCA Labs" \
--with-httpd-fs-prefix=/var/www \
--with-httpd-main-dir=pki \
--with-db-name=dbrootca \
--with-db-host=localhost \
--with-db-user=openca \
--with-db-passwd=123456 \
--with--db-type=mysql \
--with--db-service-mail-account=rootca@gmail.com

OpenCA sẽ được cài đặt vào /opt/openca. Sử dụng cơ sở dữ liệu MySQL với
database openca, user là openca password 123456. Web quản trị được lưu
tại thư mục /var/www/pki

Tiếp theo là biên dịch

# make

Hoàn tất cài đặt với lệnh make install. Ở đây triển khai trên single node cả RootCA nên sẽ là:
# make install-online && make install-ca

Khởi động lại web server:
# service httpd restart

Lưu ý là trong openca 1.1.1 sẽ có lỗi, vì vậy cần tiên hành fix lỗi này.

Ghi đè 2 file này:

# cp User.pm /opt/openca/lib/openca/perl_modules/perl5/OpenCA/

# cp initServer /opt/openca/lib/openca/functions/


Chọn yes để thay thế file cũ.

Khởi động lại web server:

# service httpd restart

Hoàn tất cài đặt. Tiếp theo là cấu hình cho OpenCA.

Di chuyển đến thư mục cấu hình CA
Ở đây sẽ cấu hình cho mọi máy có thể truy cập mà ko cần ssl

cd /opt/openca/etc/openca


Chúng ta sẽ sữa đổi các file:

·         access_control/node.xml.template
·         access_control/ca.xml.template
·         access_control/ra.xml.template
·         config.xml

#vim access_control/node.xml.template

Trong thẻ:

<channel>
..
<protocol>ssl</protocol> ----> <protocol>.*</protocol>
..
<symmetric_keylength>128</symmetric_keylength> ----> <symmetric_keylength>0</symmetric_keylength>
..
</channel>

Lưu lại.

Tiếp theo sữa file: access_control/ra.xml.template

# vim access_control/ra.xml.template

<channel>
..
<protocol>ssl</protocol> ----> <protocol>.*</protocol>
..
<symmetric_keylength>128</symmetric_keylength> ----> <symmetric_keylength>0</symmetric_keylength>
..
</channel>

Lưu lại.

Tiếp theo sữa file /opt/openca/etc/openca/config.xml

vim config.xml

:$ để đến cuối file

<name>dataexchange_device_up</name>
<value>/dev/fd0</value> ---> <value>/tmp/openca</value>

<name>dataexchange_device_down</name>

<value>/dev/fd0</value> ---> <value>/tmp/openca</value>

Lưu lại.

Tiếp theo sửa file: openssl/openssl.cnf.template

# vim openssl/openssl.cnf.template

Trong [req] và [CA_defaut] tìm dòng:

default_md            = sha256 ---> đổi thành default_md            = sha1

Lưu lại.

Để các sửa đổi có hiệu lực:
# ./configure_etc.sh

Tạo symlink cho openca:

#cd /usr/sbin/
#ln -s /opt/openca/etc/init.d/openca openca


Khởi động openca:
#cd ~
#openca start

 ===> Nhập password admin:
Quá trình cài đặt RootCA đã xong, bạn kiểm tra kết quả bằng cách gõ vào trình duyệt: http://diachimaycairooca/pki
 Accout là admin và pass lúc bạn start openca trên.

Mệt quá! Các bạn vui lòng đợi mình khỏe lại sẽ đăng phần tiếp theo nhe.
  

22 comments:

  1. Mình dùng CentOS 5.4.
    Mình đã làm theo bạn hướng dẫn nhưng vẫn cứ bị lỗi "OpenCA Error: Server is not online or does not accept requests (/opt/openca/var/openca/tmp/openca_socket - /opt/openca/var/openca/tmp/openca_socket). 0".
    Bạn có thể cho mình biết cách khắc phục được không. Mong nhận được hồi âm sớm từ bạn.

    ReplyDelete
    Replies
    1. This comment has been removed by the author.

      Delete
    2. mình cũng vậy ... khóa luận chỉ còn demo mà bị mắc lỗi này.... ai khắc phục giúp mình với

      Delete
    3. Anh tran cong ơi, em cũng đang làm khóa luận về OpenCA, a có thể cho e mail em hỏi một số vấn đề trong quá trình cài đặt được ko ạ, cảm ơn anh

      Delete
  2. Chào Huynh!
    Thật sự thì lúc mới bắt đầu tôi cũng nhiều lần bị lổi này, ngồi sửa đi sửa lại cũng ko tìm ra lý do. Cuối cùng là thế này:
    - Tôi sửa dụng CentOS 5.9
    - Đọc thật kỹ bài hướng dẫn và làm tuần tự từng bước 1 để tránh sai xót.
    - Phía dưới tôi đính kèm file hướng dẫn + Video cài đặt cho bạn (Video này sưu tầm nhe)
    Chúc bạn thành công.

    Link video: http://www.youtube.com/watch?v=DyPhdbqlxbw
    Link file hướng dẫn: http://www.mediafire.com/download/i9g1bjy7nuuvobk/cai_dat_RA.doc

    ReplyDelete
  3. Chào Toan!
    Bạn cho mình hỏi 2 vấn đề này :
    1. Khi mình dùng SubCA cấp phát certificate cho một user( dùng để gửi mail có mã hóa) thì nó bị lỗi : "New certificate would exceed CA-certificate lifetime "

    2. Dưới đây là link hướng dẫn của Kendy Hikaru : http://kendyhikaru.blogspot.com/2011/05/openca-tutorial.html
    Bạn xem Video "Using to sign and encrypt email" . Tại sao Kendy đã tạo ra SubCA rồi mà vẫn dùng RootCA để cấp phát certificate cho user (cũng để gửi mail có mã hóa)?

    ReplyDelete
  4. Kendy Hikaru đã dùng chứng chỉ của RootCA cấp để sign mail, đều này hoàn toàn bình thường. Việc sử dụng cert để sign mail theo tôi đã làm thì như thế này:
    Gọi:
    CA.crt là chứng chỉ của cơ quan chứng nhận (CQCN). Có thể là RootCA, SubCA
    people.crt là chứng chỉ được cấp bở CQCN cho người dùng People

    1. import CA.crt vào ứng dụng như Outlook, hay những trình duyệt mail khác.

    2. import people.crt vào ứng dụng đó luôn.

    3. Bắt đầu sử dụng
    * Lưu ý: Phía người nhận mail cũng phải thực hiện bước 1.

    ReplyDelete
    Replies
    1. Chào Toan!
      Cám ơn bạn đã trả lời.
      Mình đang cố xây dựng một mô hình phân cấp. RootCA -> SubCA ...
      Rồi lấy SubCA cấp phát chứng chỉ cho User nhưng mình cứ bị lỗi New certificate would exceed CA-certificate lifetime. Error Code 6741 . Mong bạn có thể giúp mình. ( Chỗ SubCA mình make install-online && make install-ca )

      Delete
  5. Huy kiểm tra lúc root ca cấp chứng chỉ cho sub ca, chứng chỉ của subca có giá trị là bao lâu (lifetime), 1 năm, 2 năm... vì theo tôi thấy, lỗi này phát sinh khi chứng chỉ của sub ca có lifetime < lifetime của chứng chỉ định cấp. Thân.

    ReplyDelete
  6. This comment has been removed by the author.

    ReplyDelete
  7. Chào anh, hai file user.pm và initServer link down đều hỏng rồi ạ,
    anh có thể up lại hai link ấy được không ạ
    thanks!

    ReplyDelete
    Replies
    1. This comment has been removed by the author.

      Delete
  8. This comment has been removed by the author.

    ReplyDelete
  9. Em làm theo hướng dẫn cùng bị dính lỗi OpenCA Error: Server is not online or does not accept requests (/opt/openca/var/openca/tmp/openca_socket - /opt/openca/var/openca/tmp/openca_socket). 0
    Có cao nhân nào fix được chỉ em với ạ

    ReplyDelete
  10. Mình cũng gặp lỗi này mà bó tay, search trên web toàn thấy nói đến lỗi này. Không biết có a em nào đã fix được chưa gỡ giúp mình

    Thanks

    ReplyDelete
  11. Chào mọi người!
    Lỗi
    Error: Server is not online or does not accept requests
    Mấy bạn thử cách này xem.Download 2 file user.pm và initServer theo link
    https://www.mediafire.com/folder/y4x15rrg1yc2v/FIX_openca_1.1.1
    (http://sourceforge.net/p/openca/mailman/openca-users/?viewmonth=201011)
    Rùi thay thế 2 file vừa down vào opencabase 1.1.1.Sau đó hãy biên dịch và cài đạt.
    Chú ý ngồi coi kỹ quá trình biên dich và cài !!! Có lỗi thì coi fix
    Cái gì cũng phải từ từ.....Hết sức bình tĩnh.hihihi.
    Cài xong nhớ gõ lệnh openca restart nha!!!

    ReplyDelete
  12. Chào mọi người, nhờ 2 file của Quang mình đã build được và ko bị lỗi Server is not online or does not accept requests. mà mọi người nhớ clear history của trình duyệt khi vào http://diachimaycairooca/pki/ca nhé.

    ReplyDelete
  13. This comment has been removed by the author.

    ReplyDelete
  14. The configuration file /opt/openca/etc/openca/servers/ca.conf exists but can not be read!

    You probably misconfigured OpenCA during installation. Make sure that you used the correct user and group for your webserver.

    HINT:
    Under UNIX-like operating systems you can determine the user and group of your webserver by issuing the following command
    # ps -eo "%U %G %a"
    and look for the process name of your webserver (in most cases httpd)

    Use this information when customizing your configure script at the following configuration options:
    --with-httpd-user=user id of webserver
    --with-httpd-group=apache=group id of webserver
    Mọi người cho em hỏi làm sao hết lỗi này được ạ

    ReplyDelete
  15. Error: Server is not online or does not accept requests : Em dùng 2 cái file kia rồi mà vẫn lỗi, thật khó hiểu, có ai giúp em được không ạ

    ReplyDelete

  16. Xin chào;
    xin vui lòng, Có chút, bạn đã gửi hướng dẫn này về cài đặt một PKI qua OpenCA. Cảm ơn đã hướng dẫn thực sự. Tôi áp dụng cho các bức thư, cũng giống như tôi Fedora 19 nhưng tại buổi ra mắt của PKI tại naviguator tôi nhận được lỗi sau:
    "OpenCA Lỗi: Máy chủ không trực tuyến hoặc không chấp nhận yêu cầu (/ opt / OpenCA / var / OpenCA / tmp / openca_socket - / opt / OpenCA / var / OpenCA / tmp / openca_socket). 0".
    Xin vui lòng, tôi muốn biết làm thế nào để khắc phục lỗi này. email của tôi là feutseujoel@gmail.com Cảm ơn

    ReplyDelete