当前位置: 首页 > Web前端 > HTML

RN实现双向认证

时间:2023-03-28 16:38:17 HTML

有时候我们为了APP的安全会采取很多措施,比如双向认证,使用证书来帮助我们加密通信。我们通过以下问题帮助我们进一步理解和实施。什么是双向认证?https是双向认证吗?SSL/TLSPinning和双向身份验证有什么区别?双向认证实际上是通信双方相互认证的过程。多做的是客户端和服务端的相互认证。是指双方在通信时首先验证双方是否合法。请注意,双方必须验证身份验证的有效性。同学就想,https的验证过程是不是属于双向验证?接下来,我们来看看它的流程。这里我们借用其他网站的图片。这个过程其实就是SSL/TLS加密的过程。1.客户端发送请求。2、服务器端将申请的证书(即上面服务器端生成的公钥和私钥(其实证书不仅包括这些)发送给客户端)3、客户端检查服务器证书的合法性,通过使用本地环境的CA证书(一般是手机或电脑由公共机构内置),生成一个随机密钥,用证书中的公钥加密后发送给服务器4.服务器收到后,用私钥加密客户端密钥的哈希值,发送给客户端。5.客户端用公钥解密后,检查自己密钥的哈希值是否一致。6.如果一致,则生成对称算法和密钥使用服务器的公钥发送给对方,然后开始传输数据通过这几个步骤,我们发现只有客户端验证了服务器的证书,而服务器并没有验证客户端详细地l、这样我们就可以通过不同的客户端向服务器发送请求。那么问题来了,为了更高的安全性考虑,我可以让我的服务器只接受来自我APP的请求吗?前端的大致思路是:生成自签名的客户端和服务端证书,得到前端客户端证书和ca证书。Android需要先将客户端证书的公钥和私钥转换成p12格式,再转换成bks格式;ios端的p12就可以了,然后通过rn的native模块嵌入到项目中。具体可以参考rn的官方文档。这样,在通信时,客户端会使用其APP中嵌入的自签名ca证书来发送服务器收到的证书。验证服务器,服务器也会使用自签名的ca证书来验证客户端的证书,这样只有自己的那些APP才能和服务器通信注意:因为APP有内嵌证书,APP很容易解压,所以保护APP是很有必要的!另外,可能有同学知道SSLPinning。我们知道SSLPinning有两种策略。一种是将服务器证书放在APP中,另一种是将服务器的公钥放在APP中,然后用证书或公钥对服务器进行认证。查看。但不管是哪种方式,实际上都是客户端在验证服务端。参考文章:HTTP和HTTPS的区别