Openssl 自签证书实现nginx双端验证的https

1.首先是下载openssl

http://slproweb.com/products/Win32OpenSSL.html

143419_Sslu_2661827.png

2.安装完成之后,进入bin目录,运行openssl.exe

3.实现双端验证,首先需要一个自签的ca根证书,然后用根证书对server与client证书进行签发,服务器配置服务端证书,将客户端证书下发给各个客户端

4.创建根证书key 这里选择的是无密码的

5.创建csr 填写信息

说明:这里用baidu做个栗子,求原谅。 对于各个信息的介绍相信其他文章也有介绍,这里不做介绍,主要对于Common Name (FQND) 这个用来识别域名,对于根证书填写*.xxx.xx表示匹配全部域名。在使用自签证书的时候,对于ios与android的移动端配置时,如果这里配置的是准确的访问域名而不是随意填写的字段,那么可以不需要去填写重写验证主机如android:

        //    SSL OK_HTTP配置 开始
        HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory(new InputStream[]{loadCer()}, null, null);
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .addInterceptor(new LoggerInterceptor("OK_TAG"))  // 配置请求打印日志  上架时注释掉该条
                .connectTimeout(10000, TimeUnit.MILLISECONDS)
                .readTimeout(10000L, TimeUnit.MILLISECONDS)
                .hostnameVerifier(new HostnameVerifier() {   //设置默认主机受信
                    @Override
                    public boolean verify(String s, SSLSession sslSession) {
                        return true;
                    }
                })
                .sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager)
                .build();

重写hostnameVerifier方法 直接手动改为true。对于最后的扩展信息,这里可以不填。

6.一般写好以上的可以将csr提交到证书签发处,让他们签发有效的证书。这里我们还是自己签发,得到根证书。

7.得到根证书之后,我们需要的是服务器的证书,首先创建key,得到无密码的 方便部署

8.得到server.csr

说明:这里指明了域名地址为:api.baidu.com 其他无差。

9.用根证书签发服务器证书

到这里,服务器证书已经配置好了 直接拿到server.key和server.crt就可以部署https了

10.创建客户端证书key

11.创建client.csr

12.用根证书签发客户端证书

已上就得到所需要的证书文件,文件目录为:

13.配置nginx

	server {
	listen 9982 ssl;
	server_name localhost;
	ssl on;
	ssl_certificate_key certs/server.key;
	ssl_certificate certs/server.crt;
	ssl_client_certificate certs/root.crt;
	ssl_verify_client on;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_ciphers  ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_prefer_server_ciphers  on;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        location / {
             root   html;
            index  index.html index.htm;
	   }
	}

说明:ssl_client_certificate 配置的是根证书,ssl_verify_client on  开启客户端证书验证

14.在火狐浏览器上打开

此时提示我们,客户端证书是没有安装的,我们需要将客户端证书转换下,以下 是证书转换的地址。

https://csr.chinassl.net/convert-ssl.html

上传客户端证书已经密钥,输入一个保护密码,转换完成后下载即可,当然,也可以自己使用openssl转换。

15.安装证书

说明:将下载下来的证书导入,需要输入你自己定义的保护密码,完成安装。这时关闭浏览器,重新开启。

总结:在使用命令的时候,在我windows安装的环境下,对于命令-extensions v3_req 如果不加-extfile cnf/openssl.cnf 签发出来的是v1版的证书,使用后则为v3版证书。 这里的-sha256是加密方法 可自行选择。对于签发根证书使用的是 v3_ca 与签发服务端、客户端证书有别。

附件:上文配置的证书

https://gitee.com/lencer93/ZhengShu

 

转载于:https://my.oschina.net/swiftloop/blog/1570028

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值