Feb 4, 2015

Cài đặt EJBCA với PostgreSQL 8.2, JBoss AS 7


1.       Giới thiệu
a.       EJBCA
“Enterprise Java Bean Certificate Authority là một phần mềm chứng thực số dựa trên cơ sở hạ tầng khoá công khai (PKI) được cung cấp dưới dạng phần mềm tự do. Các gói phần mềm này được tài trợ và duy trì bởi một công ty (lợi nhuận) Thuỵ Điển có tên là PrimeKey Solutions. Công ty này nắm giữ bản quyền của hầu hết các mã nguồn cơ bản. Dự án mã nguồn mở được open cho cộng đồng cùng tham gia dùng và góp ý (tương tự phiên bản Fedora của Redhat) dưới giấy phép Lesser GNU GPL. Tức là bạn hoàn toàn có quyền sử dụng (không bán lại) sản phẩm EJBCA phiên bản miễn phí với gần như đầy đủ tính năng này.
Về mặt thiết kế, hệ thống này được cài đặt bằng Java EE để đảm bảo khả năng độc lập nền tảng (platform independent) và có thể triển khai hoàn chỉnh trên mô hình cụm (cluster), điều này cho phép mỗi instance của phần mềm có thể kết nối tới bất kỳ CA nào. Phần mềm này cũng hỗ trợ tích hợp với thiết bị mở rộng HSM (hardware security module) để nâng cao hiệu suất xử lý, tính toán các bài toán mã hoá/giải mã. Các cài đặt mức độ rộng hơn sẽ bao gồm nhiều instance EJBCA hơn chạy trên một cluster, sử dụng các database phân tán hoàn chỉnh trên một cluster riêng rẽ và một cluster thứ 3 kèm theo HSM lưu trữ các khoá CA khác nhau.
Về mặt tính năng, EJBCA tuân theo các tiêu chuẩn chính yếu trong lĩnh vực PKI như X.509, OCSP, CMP, XKMS, SCEP, Elliptic Curve bao gồm cả tiêu chuẩn mới CVC (Card Verifiable Certificate) của EU cho các hộ chiếu mà máy móc có thể đọc được có chứa vân tay.”
-- theo Wikipedia --

b.      PostgreSQL
“PostgreSQL hay còn gọi là Postgres là một RDBMS mã nguồn mở mạnh mẽ và được sử dụng rất rộng rãi, ưu điểm nổi bật của sản phẩm này đó là khả năng mở rộng và tương thích các tiêu chuẩn phổ dụng. PostgreSQL có thể phục vụ các bài toán nhỏ trên hệ thống đơn và những bài toán lớn với nhiều người dùng đồng thời. Các phiên bản hiện tại cũng hỗ trợ khả năng nhân bản dữ liệu để đáp ứng khả năng sẵn sàng cao và tính mở rộng.
PostgreSQL tuân theo tiêu chuẩn SQL-2011 đây là ưu điểm lớn nhất so với một số RDBMS mã nguồn mở khác như MySQL, điều này cho phép mã nguồn SQL tương thích tốt với các hệ thống khác, giảm thiểu công sức chỉnh sửa khi thay đổi DBMS. Trên SQL-2011, việc xử lý giao dịch (bao gồm hầu hết các câu lệnh DDL) và tương thích ACID, phòng tránh vấn đề locking bằng cách sử dụng kỹ thuật Multiversion Concurrency Control (MVCC). MVCC cung cấp khả năng tránh được dirty read và full seriallizability. Postgres hỗ trợ xử lý các truy vấn SQL phức tạp bằng cách sử dụng các phương pháp đánh chỉ mục mà nhiều DBMS khác không có. Những tính năng khác của SQL2011 cùng với những tính năng mở rộng của các nhà phát triển bên thứ 3 cho phép mô phỏng nhiều tính năng mở rộng của các sản phẩm khác, ví dụ như Oracle .” – wikipedia –
c.       JBoss Application Server
JBoss AS là một enterprise java container phát triển, phiên bản open source được tài trợ bởi RedHat. Lý do tôi chọn sử dụng để demo ở đây đó chính là JBoss được sử dụng và test kỹ trong quá trình phát triển EJBCA. Việc sử dụng EJBCA với các Java Container khác như WebSphere, WebLogic tôi sẽ trình bày trong bài viết khác.
2.       Cài đặt PostgreSQL
3.       Cài đặt JBoss Application Server
a.       Tải mã nguồn của phần mềm
-          Tải mã nguồn của JBoss tại link sau: http://download.jboss.org/jbossas/7.1/jboss-as-7.1.1.Final/jboss-as-7.1.1.Final.zip
-          Giải nén file zip trên ta được thư mục jboss-as-7.1.1-Final
-          Chú ý quan trọng,  JBoss được phát triển và thử nghiệm tốt với các bản phân phối OpenJDK, bản phân phối Oracle JDK có tồn tại bug, do vậy tốt hơn hết là sử dụng OpenJDK được cung cấp kèm theo Linux để sử dụng
b.      Thêm người dùng quản trị
Để thêm người dùng quản trị, ta có thể sử dụng script add-user.sh trong thư mục bin:
clip_image002[4]
c.       Cài đặt module driver JDBC PostgreSQL cho JBOSS
-          Vào thư mục modules/org của JBOSS, tạo thư mục tương ứng như sau:
mkdir -p postgresql/main
-          Tải thư viện-driver JDBC của postgresql tại link sau: https://jdbc.postgresql.org/download/postgresql-8.4-703.jdbc4.jar
-          Copy/move thư viện trên vào thư mục vừa tạo ở trên
-          Tạo một file module.xml để khai báo các thông tin về module trên với nội dung như sau:
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="org.postgresql">
 <resources>
  <resource-root path="postgresql-8.4-703.jdbc4.jar"/>
 </resources>
 <dependencies>
  <module name="javax.api"/>
  <module name="javax.transaction.api"/>
 </dependencies>
</module>

-          Chỉnh sửa file standalone/configuration/standalone.xml và thêm vào nội dung sau vào vị trí nằm giữa các thẻ <datasources><drivers>
<driver name="postgresql" module="org.postgresql">
   <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
</driver>

clip_image004[4]

-          Start server và kiểm tra xem nó đã nạp driver chưa, nếu trong console/log có những dòng có nội dung như “Deploying non-JDBC-compliant driver class org.postgresql.Driver
” thì tức là driver đã nạp thành công, ngược lại thì phải kiểm tra lại thông tin cấu hình driver như trên để xem có lỗi cú pháp nào không
-          Quay lại với file standalone.xml , thêm đoạn cấu hình sau để khai báo datasource mới tương ứng với postgresql database đã tạo. Đoạn nội dung này nằm giữa các thẻ <datasources>
<datasource jndi-name="java:/java:jboss/ejbcads" pool-name="ejbcads" use-ccm="true">
                <connection-url>jdbc:postgresql://localhost:5432/mydb</connection-url>
                <driver>postgresql</driver>
                <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
                <pool>
                                <min-pool-size>5</min-pool-size>
                                <max-pool-size>150</max-pool-size>
                                <prefill>true</prefill>
                </pool>
                <security>
                                <user-name>myaccount</user-name>
                                <password>*******</password>
                </security>
                <validation>
                                <check-valid-connection-sql>select 1</check-valid-connection-sql>
                                <validate-on-match>true</validate-on-match>
                                <background-validation>false</background-validation>
                </validation>
                <statement>
                                <prepared-statement-cache-size>50</prepared-statement-cache-size>
                                <share-prepared-statements>true</share-prepared-statements>
                </statement>
</datasource>

clip_image006[4]

-          Khởi động lại server JBoss và đăng nhập vào giao diện quản lý để kiểm tra trạng thái
clip_image008[4]


4.       Cài đặt EJBCA
a.       Tải mã nguồn của phần mềm:
Tải mã nguồn của phần mềm tại địa chỉ sau: http://sourceforge.net/projects/ejbca/files/ejbca6/ejbca_6_2_0/ejbca_ce_6_2_0.zip
Giải nén file trên sẽ được thư mục:
[cuongpt@localhost ~]$ unzip ejbca_ce_6_2_0.zip
[cuongpt@localhost ~]$ cd ejbca_ce_6_2_0
[cuongpt@localhost ejbca_ce_6_2_0]$ ll
total 416
drwx------.  4 cuongpt cuongpt   4096 Jan 27 17:03 bin
-rw-------.  1 cuongpt cuongpt  59366 Jun 17  2014 build.xml
-rw-------.  1 cuongpt cuongpt 216031 Jun 17  2014 Changelog.txt
drwx------.  5 cuongpt cuongpt   4096 Feb  4 15:56 conf
-rw-------.  1 cuongpt cuongpt   5417 Jun 17  2014 deprecated.xml
drwxrwxr-x.  4 cuongpt cuongpt   4096 Jan 27 17:20 dist
drwx------.  8 cuongpt cuongpt   4096 Jun 17  2014 doc
-rw-------.  1 cuongpt cuongpt  12163 Jun 17  2014 docs.xmli
-rw-------.  1 cuongpt cuongpt    331 Jun 17  2014 echo.xml
drwxrwxr-x.  2 cuongpt cuongpt   4096 Jan 27 15:22 hwtoken
drwx------.  9 cuongpt cuongpt   4096 Jun 17  2014 lib
drwx------. 38 cuongpt cuongpt   4096 Jun 17  2014 modules
drwxrwxr-x.  2 cuongpt cuongpt   4096 Jan 27 17:32 p12
-rw-------.  1 cuongpt cuongpt  15020 Jun 17  2014 propertyDefaults.xml
-rw-------.  1 cuongpt cuongpt    139 Jun 17  2014 README
-rw-------.  1 cuongpt cuongpt   4647 Jun 17  2014 removed.xml
drwx------. 11 cuongpt cuongpt   4096 Jun 17  2014 src
-rw-------.  1 cuongpt cuongpt   8961 Jun 17  2014 test.xmli
drwxrwxr-x.  6 cuongpt cuongpt   4096 Jan 27 15:22 tmp
-rw-rw-r--.  1 cuongpt cuongpt  37042 Jan 27 17:20 velocity.log
[cuongpt@localhost ejbca_ce_6_2_0]$

Mặc định, EJBCA cung cấp kèm theo các file cấu hình .properties.sample để làm mẫu. Chúng ta có thể chỉnh sửa những file trên để sử dụng cho thực tế nhu cầu của mình.
-          Tạo thư mục sao lưu những file sample này trước
[cuongpt@localhost ejbca_ce_6_2_0]$ cd conf/
[cuongpt@localhost conf]$ mkdir sample/
[cuongpt@localhost conf]$ mv *.sample sample/
-          Copy những file cấu hình cần thiết trở lại thư mục conf và tiến hành chỉnh sửa:
b.      Chỉnh sửa nội dung các file cấu hình
Nội dung các file cấu hình cần thiết như sau (Hãy thay đổi thành các giá trị phù hợp với hệ thống của bạn)
File cesecore.properties

allow.external-dynamic.configuration=true
ca.keystorepass=admin123
ca.rngalgorithm=SHA1PRNG
ca.serialnumberoctetsize=8
File database.properties
datasource.jndi-name=java:jboss/ejbcads
database.name=postgres
database.url=jdbc:postgresql://localhost:5432/mydb
database.driver=postgresql
database.username=myaccount
database.password=abc123
File ejbca.properties
appserver.home=/home/cuongpt/jboss-as-7.1.1.Final
appserver.type=jboss
ejbca.productionmode=false
allow.external-dynamic.configuration=true
ca.xkmskeystorepass=admin123
ca.cmskeystorepass=admin123
File jndi.properties.jboss7
java.naming.factory.url.pkgs=org.jboss.ejb.client.naming
File install.properties
ca.name=ManagementCA
ca.dn=CN=ManagementCA,O=EJBCA Tinhvan,C=SE
ca.tokentype=soft
ca.tokenpassword=null
ca.keyspec=2048
ca.keytype=RSA
ca.signaturealgorithm=SHA256WithRSA
ca.validity=3650

c.       Biên dịch và deploy
-          Quay trở về thư mục gốc của thư mục cài đặt, nơi có chứa file build.xml
-          Chạy lệnh ant build
-          Chạy lệnh ant deploy
Bước này ant sẽ biên dịch và build EJBCA rồi deploy lên JBOSS, bạn có thể phải nhập password kết nối tới database nếu như bạn chưa chỉ định nó trong database.properties. Hãy đảm bảo bước này thành công và không phát sinh lỗi gì, ngược lại, bạn sẽ phải fix hết lỗi để có thể sang bước sau
-          Chạy lệnh ant install
Lệnh này sẽ sinh ra tất cả certificate, key, … cần thiết để chạy cho một CA ban đầu, deploy các datasource và service cần thiết, cấu hình các servlet container để sử dụng các keystore, truststore đã sinh ra (được copy tự động trong quá trình này). Lệnh “ant install” này chỉ có thể chạy 1 lần, khi mà lần đầu tiên CA được cài đặt. Do nó sinh ra rất nhiều thứ trong database nên nó không thể chạy lại được. Để cài lại thì cần xoá hết và làm lại từ đầu.
d.      Restart JBoss
e.      Import certificate từ EJBHOME/p12/superadmin.p12  vào trình duyệt của bạn và bạn có thể truy cập vào giao diện quản trị tại đường dẫn https://localhost:8443/ejbca cho Admin GUI hoặc http://localhost:8080/ejbca để truy cập các trang công khai

clip_image010[4]

clip_image012[4]

Những thao tác liên quan trong quá trình cấu hình, sử dụng tôi sẽ giới thiệu vào một post khác gần nhất. Mong các bạn chú ý theo dõi

No comments:

Post a Comment