一、准备工作
- 环境:windows(linux类似)
- 工具:openssl、nginx
二、生成证书
- 方法一:可从正规网站获取,有收费或者免费的,如阿里云
- 方法二:JDK的Keytool生成证书
- 方法三:openssl生成
后两种方法适合自己测试,正规网站获取的证书安全性高,并且根证书都是大厂认证,浏览器一般内置,不需要再导入证书。
文章使用的是第三种方法,openssl生成证书。
1、创建根证书相关
- 创建根证书私钥
openssl genrsa -out ca.key 1024
- 创建根证书请求文件
openssl req -new -out ca.csr -key ca.key
此指令,会让填写信息,其中国家,省市,公司等需要和后面的证书保持一致.后面challenge password的地方直接回车就好。
- 自签根证书
openssl x509 -req -in ca.csr -out ca.cer -signkey ca.key -CAcreateserial -days 3650
- 生成p12格式根证书,密码填写123456(自定义)
openssl pkcs12 -export -clcerts -in ca.cer -inkey ca.key -out ca.p12
2、创建服务端证书
- 生成服务端key
openssl genrsa -out server.key 1024
- 生成服务端请求文件
openssl req -new -out server.csr -key server.key
填写信息,国家省市公司和根证书保持一致, Common Name 要特别注意, 要用你服务器的域名,如果IP要慎用(代码调用可能会出现异常)
- 生成服务端证书(root证书,rootkey,服务端key,服务端请求文件这4个生成服务端证书)
openssl x509 -req -in server.csr -out server.cer -signkey server.key -CA ca.cer -CAkey ca.key -CAcreateserial -days 3650
3、生成客户端相关
- 生成客户端key
openssl genrsa -out client.key 1024
- 生成客户端请求文件
openssl req -new -out client.csr -key client.key
填写证书信息
- 生成客户端证书(root证书,rootkey,客户端key,客户端请求文件这4个生成客户端证书)
openssl x509 -req -in client.csr -out client.cer -signkey client.key -CA ca.cer -CAkey ca.key -CAcreateserial -days 3650
- 生成客户端p12格式根证书,密码设置123456(自定)
openssl pkcs12 -export -clcerts -in client.cer -inkey client.key -out client.p12
需要的证书基本都有了
三、Nginx配置
1、双向认证
nginx.conf配置,https的默认端口一般为443,找到如下,将注释去掉
server {
listen 443;
server_name www.sdkhahaha.com;
ssl on;
ssl_certificate D:/nginx1.4.7/nginx-1.4.7/ssl2/server.cer;#配置证书位置
ssl_certificate_key D:/nginx1.4.7/nginx-1.4.7/ssl2/server.key;#配置秘钥位置
ssl_client_certificate D:/nginx1.4.7/nginx-1.4.7/ssl2/ca.cer;#双向认证
ssl_verify_client on; #双向认证
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; #按照这个套件配置
#ssl_protocols SSLv2 SSLv3 TLSv1;
#ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root D:/HBwork/tools/nginx1.4.7/nginx-1.4.7/html;
index index.html index.htm;
}
location /sr {
proxy_pass http://127.0.0.1:10702/rsfe;
}
}
启动Nginx,(先在C:\Windows\System32\drivers\etc\hosts 里面做好 域名和ip的映射127.0.0.1 www.sdkhahaha.com)
点击高级,继续前往
出现400错误,是因为我们没有带客户端证书的原因, 将client.p12 导入浏览器,则如下图
这时候我们将我们的ca.p12也导入,证书存储不用默认的个人,选择 受信任的根证书颁发机构, 如果再访问如下图(可能要重启浏览器)
2、单向认证
将nginx.conf中的标有双向认证的两条去掉即可