使用双向认证的实用性分析及无后端代码侵入性配置

前言,双向认证到底是利大,还是弊大。

先从一点说,现在很多web安全入侵的开始,多半要分析web请求。单向的https可阻止不了这些人对接口的调试、包括移动终端的双向验证运用就由此而生。

移动端:

使用双向认证后,移动终端的所有请求,如果没有pkcs7 或pkcs12的证书密钥,他们是没办法去抓请求的。但是要破解证书密钥,就得逆向整个app,找到调用证书的密钥,现在的开发隐藏各种密钥的手段,不逆出翔来,也差不多半死,逆出证书还得逆出通讯签名的密钥再破解…. 无疑让一些孤军奋战的黑客一筹莫展,除非筹码够,要不然….没多少人愿意死这样的脑细胞去搞一个说不定接口还没漏洞的目标。

网站:

网站方面如果用了双向认证,必须得导入证书到电脑受信任的根目录,要不然网站都访问不了。这里就不得不说一些具体的实用场景了。例如,你开了个不非法,不那么合法的搞基论坛,你只想给部分人看到。那只能提供证书到群里,让他们去下载导入证书,然后访问你的网站。

结论:具体的是利大还是弊大显而易见,但是对服务器的性能多半也会有一点影响,这可忽略不计,证书密钥可设置的轻便一点。而这一切如果使用的是第三方服务器去认证证书,那几乎就是可以直接上了。

具体配置:

这里使用cloudflare apishield功能,在线生成证书下载后即可,配置要使用双向认证的域名,分分钟即可实现双向认证。

创建要生成的证书

将下图中的证书保存成为xxxx.pem文件,将私钥保存成为xxxx.key文件,

之后再用这两文件生成一个pkcs12文件,给客户端导入受信任的根目录,或者给app终端通过代码调用即可。

openssl pkcs12 -export -out xxxx.p12 -in xxxx.pem -inkey xxxx.key

之后创建api shield规则,对需要双向认证的域名进行配置即可,一个证书可配置多个域名,也可以配置指定的接口,具体规则根据需求摸索….

其中gjdd.jozxing.cc 为例子,没有证书无法访问。会被cloudflare直接拦截。