OpenSSL 是一個開源項目,廣泛用于實現公鑰基礎設施(PKI)體系管理。它提供了生成密鑰對、創建和管理證書、證書簽名請求(CSR)、自簽名證書、證書撤銷列表(CRL)等功能。以下是OpenSSL實現PKI體系管理的主要步驟和功能:
使用 openssl genrsa 命令生成RSA密鑰對:
openssl genrsa -out private.key 2048
這會生成一個2048位的RSA私鑰,并將其保存為 private.key 文件。
使用 openssl req 命令生成CSR文件:
openssl req -new -key private.key -out csr.csr
這會提示你輸入一些信息,如國家、組織名稱等,并生成CSR文件 csr.csr 。
使用 openssl x509 命令生成自簽名證書:
openssl x509 -req -days 365 -in csr.csr -signkey private.key -out certificate.crt
這會生成一個有效期為365天的自簽名證書 certificate.crt 。
將CSR文件提交給證書頒發機構(CA)。CA會進行身份驗證和證書審核,并返回最終的證書文件。
使用 openssl verify 命令驗證證書的有效性:
openssl verify -CAfile ca_bundle.crt certificate.crt
這里 ca_bundle.crt 是CA的根證書或中間證書文件。
生成CRL文件:
openssl ca -config openssl.cnf -gencrl -out crl.pem
將吊銷的證書添加到CRL中:
openssl ca -config openssl.cnf -revoke certificate.crt -out crl.pem
將私鑰和證書合并到PKCS12文件中:
openssl pkcs12 -export -out certificate.p12 -inkey private.key -in certificate.crt
這會提示你設置一個密碼以保護PKCS12文件。
創建或編輯 openssl.cnf 文件,根據需要進行配置。例如:
[ ca ]
default_ca = CA_default
[ CA_default ]
dir = /etc/ssl/CA
certs = $dir/certs
crl_dir = $dir/crl
new_certs_dir = $dir/newcerts
database = $dir/index.txt
serial = $dir/serial
RANDFILE = $dir/private/.rand
default_md = sha256
policy = policy_admin
email_address = admin@example.com
name_opt = cert_opt
cert_opt = subject_key_identifier:C,CA:TRUE
[ policy_admin ]
countryName = match
stateOrProvinceName = match
localityName = match
organizationalName = match
organizationalUnitName = match
commonName = supplied
在PHP中,可以通過安裝和配置OpenSSL擴展來使用OpenSSL進行PKI管理。以下是一些基本操作:
在Linux系統中,可以使用以下命令安裝OpenSSL和PHP的OpenSSL擴展:
sudo apt-get install openssl
sudo apt-get install php-openssl
在PHP中啟用OpenSSL擴展:
extension=openssl
$privateKey = openssl_pkey_new();
$publicKey = openssl_pkey_get_public($privateKey);
$csr = openssl_csr_new($privateKey, ['distinguished_name' => ['C' => 'US', 'ST' => 'California', 'L' => 'San Francisco', 'O' => 'My Company', 'OU' => 'IT', 'CN' => 'www.example.com']]);
$csrFile = openssl_csr_export($csr);
$certificate = openssl_x509_new();
$certificate->set_serial(1);
$certificate->set_notBefore(time());
$certificate->set_notAfter(time() + 365 * 24 * 60 * 60);
$certificate->sign($privateKey, OPENSSL_ALGO_SHA256);
$certificateFile = openssl_x509_export($certificate);
$verifyResult = openssl_x509_verify($certificate, $certificateFile);
if ($verifyResult === 1) {
echo "Certificate is valid.";
} else {
echo "Certificate is not valid.";
}
通過這些步驟和功能,OpenSSL可以有效地實現PKI體系管理,確保數據傳輸的安全性和身份驗證。