1.首先是下载openssl
http://slproweb.com/products/Win32OpenSSL.html
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