隨筆-openssl證書的生成和使用

sy9876發表於2017-08-15

證書類別
– 根證書 生成伺服器證書,客戶端證書的基礎。自簽名。
– 伺服器證書 由根證書籤發。配置在伺服器上。
– 客戶端證書 由根證書籤發。配置在伺服器上,併傳送給客戶,讓客戶安裝在瀏覽器裡。

要注意,
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


相關文章