最近遇到这么一个问题,在开发中使用的是https协议访问接口。后端小哥给了我一张base64编码的自签名证书。我把证书放到工程里面后,发现看不到证书的内容。如下图:
明显证书有问题,让后端小哥帮忙解决下。后端小哥说他也不知道怎么弄。询问了下测试妹子以前遇到过这种问题没。妹子让我用MAC签一张自签名证书来试试。
准备证书
准备密钥
genrsa -des3 -out server.key 2048
执行结果:
命令中包含参数 -des3 ,所以命令在执行过程中会提示输入口令。
生成证书请求文件
openssl req -new -key server.key -out server.csr
执行结果:
在命令执行过程中需要输入一些证书申请需要的信息。
生成自签名证书
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
执行结果
iOS端配置
将证书文件格式由crt转换成cer
openssl x509 -in server.crt -out server.cer -outform der
执行结果
将server.cer放到工程中,可以看到证书内容,如下图:
代码中配置(AFN3.0)
// 1.初始化单例类
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:IFSSLPinningModeCertificate];
securityPolicy.allowInvalidCertificates = YES; // 客户端是否信任非法证书
securityPolicy.validatesDomainName = NO; // 客户端是否信任非法证书
// 2.设置证书模式
NSString * cerPath = [[NSBundle mainBundle] pathForResource:@"server" ofType:@"cer"];
NSData * cerData = [NSData dataWithContentsOfFile:cerPath];
NSMutableArray *certContentArray = [NSMutableArray array];
[certContentArray addObject:certData];
[securityPolicy setPinnedCertificates:certContentArray];
manager.securityPolicy = securityPolicy;
服务端配置
后端服务部署在Tomcat上。先将cer 转换成jks格式
openssl pkcs12 -export -in server.crt -inkey server.key -out server.pfx
keytool -import -alias mycert -file server.cer -keystore server.jks
在命令执行过程中需要输入jks文件的密钥。
然后配置Tomcat
将图中 keystoreFile和keystorePass修改为生成的文件和设置的密码。
完成!