Hiện nay có rất nhiều công ty, dịch vụ bên thứ ba cho đăng ký dùng chữ ký số điện tử, tuy nhiên bài hôm nay sẽ giới thiệu cách để xây dựng hệ thống đó. SignServer ký số xác thực dữ liệu tập trung các loại văn bản: pdf, office, xml, text,… ngoài ra sẽ cung cấp các API để thực thi ký số dưới dạng webservice, cung cấp các dịch vụ dành cho Client và Admin. Cùng với đó là TSA, hệ thống xác định thời gian ký văn bản.
Signserver là gì
SignServer là giải pháp tích hợp ký số với các hệ thống quản lý văn bản điều hành nội bộ và giao dịch điện tử sẵn có tại doanh nghiệp như văn bản, hợp đồng, hóa đơn. Ký số các loại văn bản: pdf, office, xml, text,… Tóm lại trong demo hôm nay, mình sẽ trình bày một demo dễ nhận thấy và áp dụng nhất là hình thức xác thực ký văn bản online. Signserver gồm 2 phần chính
- Client: thực hiện ký số, xác thực dữ liệu (định dạng file pdf, office, xml, text, giao dịch ngân hàng, giao dịch chứng khoán, … ), kiểm tra hiệu lực của chứng thư số. Ví dụ như user gửi lên một văn bản, thì hệ thống sẽ trả về văn bản đã được ký
- Admin: thực hiện cấu hình và cài đặt các chức năng quản lý chứng thư số, quản lý user, quản lý giao dịch của SignServer.
Trong bài hôm nay chúng ta sẽ sử dụng hệ thống outsource Signserver của KeyFactor https://www.signserver.org/. Có nhiều cách để triển khai, tuy nhiên nhanh gọn lẹ thì trong bài hôm nay mình sẽ đi theo cách install qua docker. Các bạn cần có sẵn một OS có cài đặt docker và có kết nối được tới dockerhub, nếu máy trong server nội bộ công ty thì cần setup proxy cho docker là được. Rất đơn giản ^^
Setup SignServer
Chuẩn bị
Một file TrustedCA.pem cho domain của bạn, ví dụ mình sẽ setup sign server domain là hieuta.devopsify.co thì ta sẽ cần TrustedCA.pem bao gồm domain – intermediate – root của hieuta.devopsify.com và một file hieuta.devopsify.com.crt. Các bạn theo dõi các bài viết khác của mình để xem các tạo file này nhé.
Một file hieuta.devopsify.com.key dùng cho mục đích setup phần Admin
OS Server dùng thiết lập Signserver cần cài đặt sẵn: docker, openssl
Step 1: Pull images Signserver chính thức về máy
docker pull keyfactor/signserver-ce
Step 2: Khởi tạo signserver
docker run -it --rm --name signserver \
-p 80:8080 -p 443:8443 \
-v $(pwd)/TrustedCA.pem:/mnt/external/secrets/tls/cas/ManagementCA.crt \
-h hieuta.devopsify.co \
keyfactor/signserver-ce:latest
Các bạn thực thi câu lệnh trên, lưu ý thay đổi $(pwd)/TrustedCA.pem thành đường dẫn file TrustedCA các bạn đã chuẩn bị, -h hieuta.devopsify.co sẽ là đường dẫn signserver của bạn. Kết quả sẽ được như bên dưới (do mình chạy rồi bên CREATED, STATUS sẽ khác)
Step 3: Add hosts
Đợi thêm 1,2p cho container start. Trong thời gian đó bạn hãy vào add hosts của máy tính bạn C:\Windows\System32\drivers\etc
Hãy thêm trước nội dung sau “IP-server hieuta.devopsify.co”, trong đó IP-server thay bằng IP máy bạn đang run container ở bước 2. Sau đó mở trình duyệt Firefox và nhập vào đường dẫn https://hieuta.devopsify.com/signserver để thấy kết quả
Step 4: Cài đặt Admin
Khi xong step 3, click vào Administration Web, sẽ hiện lỗi như sau
Tiến hành dùng OpenSSL để sinh ra file .ps12
openssl pkcs12 -export -out hieuta.devopsifiy.co.p12 -inkey hieuta.devopsifiy.co.key -in hieuta.devopsifiy.co.crt -certfile hieuta.devopsifiy.co.crt
Nhập password cho file và Enter
Tiếp tục vào Firefox => Settings => Privacy & Security => Certificates => View Certificates => Your Certificates => Import. Chọn file ps12 đã sinh ra ở trên và nhập password đã tạo => OK
Quay lại website https://hieuta.devopsify.com/signserver click lại Administration Web để xem kết quả
Xong phần Admin, giờ sẽ tiến hành setup các worker để ký thử văn bản
Step 5: Cài đặt Worker
Thêm Crypto Token
- Đi đến SignServer Administration Web.
- Vào Workers page, click Add.
- Click From Template.
- Select
keystore-crypto.properties
trong Load From Template và click Next. - Cập nhật thông tin cấu hình sau:
- Xóa “
#
” phía trước”WORKERGENID1.KEYSTOREPASSWORD=foo123
“.
- Xóa “
- Click Apply để thêm Crypto Token.
Thêm Signers
- Vào Workers page, click Add.
- Click From Template.
- Chọn properties trong Load From Template, ví dụ,
pdfsigner.properties
, and click Next. - Click Apply để load configuration và xác nhận lại là signers ở trạng thái ACTIVE và có thể sử dụng.
Tip: các bạn có thể sửa chữ ký như sau:
Vào https://www.base64-image.de/ decode chữ ký của bạn, copy Base64 edit ở đây
Step 6: Test Signing
- Đi đến SignServer Client Web: https://hieuta.devopsify.co/signserver/clientweb/
- Dưới phần File Upload, chọn Worker Name đã thêm, ví dụ như, PDFSigner.
- Click Browse để chọn PDF file.
- Click Submit và xem kết quả file đã ký. Lưu ý bạn hãy tải Adobe Reader hoặc Foxit Reader để đọc certificate file đã ký nhé
Bạn để ý phần khung đỏ, điều đó cho thấy văn bản ký này đang dùng thời gian của máy tính bạn, điều này không nên xảy ra đối với các doanh nghiệp có trụ sở ở nhiều múi giờ, vì vậy chúng ta sẽ tích hợp thêm module TSA
Tích hợp TSA
Có nhiều cách để dựng hệ thống TSA, các bạn có thể research thêm các keyword liên quan như HSM hay TSA,.. Để dựng 1 hệ thống TSA ta có thể theo step by step qua document sau đây http://www.signfiles.com/manuals/InstallingTheTSAServer.pdf. Còn trong bài này ta dùng luôn TSA của Keyfactor.
Mô hình dưới đây là của hệ thống TSA – Qualified Timestamping Server With built-in HSM Hardware Security Module
Step 1: Tạo TimeStampSigner
- Đi đến SignServer Administration Web.
- Vào Workers page, click Add.
- Click From Template.
- Select
timestamp.properties
trong Load From Template và click Next. - Click Apply để thêm TimeStampSigner.
Step 2: Thêm config TimeStampSigner vào PDFSinger
Làm như hình sau
Step 3: Test lại kết quả
Signserver Webservice
Để tích hợp vào trong code, bạn có thể sử dụng các API theo dạng webservice sau
Cài đặt SOAP UI và import đường link dưới đây vào để test các request
https://hieuta.devopsify.co/signserver/AdminWSService/AdminWS?wsdl
Chúc các bạn thành công
Ref: https://hub.docker.com/r/keyfactor/signserver-ce