Bạn là chuyên gia PKI, Linux System Engineer và Op...
생성일: 2026년 5월 20일
생성일: 2026년 5월 20일
Bạn là chuyên gia PKI, Linux System Engineer và OpenSSL/OpenCA architect.
Nhiệm vụ của bạn là đọc toàn bộ source code GitHub/documentation của dự án OpenCA, phân tích cấu trúc project, dependency, cách build và deployment thực tế.
Tôi cần bạn hướng dẫn FULL STEP-BY-STEP để triển khai thành công mô hình sau:
3 máy CentOS 7:
1 máy Ubuntu 20.04:
1 máy Windows 10:
Triển khai hệ thống PKI hoàn chỉnh bằng OpenCA để:
Cho CentOS 7:
Trên Ubuntu 20.04:
Hãy:
AI phải trả lời:
Không trả lời lý thuyết chung chung.
Phải hướng dẫn thực tế để tôi có thể build và deploy hoàn chỉnh lab hoạt động được.
Dưới đây là runbook lab thực tế. Lưu ý quan trọng: OpenCA PKI “Base” bản public mới nhất là v1.5.1 từ 2013, GitHub không có release mới; repo openca-base chỉ có source, còn openca-tools chứa sign/verify/sv và SCEP utility. OpenCA install doc yêu cầu OpenSSL 0.9.7+, Perl 5.6.1+ DBI, Berkeley DB, Apache, mod_ssl, OpenLDAP optional, và cảnh báo một số Perl SSL module phải patch khi dùng OpenSSL 1.0+ (openca.org).
textRootCA CentOS7 offline, giữ root.key, ký Intermediate CSR, publish root.crt/root.crl IntermediateCA CentOS7 online/semi-online, chạy OpenCA CA, ký server/client cert, publish CRL RA CentOS7 Apache + OpenCA online/RA interface, nhận request, approve, chuyển CA ký FTP Ubuntu20.04 vsftpd FTPS explicit TLS, server cert do IssuingCA cấp, require client cert Windows10 import root + intermediate CA, import client.p12, FileZilla/WinSCP test mTLS
Chạy trên cả 3 máy CentOS:
bashsudo yum -y install epel-release sudo yum -y groupinstall "Development Tools" sudo yum -y install \ git wget curl tar gzip make gcc gcc-c++ autoconf automake libtool \ openssl openssl-devel perl perl-core perl-devel perl-DBI \ perl-DBD-MySQL perl-DBD-Pg perl-CGI perl-Digest-SHA perl-XML-Simple \ perl-XML-Parser perl-Convert-ASN1 perl-Time-HiRes perl-MIME-Base64 \ db4 db4-devel httpd mod_ssl mariadb mariadb-server mariadb-devel \ policycoreutils-python firewalld fail2ban sudo systemctl enable --now firewalld
OpenCA chính thức nói Tools phải cài trước Base; Base dùng target install-offline cho CA và install-online cho RA/public interface (GitHub).
Trên RootCA, IntermediateCA, RA:
bashcd /usr/local/src sudo git clone https://github.com/openca/openca-tools.git cd openca-tools ./configure --prefix=/opt/openca make clean make sudo make install /opt/openca/bin/sign 2>/dev/null || true /opt/openca/bin/verify 2>/dev/null || true
Nếu lỗi OpenSSL header:
bashCPPFLAGS="-I/usr/include/openssl" LDFLAGS="-L/usr/lib64" ./configure --prefix=/opt/openca make clean && make
bashcd /usr/local/src sudo git clone https://github.com/openca/openca-base.git cd openca-base ./configure \ --prefix=/opt/openca \ --with-openssl-prefix=/usr \ --with-web-host=ra.lab.local \ --with-httpd-fs-prefix=/var/www \ --with-htdocs-fs-prefix=/var/www/html make
Trên RootCA / IntermediateCA:
bashsudo make install-offline
Trên RA:
bashsudo make install-online
Sau install:
bashcd /opt/openca/etc sudo cp config.xml config.xml.bak sudo ./configure_etc.sh sudo ln -sf /opt/openca/etc/init.d/openca /etc/init.d/openca
Database mẫu MariaDB:
bashsudo systemctl enable --now mariadb mysql -uroot <<'SQL' CREATE DATABASE openca CHARACTER SET utf8; CREATE USER 'openca'@'localhost' IDENTIFIED BY 'StrongDBPassword!'; GRANT ALL PRIVILEGES ON openca.* TO 'openca'@'localhost'; FLUSH PRIVILEGES; SQL
OpenCA doc nói config chính nằm trong OPENCA_PREFIX/etc/config.xml, rồi chạy configure_etc.sh, daemon bằng /opt/openca/etc/init.d/openca start; DB tạo riêng bằng PostgreSQL/MySQL DBI (GitHub).
Vì OpenCA rất cũ, lab nên dùng OpenCA làm workflow/RA, còn signing core có thể dùng OpenSSL CA directory chuẩn để chắc chắn hoạt động.
bashsudo mkdir -p /pki/root/{certs,crl,newcerts,private,csr} sudo chmod 700 /pki/root/private sudo touch /pki/root/index.txt echo 1000 | sudo tee /pki/root/serial echo 1000 | sudo tee /pki/root/crlnumber sudo chown -R root:root /pki/root
/pki/root/openssl.cnf:
ini[ ca ] default_ca = CA_default [ CA_default ] dir = /pki/root certs = $dir/certs crl_dir = $dir/crl database = $dir/index.txt new_certs_dir = $dir/newcerts certificate = $dir/certs/root.crt serial = $dir/serial crlnumber = $dir/crlnumber crl = $dir/crl/root.crl private_key = $dir/private/root.key default_md = sha256 default_days = 3650 default_crl_days = 365 policy = policy_strict unique_subject = no copy_extensions = copy [ policy_strict ] countryName = match organizationName = match organizationalUnitName = optional commonName = supplied [ req ] default_bits = 4096 default_md = sha256 distinguished_name = dn x509_extensions = v3_root_ca prompt = no [ dn ] C = VN O = Lab PKI OU = Root CA CN = Lab Root CA [ v3_root_ca ] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer basicConstraints = critical, CA:true, pathlen:1 keyUsage = critical, keyCertSign, cRLSign crlDistributionPoints = URI:http://pki.lab.local/crl/root.crl [ v3_intermediate_ca ] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer basicConstraints = critical, CA:true, pathlen:0 keyUsage = critical, keyCertSign, cRLSign crlDistributionPoints = URI:http://pki.lab.local/crl/root.crl authorityInfoAccess = caIssuers;URI:http://pki.lab.local/certs/root.crt
Tạo Root:
bashsudo openssl genrsa -aes256 -out /pki/root/private/root.key 4096 sudo chmod 400 /pki/root/private/root.key sudo openssl req -config /pki/root/openssl.cnf \ -key /pki/root/private/root.key \ -new -x509 -days 3650 -sha256 \ -extensions v3_root_ca \ -out /pki/root/certs/root.crt
bashsudo mkdir -p /pki/issuing/{certs,crl,newcerts,private,csr} sudo chmod 700 /pki/issuing/private sudo touch /pki/issuing/index.txt echo 2000 | sudo tee /pki/issuing/serial echo 2000 | sudo tee /pki/issuing/crlnumber
/pki/issuing/openssl.cnf:
ini[ ca ] default_ca = CA_default [ CA_default ] dir = /pki/issuing certs = $dir/certs crl_dir = $dir/crl database = $dir/index.txt new_certs_dir = $dir/newcerts certificate = $dir/certs/issuing.crt serial = $dir/serial crlnumber = $dir/crlnumber crl = $dir/crl/issuing.crl private_key = $dir/private/issuing.key default_md = sha256 default_days = 825 default_crl_days = 7 policy = policy_loose unique_subject = no copy_extensions = copy [ policy_loose ] countryName = optional stateOrProvinceName = optional localityName = optional organizationName = optional organizationalUnitName = optional commonName = supplied [ req ] default_bits = 4096 default_md = sha256 distinguished_name = dn prompt = no [ dn ] C = VN O = Lab PKI OU = Issuing CA CN = Lab Issuing CA [ server_cert ] basicConstraints = critical, CA:false keyUsage = critical, digitalSignature, keyEncipherment extendedKeyUsage = serverAuth subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer crlDistributionPoints = URI:http://pki.lab.local/crl/issuing.crl authorityInfoAccess = caIssuers;URI:http://pki.lab.local/certs/issuing.crt [ client_cert ] basicConstraints = critical, CA:false keyUsage = critical, digitalSignature, keyEncipherment extendedKeyUsage = clientAuth subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer crlDistributionPoints = URI:http://pki.lab.local/crl/issuing.crl authorityInfoAccess = caIssuers;URI:http://pki.lab.local/certs/issuing.crt
Tạo CSR Intermediate:
bashsudo openssl genrsa -aes256 -out /pki/issuing/private/issuing.key 4096 sudo chmod 400 /pki/issuing/private/issuing.key sudo openssl req -config /pki/issuing/openssl.cnf \ -new -sha256 \ -key /pki/issuing/private/issuing.key \ -out /pki/issuing/csr/issuing.csr
Copy CSR sang RootCA, ký:
bashsudo openssl ca -config /pki/root/openssl.cnf \ -extensions v3_intermediate_ca \ -days 1825 -notext -md sha256 \ -in /pki/root/csr/issuing.csr \ -out /pki/root/certs/issuing.crt
Copy issuing.crt về IntermediateCA:
bashsudo cp issuing.crt /pki/issuing/certs/issuing.crt sudo cat /pki/issuing/certs/issuing.crt /pki/root/certs/root.crt \ | sudo tee /pki/issuing/certs/ca-chain.crt >/dev/null openssl verify -CAfile /pki/issuing/certs/ca-chain.crt /pki/issuing/certs/issuing.crt
Trên IntermediateCA:
bashsudo mkdir -p /pki/requests/ftp01 cd /pki/requests/ftp01 sudo openssl genrsa -out ftp01.key 2048 sudo chmod 400 ftp01.key cat > ftp01.cnf <<'EOF' [ req ] default_bits = 2048 default_md = sha256 prompt = no distinguished_name = dn req_extensions = req_ext [ dn ] C = VN O = Lab PKI OU = FTP CN = ftp.lab.local [ req_ext ] subjectAltName = @alt_names [ alt_names ] DNS.1 = ftp.lab.local IP.1 = 10.0.0.40 EOF sudo openssl req -new -key ftp01.key -out ftp01.csr -config ftp01.cnf sudo openssl ca -config /pki/issuing/openssl.cnf \ -extensions server_cert -days 397 -notext -md sha256 \ -in ftp01.csr -out ftp01.crt sudo cat ftp01.crt /pki/issuing/certs/issuing.crt /pki/root/certs/root.crt \ | sudo tee ftp01.fullchain.crt >/dev/null
bashsudo mkdir -p /pki/requests/win10 cd /pki/requests/win10 sudo openssl genrsa -out win10-client.key 2048 cat > win10-client.cnf <<'EOF' [ req ] default_bits = 2048 default_md = sha256 prompt = no distinguished_name = dn [ dn ] C = VN O = Lab PKI OU = FTP Clients CN = win10-user01 EOF sudo openssl req -new -key win10-client.key -out win10-client.csr -config win10-client.cnf sudo openssl ca -config /pki/issuing/openssl.cnf \ -extensions client_cert -days 365 -notext -md sha256 \ -in win10-client.csr -out win10-client.crt sudo openssl pkcs12 -export \ -inkey win10-client.key \ -in win10-client.crt \ -certfile /pki/issuing/certs/ca-chain.crt \ -name "win10-user01 FTP Client" \ -out win10-user01.p12
Trên IntermediateCA:
bashsudo openssl ca -config /pki/issuing/openssl.cnf -gencrl -out /pki/issuing/crl/issuing.crl sudo openssl ca -config /pki/root/openssl.cnf -gencrl -out /pki/root/crl/root.crl sudo mkdir -p /var/www/html/{certs,crl} sudo cp /pki/root/certs/root.crt /var/www/html/certs/ sudo cp /pki/issuing/certs/issuing.crt /var/www/html/certs/ sudo cp /pki/issuing/certs/ca-chain.crt /var/www/html/certs/ sudo cp /pki/root/crl/root.crl /var/www/html/crl/ sudo cp /pki/issuing/crl/issuing.crl /var/www/html/crl/ sudo systemctl enable --now httpd sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --reload
bashsudo apt update sudo apt -y install vsftpd openssl ca-certificates sudo mkdir -p /etc/vsftpd/ssl /etc/vsftpd/ca /var/ftp/uploads
Copy từ CA sang Ubuntu:
bashsudo cp ftp01.key /etc/vsftpd/ssl/ sudo cp ftp01.fullchain.crt /etc/vsftpd/ssl/ sudo cp ca-chain.crt /etc/vsftpd/ca/ sudo cp issuing.crl /etc/vsftpd/ca/ sudo chmod 600 /etc/vsftpd/ssl/ftp01.key
Tạo user FTP:
bashsudo useradd -m -s /usr/sbin/nologin ftpuser01 sudo passwd ftpuser01 sudo mkdir -p /home/ftpuser01/ftp sudo chown nobody:nogroup /home/ftpuser01/ftp sudo chmod a-w /home/ftpuser01/ftp sudo mkdir -p /home/ftpuser01/ftp/files sudo chown ftpuser01:ftpuser01 /home/ftpuser01/ftp/files
/etc/vsftpd.conf:
inilisten=YES listen_ipv6=NO anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 chroot_local_user=YES allow_writeable_chroot=NO ssl_enable=YES implicit_ssl=NO force_local_logins_ssl=YES force_local_data_ssl=YES rsa_cert_file=/etc/vsftpd/ssl/ftp01.fullchain.crt rsa_private_key_file=/etc/vsftpd/ssl/ftp01.key ssl_tlsv1=YES ssl_sslv2=NO ssl_sslv3=NO require_ssl_reuse=NO ssl_ciphers=HIGH require_cert=YES validate_cert=YES ca_certs_file=/etc/vsftpd/ca/ca-chain.crt pasv_enable=YES pasv_min_port=40000 pasv_max_port=40100 pasv_address=10.0.0.40 xferlog_enable=YES log_ftp_protocol=YES
Ubuntu 20.04 vsftpd không có option chuẩn để enforce “TLS1.2 only” chi tiết như Apache; nếu cần strict TLS1.2+, dùng ProFTPD ổn hơn.
Restart:
bashsudo systemctl restart vsftpd sudo ufw allow 21/tcp sudo ufw allow 40000:40100/tcp
bashsudo apt -y install proftpd-basic proftpd-mod-crypto sudo mkdir -p /etc/proftpd/ssl /etc/proftpd/ca
/etc/proftpd/tls.conf:
apache<IfModule mod_tls.c> TLSEngine on TLSProtocol TLSv1.2 TLSv1.3 TLSRequired on TLSRSACertificateFile /etc/proftpd/ssl/ftp01.fullchain.crt TLSRSACertificateKeyFile /etc/proftpd/ssl/ftp01.key TLSCACertificateFile /etc/proftpd/ca/ca-chain.crt TLSCARevocationFile /etc/proftpd/ca/issuing.crl TLSVerifyClient on TLSOptions NoSessionReuseRequired TLSLog /var/log/proftpd/tls.log </IfModule>
Enable include trong /etc/proftpd/proftpd.conf:
apacheInclude /etc/proftpd/tls.conf DefaultRoot ~ RequireValidShell off
Restart:
bashsudo systemctl restart proftpd
root.crt vào Trusted Root Certification Authorities.issuing.crt vào Intermediate Certification Authorities.win10-user01.p12 vào Personal.ftp.lab.local21win10-user01..p12.Chain:
bashopenssl verify -CAfile /pki/issuing/certs/ca-chain.crt /pki/requests/ftp01/ftp01.crt openssl verify -CAfile /pki/issuing/certs/ca-chain.crt /pki/requests/win10/win10-client.crt
FTPS handshake từ Linux client:
bashopenssl s_client \ -connect ftp.lab.local:21 \ -starttls ftp \ -CAfile ca-chain.crt \ -cert win10-client.crt \ -key win10-client.key \ -state -msg -verify_return_error
Test không có client cert phải fail:
bashopenssl s_client -connect ftp.lab.local:21 -starttls ftp -CAfile ca-chain.crt
Kiểm tra CRL:
bashopenssl crl -in issuing.crl -noout -text openssl verify -crl_check \ -CAfile ca-chain.crt \ -CRLfile issuing.crl \ win10-client.crt
Revoke client:
bashsudo openssl ca -config /pki/issuing/openssl.cnf \ -revoke /pki/requests/win10/win10-client.crt sudo openssl ca -config /pki/issuing/openssl.cnf \ -gencrl -out /pki/issuing/crl/issuing.crl
Copy CRL mới sang FTP server, restart vsftpd/proftpd, rồi test lại. Client revoked phải bị từ chối.
bashsudo chmod 700 /pki/root/private /pki/issuing/private sudo chmod 400 /pki/root/private/*.key /pki/issuing/private/*.key sudo chown -R root:root /pki sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload sudo setsebool -P httpd_can_network_connect_db on sudo restorecon -Rv /var/www/html /opt/openca
Apache TLS hardening /etc/httpd/conf.d/ssl.conf:
apacheSSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 SSLCipherSuite HIGH:!aNULL:!MD5:!3DES:!RC4 SSLHonorCipherOrder on SSLCompression off SSLSessionTickets off
Fail2ban:
bashsudo systemctl enable --now fail2ban
| Lỗi | Cách xử lý |
|---|---|
DBI.pm not found | yum install perl-DBI perl-DBD-MySQL |
mysql_config not found | yum install mariadb-devel |
openssl/ssl.h not found | yum install openssl-devel |
| Perl SSL module fail với OpenSSL 1.0+ | Không upgrade bừa IO::Socket::SSL/Net::SSLeay theo cảnh báo OpenCA; dùng module OS package hoặc patch theo source OpenCA (GitHub) |
| Apache CGI 500 | kiểm tra /var/log/httpd/error_log, quyền execute CGI, SELinux context |
make install-online thiếu path web | chạy lại ./configure với --with-httpd-fs-prefix và --with-htdocs-fs-prefix đúng |
| CRL không có hiệu lực | generate CRL mới, copy sang FTP, restart service |
| FileZilla không gửi client cert | import .p12, chọn đúng cert, dùng explicit TLS |
RootCA nên offline hoàn toàn, chỉ bật khi ký Intermediate hoặc CRL root. IssuingCA nên có backup encrypted key, audit log, CRL publish định kỳ bằng cron. RA không giữ CA private key. FTP nên dùng ProFTPD nếu cần enforce TLS1.2+/CRL client-auth nghiêm ngặt. OpenCA quá cũ, nên cô lập trong lab/VLAN riêng; với production hiện đại nên cân nhắc EJBCA, Dogtag PKI hoặc step-ca nếu không bắt buộc OpenCA.
tôi muốn cấu hình 3 máy thôi
gộp CA, IntermediateCA, RA vào 1 máy được không ?
các hệ điều hành nên sử dụng để triển khai kịch bản này là gì?
hướng dẫn setup chi tiết trên từng máy
fill luôn thông tin vào các câu lệnh, ví dụ như set key là loại hash nào, độ dài bao nhiêu, hãy thống nhất luôn các thông tin giúp tôi luôn
Có. Với lab PKI nhỏ, bạn hoàn toàn nên gộp:
vào 1 máy duy nhất để giảm độ phức tạp.
Đây là mô hình thực tế phù hợp nhất cho lab OpenCA vì:
Tôi sẽ thiết kế lại kiến trúc để:
Chứa:
CentOS 7 đã EOL → repo chết → SSL cũ → Perl conflict.
OpenCA cũng cũ.
=> GIẢI PHÁP TỐI ƯU:
Dùng:
hoặc
Lý do:
Lý do:
Tôi sẽ fix toàn bộ thông số để bạn không phải quyết định nữa.
| Máy | Hostname | IP |
|---|---|---|
| PKI | pki.lab.local | 10.10.10.10 |
| FTP | ftp.lab.local | 10.10.10.20 |
| Win10 | win10.lab.local | DHCP |
Toàn hệ thống:
textRSA 4096
textRSA 4096
textRSA 2048
textRSA 2048
| Cert | Valid |
|---|---|
| Root CA | 10 năm |
| Intermediate | 5 năm |
| FTP | 397 ngày |
| Client | 1 năm |
Chỉ cho phép:
textTLS 1.2 TLS 1.3
Dùng:
port:
text21/tcp
KHÔNG dùng implicit FTPS port 990.
Trên PKI Server:
text/pki ├── root ├── intermediate ├── certs ├── crl ├── csr └── private
Cài minimal.
bashhostnamectl set-hostname pki.lab.local
bashcat >> /etc/hosts <<EOF 10.10.10.10 pki.lab.local 10.10.10.20 ftp.lab.local EOF
bashdnf update -y reboot
bashdnf install -y \ epel-release \ git wget curl vim tar \ gcc gcc-c++ make automake autoconf \ perl perl-core perl-DBI perl-DBD-MariaDB \ perl-CGI perl-Digest-SHA perl-Time-HiRes \ perl-XML-Simple perl-XML-Parser \ openssl openssl-devel \ httpd mod_ssl \ mariadb mariadb-server \ policycoreutils-python-utils \ firewalld
bashsystemctl enable --now mariadb systemctl enable --now httpd systemctl enable --now firewalld
bashfirewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload
bashsetsebool -P httpd_can_network_connect on setsebool -P httpd_can_network_connect_db on
bashcd /usr/local/src git clone https://github.com/openca/openca-tools.git git clone https://github.com/openca/openca-base.git
bashcd /usr/local/src/openca-tools ./configure --prefix=/opt/openca make make install
bashcd /usr/local/src/openca-base ./configure \ --prefix=/opt/openca \ --with-httpd-group=apache \ --with-httpd-user=apache \ --with-web-host=pki.lab.local \ --with-httpd-fs-prefix=/etc/httpd \ --with-htdocs-fs-prefix=/var/www/html make make install-online
bashchown -R apache:apache /opt/openca chmod -R 750 /opt/openca
bashmkdir -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
bashvim /pki/root/openssl.cnf
FULL:
ini[ ca ] default_ca = CA_default [ CA_default ] dir = /pki/root certs = $dir/certs crl_dir = $dir/crl database = $dir/index.txt new_certs_dir = $dir/newcerts certificate = $dir/certs/rootCA.crt serial = $dir/serial crlnumber = $dir/crlnumber crl = $dir/crl/rootCA.crl private_key = $dir/private/rootCA.key default_md = sha256 default_days = 3650 default_crl_days = 365 policy = policy_strict unique_subject = no [ policy_strict ] countryName = match organizationName = match commonName = supplied [ req ] default_bits = 4096 default_md = sha256 prompt = no distinguished_name = dn x509_extensions = v3_ca [ dn ] C = VN O = LAB-PKI CN = LAB ROOT CA [ v3_ca ] subjectKeyIdentifier=hash authorityKeyIdentifier=keyid:always,issuer basicConstraints = critical, CA:true keyUsage = critical, digitalSignature, cRLSign, keyCertSign
bashopenssl genrsa \ -aes256 \ -out /pki/root/private/rootCA.key \ 4096
PASS:
textRootCAP@ssw0rd!
bashopenssl req \ -config /pki/root/openssl.cnf \ -key /pki/root/private/rootCA.key \ -new -x509 \ -days 3650 \ -sha256 \ -extensions v3_ca \ -out /pki/root/certs/rootCA.crt
bashmkdir -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
bashopenssl genrsa \ -aes256 \ -out /pki/intermediate/private/intermediate.key \ 4096
PASS:
textIntermediateP@ssw0rd!
bashopenssl 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"
bashopenssl x509 \ -req \ -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 \ -days 1825 \ -sha256
bashcat \ /pki/intermediate/certs/intermediate.crt \ /pki/root/certs/rootCA.crt \ > /pki/intermediate/certs/ca-chain.crt
bashmkdir -p /pki/csr/ftp openssl genrsa \ -out /pki/csr/ftp/ftp.key \ 2048
bashopenssl req \ -new \ -key /pki/csr/ftp/ftp.key \ -out /pki/csr/ftp/ftp.csr \ -subj "/C=VN/O=LAB-PKI/CN=ftp.lab.local"
bashopenssl x509 \ -req \ -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 \ -days 397 \ -sha256
bashmkdir -p /pki/csr/client openssl genrsa \ -out /pki/csr/client/win10.key \ 2048
CSR:
bashopenssl req \ -new \ -key /pki/csr/client/win10.key \ -out /pki/csr/client/win10.csr \ -subj "/C=VN/O=LAB-PKI/CN=win10-client"
SIGN:
bashopenssl x509 \ -req \ -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 \ -days 365 \ -sha256
EXPORT P12:
bashopenssl 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
PASS:
textClientP@ssw0rd!
bashapt update apt install -y \ vsftpd \ openssl
Từ PKI:
textftp.crt ftp.key ca-chain.crt
copy sang:
text/etc/ssl/private/
bashvim /etc/vsftpd.conf
FULL:
inilisten=YES anonymous_enable=NO local_enable=YES write_enable=YES ssl_enable=YES rsa_cert_file=/etc/ssl/private/ftp.crt rsa_private_key_file=/etc/ssl/private/ftp.key force_local_data_ssl=YES force_local_logins_ssl=YES ssl_tlsv1=NO ssl_tlsv1_1=NO ssl_tlsv1_2=YES require_ssl_reuse=NO require_cert=YES validate_cert=YES ca_certs_file=/etc/ssl/private/ca-chain.crt pasv_enable=YES pasv_min_port=40000 pasv_max_port=40100
bashsystemctl restart vsftpd systemctl enable vsftpd
IMPORT:
textrootCA.crt intermediate.crt win10.p12
Dùng:
Protocol:
textFTP over TLS explicit
Port:
text21
bashopenssl s_client \ -connect ftp.lab.local:21 \ -starttls ftp \ -cert win10.crt \ -key win10.key \ -CAfile ca-chain.crt
bashopenssl ca \ -config /pki/intermediate/openssl.cnf \ -revoke /pki/csr/client/win10.crt
Generate CRL:
bashopenssl ca \ -config /pki/intermediate/openssl.cnf \ -gencrl \ -out /pki/intermediate/crl/intermediate.crl
OpenCA hiện tại:
Nếu mục tiêu của bạn là:
thì thực tế:
là ổn định hơn OpenCA rất nhiều.
OpenCA chỉ nên dùng để: