Luồng xử lý yêu cầu ký số của SAVIS TrustCA RS (Tuân thủ theo 769/QĐ-BTTTT ngày 27/04/2022 của Bộ TTTT)
1 Luồng xử lý yêu cầu ký số
1.1 Khởi tạo yêu cầu ký số
- Người sử dụng thực hiện yêu cầu ký số.
- SP đóng gói dưới dạng .xml (hoặc json) yêu cầu ký số bao gồm: thông tin xác thực tài khoản của SP (sp_credentials), mã tài liệu (doc_id), mã giao dịch (transaction_id), mã định danh người ký trong hệ thống SP (user_id), số xê-ri của chứng thư số (serial_number, trường hợp người dùng có nhiều hơn 01 chứng thư số), thời gian thực hiện yêu cầu.
- SP gửi dữ liệu đã được đóng gói theo giao thức TLS cho TrustCA RS.
- SP gọi TrustCA RS để lấy thông tin chứng thư.
- SP tiến hành băm tài liệu cần được ký số và nén dữ liệu.
- SP gửi mã băm (file_hash), thông tin xác thực tài khoản của SP (sp_credentials), mã giao dịch (transaction_id) cho TrustCA RS.
1.2 Thực hiện ký số
- TrustCA bóc tách thông tin các thông tin trong dữ liệu .xml (hoặc json).
- TrustCA xác thực sp_credentials.
- TrustCA tìm thuê bao từ user_id, gửi lại chứng thư số cho SP.
- TrustCA gửi yêu cầu và nhận lại xác nhận ký đến người dùng (thông qua app của TrustCA) để thực hiện quy trình ký số.
- TrustCA thực hiện cấp dấu thời gian cho giao dịch (nếu có).
1.3 Trả kết quả
- TrustCA đóng gói kết quả ký số dưới dạng .xml (hoặc json), gồm: chữ ký số theo từng mã tài liệu (doc_id), chứng thư số của người ký (user_cert), dấu thời gian (nếu có), thời gian thực hiện yêu cầu, mã giao dịch (transaction_id).
- TrustCA gửi dữ liệu đã được đóng gói theo giao thức TLS cho SP.
- SP gắn chữ ký vào file và hoàn tất quy trình ký.
- Hình thức trả:
- Thông qua cơ chế webhook: Khi có kết quả ký tài liệu, TrustCA sẽ gửi kết quả cho SP theo url webhook SP đăng ký trước với TrustCA.
2 Định nghĩa giao thức
2.1 API lấy thông tin chứng thư
– Khi người dùng tạo yêu cầu ký số, SP gọi SAVIS TrustCA RS để lấy dữ liệu chứng thư người dùng.
– SAVIS TrustCA RS sẽ kiểm tra và trả về danh sách chứng thư của người dùng.
– Khi có thông tin chứng thư, SP sử dụng dữ liệu này để tính toán hash file cần ký.
Đặc tả API:
- Phương thức: GET
- Đường dẫn: https://x.x.x.x/get_certificate
- Tham số đầu vào:
STT | Tham số | Kiểu dữ liệu | Bắt buộc | Chú thích |
1 | sp_id | String | x | Tên tài khoản của SP do SAVIS TrustCA RS cung cấp |
2 | sp_password | String | x | Mật khẩu do SAVIS TrustCA RS cung cấp cho SP |
3 | user_id | String | x | Số CCCD/CMND/Hộ chiếu/Mã số thuế/ của cá nhân/tổ chức muốn đăng nhập |
4 | serial_number | String | Số xê-ri của chứng thư số | |
5 | transaction_id | String | x | Mã giao dịch khởi tạo bởi SP |
- Tham số đầu ra:
STT | Tham số | Kiểu dữ liệu | Chú thích |
1 | status_code | Int | Mã request thành công hoặc mã lỗi tương ứng. VD: 200, 401,403, 500… |
2 | message | String | Thông điệp thành công hoặc thông điệp lỗi tương ứng với mã trạng thái ở status_code. |
3 | cert_id | String | Định danh chứng thư số (còn gọi là cert alias) |
4 | cert_data | String | Raw data chứng thư (dạng base64) |
5 | chain_data | List<String> | List chứng thư, gồm 3 phần tử. Phần tử đầu tiên là chứng thư số người ký, thứ hai là chứng thư số của SAVIS TrustCA RS, cuối cùng là chứng thư số root do NEAC cấp. |
6 | serial_number | String | Số xê-ri của chứng thư số |
7 | transaction_id | String | Mã giao dịch khởi tạo bởi SP |
2.2 API ký số tài liệu
– SP gọi SAVIS TrustCA RS, cung cấp mã giao dịch (transaction_id)
– SP dùng dữ liệu chứng thư người dùng để tính toán mã băm của tệp cần ký.
– SP gửi dữ liệu file_hash đến SAVIS TrustCA RS để thực hiện ký số tài liệu.
– SP sử dụng mã giao dịch để lấy thông tin chữ ký khi cần.
– Trong trường hợp đặc thù cần thiết, SAVIS TrustCA RS có thể trả về luôn kết quả ký tại request này (giữ và chờ request).
Đặc tả API:
- Phương thức: POST
- Đường dẫn: https://x.x.x.x/sign
- Tham số đầu vào:
STT | Tham số | Kiểu dữ liệu | Bắt buộc | Chú thích |
1 | sp_id | String | x | Tên tài khoản của SP do SAVIS TrustCA RS cung cấp |
2 | sp_password | String | x | Mật khẩu do SAVIS TrustCA RS cung cấp cho SP |
3 | user_id | String | x | Số CCCD/CMND/Hộ chiếu/Mã số thuế/ của cá nhân/tổ chức muốn đăng nhập |
4 | data_to_be_signed | String | x | Chuỗi biểu diễn của tài liệu được yêu cầu ký số (base64 string với file, hex với hash) |
5 | doc_id | String | x | Mã tài liệu yêu cầu ký số |
6 | file_type | String | x | Loại file: xml/json/word/pdf/excel/… |
7 | sign_type | String | x | Loại ký số: hash/file |
8 | serial_number | String | Số xê-ri của chứng thư số (trong trường hợp một chủ thể có nhiều chứng thư số) | |
9 | time_stamp | String | Thời gian người dùng gửi yêu cầu ký số. Định dạng: YYYYMMddHHmmSS | |
10 | transaction_id | String | Mã giao dịch khởi tạo bởi SP |
- Tham số đầu ra:
STT | Tham số | Kiểu dữ liệu | Chú thích |
1 | status_code | Int | Mã request thành công hoặc mã lỗi tương ứng. VD: 200, 401, 403, 500… |
2 | message | String | Thông điệp thành công hoặc thông điệp lỗi tương ứng với mã trạng thái ở status_code |
3 | transaction_id | String | Mã giao dịch khởi tạo bởi SP |
4 | doc_id | String | Mã tài liệu yêu cầu ký số |
5 | signature_value | String | Dữ liệu chữ ký gắn với tài liệu (dạng base64) |
6 | timestamp_signature | String | Chữ ký của SAVIS TrustCA RS lên dấu thời gian của giao dịch ký số |
2.3 API webhook nhận thông tin ký tài liệu
– CA gọi SP theo url đăng ký trước.
– Sau khi CA có kết quả ký số tài liệu, CA sẽ gửi kết quả về cho SP.
– SP gắn chữ ký vào file, trả về cho người dùng, kết thúc luồng ký.
Đặc tả API:
- Phương thức: POST
- Đường dẫn: https://x.x.x.x/recv_signature
- Tham số đầu vào:
STT | Tham số | Kiểu dữ liệu | Bắt buộc | Chú thích |
1 | sp_id | String | x | Tên tài khoản của SP do TrustCA cung cấp |
2 | status_code | int | x | Mã request thành công hoặc mã lỗi tương ứng. VD: 200, 401, 403, 500… |
3 | message | String | x | Thông điệp thành công hoặc thông điệp lỗi tương ứng với mã trạng thái ở status_code |
4 | transaction_id | String | x | Mã giao dịch khởi tạo bởi SP |
5 | doc_id | String | Mã tài liệu yêu cầu ký số | |
6 | signature_value | String | Dữ liệu chữ ký gắn với tài liệu (dạng base64) | |
7 | timestamp_signature | String | Chữ ký của SAVIS TrustCA RS lên dấu thời gian của giao dịch ký số |
- Tham số đầu ra:
STT | Tham số | Kiểu dữ liệu | Chú thích |
1 | status_code | Int | Mã request thành công hoặc mã lỗi tương ứng. VD: 200, 401, 403, 500… |
2 | message | String | Thông điệp thành công hoặc thông điệp lỗi tương ứng với mã trạng thái ở status_code |