apache搭建本地https

直接开始吧!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文件


    屏幕快照 2016-08-30 下午4.21.14.png
相关属性和路径的解释:
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
在浏览器中访问:

屏幕快照 2016-08-30 下午5.16.07.png

继续:
屏幕快照 2016-08-30 下午5.21.36.png

第六步客户端的验证(只说AFNetworking)

提示:如果没有使用afn需遵循NSURLSessionTaskDelegate代理,在代理方法里验证即可。
1.在钥匙串中导出根证书的cer文件导入工程
2.关键代码:
<pre><code>
*AFSecurityPolicy securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
securityPolicy.allowInvalidCertificates = YES;
*manager.securityPolicy = securityPolicy;
</code></pre>
3.验证结果

结束语

在这里浪费了一些时间,很多原因是因为网上有些博客写的不是很明了或者已经很老了,因此走了一些弯路。所以写出来这篇博客介绍的不算很详尽,但是关键的点都已经写了出来。希望能够帮助到你们。

推荐阅读更多精彩内容