苹果针对ATS逐渐收紧了政策,最近看了一些https的资料,自建证书主要用到openssl。根据苹果的政策,自建证书应该是通不过审核的(不确定)。本文主要介绍了如何自建证书和iOS用自建证书验证https。
创建用私钥签名的证书
生成私钥
1 | openssl genrsa -out private.key 2048 |
生成证书请求
1 | openssl req -new -key private.key -out server.csr |
这一步需要填写证书信息,如1
2
3
4
5
6
7Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:
其中,Common Name 填写证书绑定的域名,否则证书不能通过信任验证。
生成服务器的私钥
1 | openssl rsa -in private.key -out server.key |
使用私钥生成服务器证书
1 | openssl x509 -req -in server.csr -out server.crt -outform pem -signkey server.key -days 365 -sha256 |
openssl测试
窗口1启动server
1 | openssl s_server -accept 10001 -key server.key -cert server.crt -tls1_2 |
窗口2启动客户端
1 | openssl s_client -connect localhost:10001 |
使用CA签名证书
创建目录
创建一个目录,并且将生成CA证书的脚本CA.sh复制到这个目录:
1 | mkdir ca |
创建CA私钥和证书
1 | ./CA.sh -newca |
CA.sh会使用/usr/local/ssl/openssl.cnf中的配置来创建
使用CA根证书签名
1 | 生成私钥 |
ATS要求
私钥加密算法
- 2048位RSA 以上
- 256位ECC 以上
私钥签名证书算法
- SHA256 以上
安全协议
- TLS1.2
证书格式
- X.509
iOS使用自签名证书
生成cer
iOS客户端支持的证书是DER格式的,直接将服务端的证书导出成DER格式。1
openssl x509 -inform PEM -outform DER -in server.crt -out server.cer
NSURLSession验证
1 | //导入客户端证书 |