ở writeup này đang hướng dẫn tôi triển khai bằng g...

बनाया गया: 20 मई 2026

का उपयोग करके उत्तर दिया गया GPT-5.5 द्वारा Chat01

प्रश्न

writeup1.txt

ở writeup này đang hướng dẫn tôi triển khai bằng giao diện dòng lệnh nhưng tôi muốn làm qua GUI
hãy hướng dẫn chi tiết lại cách triển khai mô hình kịch bản trong write up theo các hướng

  1. dòng lệnh
  2. GUI
  3. Kết hợp cả 2
    https://github.com/orgs/openca/repositories?type=all
    đọc toàn bộ các repo của OpenCA labs để tìm ra phương án triển khai tối ưu và ít lỗi nhất vì dự án này đã quá cũ nhưng đề tài của tôi bắt buộc sử dụng OpenCA

विचार

undefined

विचार

Thought for 17s

उत्तर

Có. Mình khuyến nghị 3 máy:

  1. PKI/OpenCA Server: Rocky Linux 8.10
    Gộp RootCA + IntermediateCA + RA + Apache + MariaDB.
  2. FTP Server: Ubuntu Server 20.04
    Dùng ProFTPD thay vì vsftpd vì mTLS + CRL rõ ràng hơn.
  3. Client: Windows 10
    Dùng FileZilla hoặc WinSCP.

OpenCA Labs hiện có 27 repo, nhưng repo thật sự liên quan trực tiếp cho kịch bản của bạn là openca-baseopenca-tools; các repo mới như docker-dev, testpki-generator, libpki, x509-json-schema không phải đường triển khai OpenCA classic mà writeup đang yêu cầu. GitHub cũng cho thấy openca-base không có release published và source rất cũ, còn tài liệu INSTALL cập nhật lần cuối từ 2011. (GitHub) Writeup bạn đưa đang yêu cầu build/deploy lab OpenCA + FTPS mutual TLS, nên cách ít lỗi nhất là: OpenCA dùng làm RA/GUI workflow, còn signing/CRL dùng OpenSSL CA backend chuẩn. (writeup1.txt)

Hướng 1 — triển khai bằng dòng lệnh

A. PKI/OpenCA server: Rocky Linux 8.10

bash
hostnamectl set-hostname pki.lab.local cat >> /etc/hosts <<EOF 10.10.10.10 pki.lab.local 10.10.10.20 ftp.lab.local EOF dnf update -y dnf install -y epel-release git wget curl vim gcc gcc-c++ make autoconf automake libtool \ openssl openssl-devel perl perl-core perl-DBI perl-DBD-MariaDB perl-CGI \ perl-Digest-SHA perl-XML-Simple perl-XML-Parser db4 db4-devel \ httpd mod_ssl mariadb mariadb-server firewalld policycoreutils-python-utils systemctl enable --now mariadb httpd firewalld firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload

OpenCA yêu cầu OpenSSL, Perl + DBI, Berkeley DB, Apache, mod_ssl; openca-tools phải cài trước openca-base. (GitHub)

bash
mysql -uroot <<'SQL' CREATE DATABASE openca CHARACTER SET utf8; CREATE USER 'openca'@'localhost' IDENTIFIED BY 'OpenCA_DB_P@ssw0rd!'; GRANT ALL PRIVILEGES ON openca.* TO 'openca'@'localhost'; FLUSH PRIVILEGES; SQL
bash
cd /usr/local/src git clone https://github.com/openca/openca-tools.git git clone https://github.com/openca/openca-base.git cd /usr/local/src/openca-tools ./configure --prefix=/opt/openca make make install cd /usr/local/src/openca-base ./configure \ --prefix=/opt/openca \ --with-web-host=pki.lab.local \ --with-httpd-fs-prefix=/etc/httpd \ --with-htdocs-fs-prefix=/var/www/html \ --with-httpd-user=apache \ --with-httpd-group=apache \ --with-openca-user=apache \ --with-openca-group=apache make make install-offline make install-online cd /opt/openca/etc cp config.xml config.xml.bak ./configure_etc.sh ln -sf /opt/openca/etc/init.d/openca /etc/init.d/openca /etc/init.d/openca start

OpenCA dùng make install-offline cho CA và make install-online cho RA/Pub, sau đó sửa OPENCA_PREFIX/etc/config.xml, chạy configure_etc.sh, rồi start daemon. (GitHub)

B. CA hierarchy bằng OpenSSL backend

Thông số thống nhất:

text
Root CA: RSA 4096, SHA256, 10 năm Intermediate CA: RSA 4096, SHA256, 5 năm FTP server cert: RSA 2048, SHA256, 397 ngày Windows client cert: RSA 2048, SHA256, 365 ngày Root passphrase: RootCAP@ssw0rd! Intermediate passphrase: IntermediateP@ssw0rd! Client P12 password: ClientP@ssw0rd!

Tạo Root:

bash
mkdir -p /pki/root/{certs,crl,newcerts,private,csr} chmod 700 /pki/root/private touch /pki/root/index.txt echo 1000 > /pki/root/serial echo 1000 > /pki/root/crlnumber openssl genrsa -aes256 -out /pki/root/private/rootCA.key 4096 openssl req -x509 -new -sha256 -days 3650 \ -key /pki/root/private/rootCA.key \ -out /pki/root/certs/rootCA.crt \ -subj "/C=VN/O=LAB-PKI/CN=LAB ROOT CA"

Tạo Intermediate:

bash
mkdir -p /pki/intermediate/{certs,crl,csr,newcerts,private} chmod 700 /pki/intermediate/private touch /pki/intermediate/index.txt echo 2000 > /pki/intermediate/serial echo 2000 > /pki/intermediate/crlnumber openssl genrsa -aes256 -out /pki/intermediate/private/intermediate.key 4096 openssl req -new -sha256 \ -key /pki/intermediate/private/intermediate.key \ -out /pki/intermediate/csr/intermediate.csr \ -subj "/C=VN/O=LAB-PKI/CN=LAB INTERMEDIATE CA" openssl x509 -req -sha256 -days 1825 \ -in /pki/intermediate/csr/intermediate.csr \ -CA /pki/root/certs/rootCA.crt \ -CAkey /pki/root/private/rootCA.key \ -CAcreateserial \ -out /pki/intermediate/certs/intermediate.crt cat /pki/intermediate/certs/intermediate.crt /pki/root/certs/rootCA.crt \ > /pki/intermediate/certs/ca-chain.crt

Tạo cert FTP:

bash
mkdir -p /pki/csr/ftp openssl genrsa -out /pki/csr/ftp/ftp.key 2048 cat > /pki/csr/ftp/ftp.cnf <<'EOF' [ req ] prompt = no default_md = sha256 distinguished_name = dn req_extensions = req_ext [ dn ] C = VN O = LAB-PKI CN = ftp.lab.local [ req_ext ] subjectAltName = @alt_names [ alt_names ] DNS.1 = ftp.lab.local IP.1 = 10.10.10.20 EOF openssl req -new \ -key /pki/csr/ftp/ftp.key \ -out /pki/csr/ftp/ftp.csr \ -config /pki/csr/ftp/ftp.cnf openssl x509 -req -sha256 -days 397 \ -in /pki/csr/ftp/ftp.csr \ -CA /pki/intermediate/certs/intermediate.crt \ -CAkey /pki/intermediate/private/intermediate.key \ -CAcreateserial \ -out /pki/csr/ftp/ftp.crt

Tạo cert client Windows:

bash
mkdir -p /pki/csr/client openssl genrsa -out /pki/csr/client/win10.key 2048 openssl req -new -sha256 \ -key /pki/csr/client/win10.key \ -out /pki/csr/client/win10.csr \ -subj "/C=VN/O=LAB-PKI/CN=win10-client" openssl x509 -req -sha256 -days 365 \ -in /pki/csr/client/win10.csr \ -CA /pki/intermediate/certs/intermediate.crt \ -CAkey /pki/intermediate/private/intermediate.key \ -CAcreateserial \ -out /pki/csr/client/win10.crt openssl pkcs12 -export \ -out /pki/csr/client/win10.p12 \ -inkey /pki/csr/client/win10.key \ -in /pki/csr/client/win10.crt \ -certfile /pki/intermediate/certs/ca-chain.crt \ -name "win10-client"

C. FTP server: Ubuntu 20.04 + ProFTPD

bash
hostnamectl set-hostname ftp.lab.local cat >> /etc/hosts <<EOF 10.10.10.10 pki.lab.local 10.10.10.20 ftp.lab.local EOF apt update apt install -y proftpd-basic proftpd-mod-crypto openssl ufw mkdir -p /etc/proftpd/ssl /etc/proftpd/ca

Copy từ PKI sang FTP:

text
/pki/csr/ftp/ftp.crt -> /etc/proftpd/ssl/ftp.crt /pki/csr/ftp/ftp.key -> /etc/proftpd/ssl/ftp.key /pki/intermediate/certs/ca-chain.crt -> /etc/proftpd/ca/ca-chain.crt
bash
chmod 600 /etc/proftpd/ssl/ftp.key

Cấu hình /etc/proftpd/tls.conf:

apache
<IfModule mod_tls.c> TLSEngine on TLSProtocol TLSv1.2 TLSv1.3 TLSRequired on TLSRSACertificateFile /etc/proftpd/ssl/ftp.crt TLSRSACertificateKeyFile /etc/proftpd/ssl/ftp.key TLSCACertificateFile /etc/proftpd/ca/ca-chain.crt TLSVerifyClient on TLSOptions NoSessionReuseRequired TLSLog /var/log/proftpd/tls.log </IfModule>

Thêm vào /etc/proftpd/proftpd.conf:

apache
Include /etc/proftpd/tls.conf DefaultRoot ~ RequireValidShell off
bash
useradd -m -s /usr/sbin/nologin ftpuser01 passwd ftpuser01 systemctl restart proftpd systemctl enable proftpd ufw allow 21/tcp ufw allow 40000:40100/tcp ufw enable

D. Windows 10

Import:

text
rootCA.crt -> Trusted Root Certification Authorities intermediate.crt -> Intermediate Certification Authorities win10.p12 -> Personal

FileZilla:

text
Protocol: FTP Encryption: Require explicit FTP over TLS Host: ftp.lab.local Port: 21 User: ftpuser01 Client certificate: win10.p12

Test từ Linux:

bash
openssl s_client \ -connect ftp.lab.local:21 \ -starttls ftp \ -CAfile /pki/intermediate/certs/ca-chain.crt \ -cert /pki/csr/client/win10.crt \ -key /pki/csr/client/win10.key \ -verify_return_error

Hướng 2 — làm qua GUI

GUI ở đây là web UI của OpenCA, không phải GUI cài đặt hệ thống. Phần build OpenCA vẫn phải CLI vì source classic chỉ cung cấp configure/make/install.

Quy trình GUI:

  1. Mở trình duyệt:
text
http://pki.lab.local/pki

hoặc nếu Apache SSL đã bật:

text
https://pki.lab.local/pki
  1. Vào khu vực RA / Public Interface.
  2. Tạo request cho FTP server:
    • Certificate type: server certificate
    • CN: ftp.lab.local
    • O: LAB-PKI
    • C: VN
    • Key: RSA 2048
    • Digest: SHA256
  3. RA operator approve request.
  4. CA operator issue certificate.
  5. Download:
    • FTP server certificate
    • CA chain
  6. Tạo request cho Windows client:
    • Certificate type: client certificate
    • CN: win10-client
    • Key: RSA 2048
    • Digest: SHA256
  7. RA approve.
  8. CA issue.
  9. Export client certificate sang PKCS#12 bằng CLI:
bash
openssl pkcs12 -export \ -out /pki/csr/client/win10.p12 \ -inkey /pki/csr/client/win10.key \ -in /pki/csr/client/win10.crt \ -certfile /pki/intermediate/certs/ca-chain.crt \ -name "win10-client"

Nhược điểm của hướng GUI: OpenCA quá cũ, GUI dễ lỗi Perl/CGI/session/database. Vì vậy chỉ nên dùng GUI để chứng minh RA workflow, còn signing/debug nên giữ CLI.

Hướng 3 — kết hợp cả 2, khuyến nghị tối ưu

Đây là phương án mình khuyên dùng:

text
CLI: - build OpenCA - tạo Root CA - tạo Intermediate CA - tạo OpenSSL CA directory - cấu hình Apache/MariaDB - tạo CRL - export PKCS#12 - cấu hình ProFTPD - debug TLS GUI OpenCA: - submit request - approve request - issue certificate - revoke certificate - xem trạng thái request/cert

Lý do: OpenCA official vẫn yêu cầu openca-tools trước openca-base, install-offline/install-online, edit config.xml, chạy configure_etc.sh, và tạo database riêng. (GitHub) Nhưng với lab cũ, nếu phụ thuộc 100% GUI thì lỗi CGI/Perl/DB sẽ làm bạn rất khó hoàn thành đề tài.

Kết luận: dùng Rocky Linux 8.10 cho PKI/OpenCA, Ubuntu 20.04 cho FTP, Windows 10 cho client; triển khai CLI trước để chắc chắn chạy được, sau đó dùng GUI OpenCA để demo RA/CA workflow.

इस प्रश्नोत्तर को साझा करें