搭建https单、双向认证

一、准备工作

  • 环境: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中的标有双向认证的两条去掉即可

参考:https://www.cnblogs.com/yelao/p/9486882.html

https://www.cnblogs.com/xiao987334176/p/11041241.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章