认证就是发消息的客户端和服务端之间相互认证确认的过程,又分为单向和双向认证:大概是下面这样的过程
一、单向认证:
1、客户端向服务器发送消息,服务器接到消息后,用服务器端的密钥库中的私钥对数据进行加密,然后把加密后的数据和服务器端的公钥一起发送到客户端;
2、客户端用服务器发送来的公钥对数据进行解密,然后在客户端使用服务器发送过来的公钥对数据加密传给服务器端,服务器用私钥对数据进行解密,这就完成了客户端和服务器之间通信的安全问题,但是单向认证没有验证客户端的合法性。
二、双向认证:
1、客户端向服务器发送消息,首先把消息用客户端证书加密然后连同时把客户端证书一起发送到服务器端
2、服务器接到消息后用首先用客户端证书把消息解密,然后用服务器私钥把消息加密,把服务器证书和消息一起发送到客户端
3、客户端用发来的服务器证书对消息进行解密,然后用服务器的证书对消息加密,然后在用客户端的证书对消息在进行一次加密,连同加密消息和客户端证书一起发送到服务器端,
4、服务器端首先用客户端传来的证书对消息进行解密,确保消息是这个客户发来的,然后用服务器端的私钥对消息在进行解密这个便得到了明文数据。
如果iOS通过https访问的站点(服务器)证书是ca机构颁发的话,不需要多余的代码,请求以前http的时候怎么写现在还怎么写,只是把请求url的http改成https,但是如果站点的证书是自签证书(如通过java
keytool自生成),ios默认是验证不通过的,请求会失败,那么需要在http请求回调里面做两步多余的处理,回调如下:
//证书验证处理- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;//信任自签证书站点- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace;
双向认证SSL原理: http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html
单向认证(http): http://www.2cto.com/kf/201604/502612.html
http://blog.csdn.net/super_haifeng/article/details/53464802
ssl:
如果您在工作中遇到带有后缀扩展名的证书文件,可以简单用如下方法区分:
.DER .CER : 这样的证书文件是二进制格式,只含有证书信息,不包含私钥。
**.CRT : **这样的文件可以是二进制格式,也可以是文本格式,一般均为文本格式,功能与.DER/.CER相同。
**.PEM : **一般是文本格式,可以放证书或私钥,或者两者都包含。 *.PEM如果只包含私钥,那一般用 *.KEY代替。
**.PFX .P12 **是二进制格式,同时含证书和私钥,一般有密码保护。