直接开始吧!https、openssl、apache相关的东西,不知道的自行百度吧。
第一步修改apache的配置文件:
- 修改httpd.conf文件
目录:/etc/apache2/httpd.conf
修改参数:
1.LoadModule ssl_module libexec/apache2/mod_ssl.so
2.Include /etc/apache2/extra/httpd-ssl.conf
3.Include /etc/apache2/extra/httpd-vhosts.conf
修改方式:将上述三条前的#去掉开启- 修改httpd-ssl.conf文件
目录:/etc/apache2/extra/httpd-ssl.conf
1.SSLCertificateFile "/etc/apache2/ssl/server.crt"
2.SSLCertificateKeyFile "/etc/apache2/ssl/server.key"
3.SSLCertificateChainFile "/private/etc/apache2/server-ca.crt"
修改方式:将上述三条前的#去掉开启编辑httpd-vhosts.conf文件
相关属性和路径的解释:
httpd.conf:
LoadModule ssl_module libexec/apache2/mod_ssl.so(告诉apache支持ssl)
Include /etc/apache2/extra/httpd-ssl.conf(ssl配置文件)
Include /etc/apache2/extra/httpd-vhosts.conf(虚拟主机配置文件)
httpd-ssl.conf:
SSLCertificateFile "/etc/apache2/ssl/server.crt"(服务端证书的目录)
SSLCertificateKeyFile "/etc/apache2/ssl/server.key"(服务端私钥的目录)
SSLCertificateChainFile "/private/etc/apache2/server-ca.crt"(钥匙链的目录)
httpd-vhosts.conf:
DocumentRoot(默认访问的文件夹路径)
ServerName(域名)
SSLEngine on(打开ssl引擎)
SSLCipherSuite(支持的加密算法)
第二步修改openssl.cnf文件:
目录:/usr/local/etc/openssl/openssl.cnf
1.[ CA_default ]部分dir目录(修改成自己想修改的任何一个目录或者不修改)
2.(前提需要添加别名等扩展信息,别名为例)[ v3_ca ]部分subjectAltName打开(设置为@alt_names[名字随意])
3.(前提需要添加别名等扩展信息,别名为例)[ usr_cert ]部分subjectAltName打开(设置为@alt_names[名字随意])
4.添加[ alt_names ]
IP.1 = 192.168.2.20
5.其他信息根据实际需求更改
第三步生成证书文件:
这里所有的操作都在[ CA_default ]部分dir目录下进行。
准备工作:
1.touch index.txt
2.touch index.txt.attr
3.echo 01 > serial
4.mkdir newcerts
5.mkdir keys
生成根证书:
私钥:openssl genrsa -des3 -out keys/rootca.key 2048
根证书:openssl req -new -x509 -days 3650 -key keys/rootca.key -out keys/rootca.crt
生成二级根证书:
私钥:openssl genrsa -des3 -out keys/secondca.key 2048
去密码:openssl rsa -in keys/secondca.key -out keys/secondCA.key
请求文件:openssl req -new -days 3650 -key keys/secondca.key -out keys/secondca.csr
根证书签名:openssl ca -extensions v3_ca -in keys/secondca.csr -config /usr/local/etc/openssl/openssl.cnf -days 3650 -out keys/secondca.crt -cert keys/rootca.crt -keyfile keys/rootca.key
生成服务端证书:
私钥:openssl genrsa -des3 -out keys/server.key 2048
去密码:openssl rsa -in keys/server.key -out keys/server.key
请求文件:openssl req -new -days 3650 -key keys/server.key -out keys/server.csr
签名:openssl ca -in keys/server.csr -config /usr/local/etc/openssl/openssl.cnf -days 3650 -out keys/server.crt -cert keys/secondca.crt -keyfile keys/secondca.key
生成钥匙链:
钥匙链:cat keys/rootca.crt keys/secondca.crt > chain.crt
第四步生成证书时需要注意的问题
1.countryName、stateOrProvinceName、organizationName生成证书的时候必须保持一致。
2.如果签名的时候发生错误修改openssl.cnf文件下的default_md属性为sha256(sha256为通用的签名算法)
3.Common Name尽量保持不一致,服务端证书生成的时候Common Name为域名
4.如果遇到其他的问题可以留言
第五步将生成的文件对应到配置文件的目录下启动apache
启动apache:sudo apachectl restart
在浏览器中访问:
继续:
第六步客户端的验证(只说AFNetworking)
提示:如果没有使用afn需遵循NSURLSessionTaskDelegate代理,在代理方法里验证即可。
1.在钥匙串中导出根证书的cer文件导入工程
2.关键代码:
<pre><code>
*AFSecurityPolicy securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
securityPolicy.allowInvalidCertificates = YES;
*manager.securityPolicy = securityPolicy;
</code></pre>
3.验证结果
结束语
在这里浪费了一些时间,很多原因是因为网上有些博客写的不是很明了或者已经很老了,因此走了一些弯路。所以写出来这篇博客介绍的不算很详尽,但是关键的点都已经写了出来。希望能够帮助到你们。