nginx https 雙向認(rèn)證

一、自建CA

1、修改openssl 配置文件

?#vim /etc/pki/tls/openssl.cnf

dir? ? ? ? ? ? = /etc/pki/CA # CA的工作目錄

database? ? ? ? = $dir/index.txt # 簽署證書的數(shù)據(jù)記錄文件

new_certs_dir? = $dir/newcerts # 存放新簽署證書的目錄

serial? ? ? ? ? = $dir/serial # 新證書簽署號記錄文件

certificate? ? = $dir/ca.crt # CA的證書路徑

private_key? ? = $dir/private/cakey.pem # CA的私鑰路徑

以上配置默認(rèn)可以不做修改,需要自己確認(rèn)好路徑即可



2、制作CA 自簽名證書

#cd /etc/pki/CA? 進(jìn)入CA家目錄

#umask 077; openssl genrsa -out private/ca.key 2048? ? 生成CA私鑰

#openssl req -new -x509 -key private/ca.key? -out ca.crt? 制作自簽名證書

#touch index.txt serial && echo '01' > serial? 生成數(shù)據(jù)記錄文件,生成簽署號記錄文件 給文件一個初始號



二、生成服務(wù)器證書

#umask 077; openssl genrsa -out server.key 1024? 生成服務(wù)端私鑰

#openssl req -new -key server.key -sha512 -out server.csr? ? 制作服務(wù)器證書申請指定的加密算法簽名(默認(rèn)在openssl.cnf 是sha1)

#openssl ca -policy policy_anything -days 3650 -cert ca.crt -keyfile private/ca.key -in server.csr -out server.crt? CA簽署 server 證書



三、生成客戶端證書

#umask 077; openssl genrsa -out client.key 1024? 生成服務(wù)端私鑰

#openssl req -new -key client.key -sha512 -out client.csr? ? 制作服務(wù)器證書申請指定的加密算法簽名(默認(rèn)在openssl.cnf 是sha1)

#openssl ca -policy policy_anything -days 3650 -cert ca.crt -keyfile private/ca.key -in client.csr -out client.crt? CA簽署 server 證書



四、注意事項:

1、制作證書時會提示輸入密碼,設(shè)置密碼可選,服務(wù)器證書和客戶端證書密碼可以不相同。

2、服務(wù)器證書和客戶端證書制作時提示輸入省份、城市、域名信息等,需保持一致。

3、以下信息根證書需要和客戶端證書匹配,否則可能出現(xiàn)簽署問題。

countryName = match

stateOrProvinceName = match

organizationName = match

organizationalUnitName = match

如何指定簽署證書的簽名算法

#openssl req xx? ? #XX代表加密算法? 可以使用man 或者 help

例如指定加密算法為md5

#openssl req -new -key server.key -md5 -out server.csr



五、配置nginx

#vim /usr/local/nginx/conf/vhost/test.conf

在server 配置下 加入

ssl_certificate? /usr/local/nginx/ssl/server.crt;? ? #server 證書

ssl_certificate_key? /usr/local/nginx/ssl/server.key;? ? #server? 私鑰

ssl_client_certificate? /usr/local/nginx/ssl/ca.pem;? ? #ca 證書

ssl_verify_client on;

ssl_session_cache? ? shared:SSL:1m;

ssl_session_timeout? 10m;

ssl_protocols SSLv2 SSLv3 TLSv1;

ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;

ssl_prefer_server_ciphers on;

舉例:

server {

server_name 127.0.0.1;

listen 443;

ssl on;

keepalive_timeout 120;

#ssl_certificate /usr/local/nginx/conf/server.crt;

#ssl_certificate_key /usr/local/nginx/conf/server.key;

ssl_certificate? /usr/local/nginx/ssl/server.crt;

ssl_certificate_key? /usr/local/nginx/ssl/server.key;

ssl_client_certificate? /usr/local/nginx/ssl/ca.pem;

ssl_verify_client on;

ssl_session_cache? ? shared:SSL:1m;

ssl_session_timeout? 10m;

ssl_protocols SSLv2 SSLv3 TLSv1;

ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;

ssl_prefer_server_ciphers on;

location /test {

? ? ? ? ? ? index index.html index.htm sorting.html bmap.html index.jsp loginInit.htm login.htm;

? ? ? ? ? ? proxy_pass_header Server;

? ? ? ? ? ? proxy_set_header Host $http_host;

? ? ? ? ? ? proxy_redirect off;

? ? ? ? ? ? proxy_set_header X-Real-IP $remote_addr;

? ? ? ? ? ? proxy_set_header X-Scheme $scheme;

? ? ? ? ? ? proxy_set_header X-Forwarded-Host $host;

? ? ? ? ? ? proxy_set_header X-Forwarded-Server $host;

? ? ? ? ? ? proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

? ? ? ? ? ? proxy_pass http://localhost:4200/;

}

}



六、生成瀏覽器導(dǎo)入證書

#openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12



七、導(dǎo)入瀏覽器測試

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容