openssl證書的生成和使用
阿新 • • 發佈:2019-01-04
證書類別
- 根證書 生成伺服器證書,客戶端證書的基礎。自簽名。
- 伺服器證書 由根證書籤發。配置在伺服器上。
- 客戶端證書 由根證書籤發。配置在伺服器上,併發送給客戶,讓客戶安裝在瀏覽器裡。
要注意,
1. 伺服器證書的cn要和servername一致,否則啟動httpd時有警告。
2. 瀏覽器安裝客戶端證書時,需要用pkcs12轉換成pfx格式,否則可以安裝但無效。
3. 把根證書安裝到瀏覽器的受信CA中,訪問伺服器時就不會出警告了。
環境: CentOS6_x64 openssl 1.0.1 apache2.2
準備
echo -n > /etc/pki/CA/index.txt
echo '00' > /etc/pki/CA/serial
注意,index.txt需要初始化為0位元組,連換行也不能有。
1 根證書
# 修改/etc/pki/tls/openssl.cnf,放開nsCertType= server的註釋。
[ usr_cert ]
nsCertType = server
cd /etc/pki/CA
# 生成金鑰
openssl genrsa -out private/myCA.key 1024
# 生成自簽名證書
openssl req -new -x509 -key private/myCA.key -out certs/myCA.crt
把這個crt匯入客戶端瀏覽器,就不會顯示證書警告了。
2 伺服器證書
cd /etc/pki/tls
openssl genrsa -out private/sv.key 1024
# 生成請求
openssl req -new -key private/sv.key -out private/sv.csr
# 使用根證書籤名
openssl ca -in private/sv.csr -keyfile ../CA/private/myCA.key -cert ../CA/certs/myCA.crt -out certs/sv.crt
有時,簽發多個證書時,由於common name等資訊重複導致簽名失敗,
可以初始化index.txt和serial。
3 客戶端證書
# 修改/etc/pki/tls/openssl.cnf,註釋掉nsCertType= server,去掉的nsCertType = client, email註釋。
[ usr_cert ]
nsCertType = client, email
cd /etc/pki/tls
openssl genrsa -out private/clnt1.key 1024
openssl req -new -key private/clnt1.key -out private/clnt1.csr
openssl ca -in private/clnt1.csr -keyfile ../CA/private/myCA.key -cert ../CA/certs/myCA.crt -out certs/clnt1.crt
個人證書需要轉成pfx格式
openssl pkcs12 -export -in certs/clnt1.crt -out certs/clnt1.pfx -inkey private/clnt1.key
apache 配置
SSLCertificateFile /etc/pki/tls/certs/sv.crt
SSLCertificateKeyFile /etc/pki/tls/private/sv.key
SSLCertificateChainFile /etc/pki/tls/certs/chain.crt <--這個從哪兒來的?
SSLCACertificateFile /etc/pki/tls/certs/myCA.crt
SSLVerifyClient require
SSLVerifyDepth 1
nginx配置
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /etc/pki/tls/certs/sv2.crt;
ssl_certificate_key /etc/pki/tls/private/sv2.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_client_certificate /etc/pki/CA/certs/myCA.crt;
ssl_verify_client on;
ssl_verify_depth 1;
另外,遇到了證書不能刪除的問題。解決方法是:
使用mmc,進入 證書,即可刪除。
windows上配置nginx時,可能遇到快取等模組不可用的情況,
需要註釋掉ssl_session_cache等。
生成dh引數:
dhparam -out dh1024.pem 1024