一、自建CA
1、修改openssl 配置文件
#vim /etc/pki/tls/openssl.cnf
dir = /etc/pki/CA # CA的工作目录
database = $dir/index.txt # 签署证书的数据记录文件
new_certs_dir = $dir/newcerts # 存放新签署证书的目录
serial = $dir/serial # 新证书签署号记录文件
certificate = $dir/ca.crt # CA的证书路径
private_key = $dir/private/cakey.pem # CA的私钥路径
以上配置默认可以不做修改,需要自己确认好路径即可
2、制作CA 自签名证书
#cd /etc/pki/CA 进入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 生成数据记录文件,生成签署号记录文件 给文件一个初始号
二、生成服务器证书
#umask 077; openssl genrsa -out server.key 1024 生成服务端私钥
#openssl req -new -key server.key -sha512 -out server.csr 制作服务器证书申请指定的加密算法签名(默认在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 生成服务端私钥
#openssl req -new -key client.key -sha512 -out client.csr 制作服务器证书申请指定的加密算法签名(默认在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、制作证书时会提示输入密码,设置密码可选,服务器证书和客户端证书密码可以不相同。
2、服务器证书和客户端证书制作时提示输入省份、城市、域名信息等,需保持一致。
3、以下信息根证书需要和客户端证书匹配,否则可能出现签署问题。
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/;
}
}
六、生成浏览器导入证书
#openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12
七、导入浏览器测试