apache搭建本地https

作者: 许漠颜 | 来源:发表于2016-08-30 17:46 被阅读3362次
    直接开始吧!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.验证结果

    结束语

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

    相关文章

      网友评论

      • DontDD:问一下我是在虚拟机里面运行https ,然后ServerName 应该填什么?我在虚拟机里面测https,所以是没有域名的,这个时候Apache 的配置中ServerName应该填什么和证书中的Common Name 应该填什么? :frowning:
        许漠颜:测试的情况下,serverName写什么都行,能对应就可以。再看看这方面的基础知识。

      本文标题:apache搭建本地https

      本文链接:https://www.haomeiwen.com/subject/stofettx.html