一、自建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)入瀏覽器測試