使用Apache搭建https服务,单向认证+双向认证。

渣科最近学习Apache, 学会了怎么搭建单向和双向的https服务,文中所有步骤亲测有效,希望能够帮助大家!

先放张图,为了这个锁头,我奋斗了很久。使用的是自签名证书,域名也是在本地配的,全程不需要联网。

这是我的Apache版本:httpd-2.4.41-lre302-x64-vc14。希望大家可以先了解https怎么通信,减少配置过程中的一些疑惑:

 https://www.runoob.com/w3cnote/http-vs-https.html

      0. 搭建好Apache,就可以访问我们的网站。

下载安装教程:https://blog.csdn.net/mikasoi/article/details/80976425

安装完成,打开http://127.0.0.1,可以看到Apache的欢迎页面。

恭喜,你已经搭好了一个http服务了!

为了配置HTTPS,我们还需要一点点的准备工作。

           简单介绍一下Apache三个配置文件(不想看可以直接绕过,去查官网的会说的更仔细):

  • httpd.conf 是核心的配置文件,我们可以在里面添加或删除Apache的功能模块(比如mod_proxy就是代理模块)。

httpd.conf中的LISTEN用来表示Apache监听的端口,默认是80。

  • extra/httpd-vhost.conf,我们一般不会在httpd.conf中直接写我们的配置,而是把配置转移到httpd-vhost.conf中,让httpd.conf保留最干净的配置和功能(添加/删除功能模块,或者定义全局属性)。httpd-vhost.conf用来进行虚拟机配置,虚拟机配置就是一个标签<VirtualHost>,你可以把很多指令配置到一个<VirtualHost>,这些指令只对此<VirtualHost>生效,下面配置的时候会说到。
  • extra/httpd-ssl.conf,关于SSL的全局配置就写在这里面。当我们使用HTTPS的时候就会用到这里面的全局配置。有全局自然也有局部,你可以在自己的Virtualhost中重写这些配置。
  •  为了方便测试,本文用到的域名和证书都在本机生成和设置,模拟生产实际环境。

域名通过修改C:\Windows\System32\drivers\etc\hosts 文件。

比如www.myApahce.com是我要测试域名,那么我就在里面加上这行。

试试访问:

自签名证书生成网上有很多资料,下面我也会说到。

 

  1. 开始部署一个Https服务。

最终的效果:

1.1 Https分为单向验证和双向验证。

这里我简单说明一下,HTTPS单向验证,就是只有服务端证书,客户端验证服务端证书的真伪后即可进行通信。HTTPS双向验证,客户端验证服务端身份后,还要把客户端证书发给服务端,服务端也要验证客户端身份,通过后才进行通信。

我们先部署一个单向https服务,再基于单向HTTPS 配置 双向的https服务。

1.2 有关于HTTPS的配置,都依赖于mod_ssl模块,这个模块在我们安装Apache的时候默认就打开了。打开httpd.conf中可以看到:

如果加载了mod_ssl,默认也会加载httpd-ssl.conf文件,httpd-ssl.conf里有关于ssl的全局配置:

 

1.3 开始部署一个单向验证的Https服务。

1.3.1 证书准备,我们要生成Https需要的相关证书,这里使用java的keytool工具生成我们的相关证书,用什么工具不重要,只要能拿到证书就行。

           > 生成私钥证书库[注意命令中的路径名,如果你没有D盘记得修改路径]:

keytool -genkeypair -alias apache -keysize 2048 -keyalg RSA -validity 60 -keystore D:\apache.jks -storetype JKS -ext SAN=DNS:www.myApache.com

> 将证书库从keystore类型转成p12类型: keytool -importkeystore -srckeystore D:\apache.jks -destkeystore D:\apache.p12 -srcstoretype jks -deststoretype pkcs12 -alias apache

            > 从库中导出 私钥和证书给apache。

               如果提示没有OPENSSL这个命令,请下载OPENSSL。

              https://blog.csdn.net/sunhuansheng/article/details/82218678

              #####秘钥不加密,不要证书,只要私钥。

  openssl pkcs12 -in D:\apache.p12 -nodes -nocerts -out D:\apache.key

              #####不要私钥,导出证书链。

openssl pkcs12 -in D:\apache.p12 -out D:\apache.pem -nokeys

          > 从库中导出根证书 给浏览器安装

 keytool -export -alias apache -keystore D:\apache.jks -file D:\apache.cer

> apache.key和apache.pem是给Apache部署https使用,apache.cer是给客户端校验服务器身份时使用。

打开你的D盘,看到这些文件。

 

1.3.2 Apache准备,我们新建一个端口8888,让8888成为https服务。

> 在httpd.conf文件中 加上LISTEN 8888.

> 在httpd.conf中去掉httpd-vhosts.conf前面的注释,默认是有注释的:

> 在httpd-vhost.conf中加上这段虚拟机配置,它作用在ip=127.0.0.1,端口号为8888上面:

<VirtualHost 127.0.0.1:8888>

    ServerAdmin myAdmin@qq.com

    ServerName  www.myApache.com      

 SSLEngine On

SSLCertificateFile "D:/apache.pem"

SSLCertificateKeyFile "D:/apache.key"

 

</VirtualHost>

SSLEngine On表示开启HTTPS服务,

SSLCertificateFile是证书的公钥文件位置,SSLCertificateKeyFile是证书的私钥位置。

1.3.3 客户端准备,安装证书用来校验服务器,双击apache.cer,安装证书到 信赖的根证书。

一路点击Next,直到Finish。

 

1.3.4 验收成果,重启Apache, 然后关闭所有开着的浏览器,打开一个新的浏览器,

输入https://www.myApache.com:8888/,就可以发现https部署成功,可以看到我们漂亮的锁头。太棒了!你成功了!

这是chrome

这是IE:

 

1.4  在https单向的基础上,完成的Https双向的配置。就是客户端也必须有一个证书,提供给服务端校验,效果:

部署https双向认证后,当你再次访问https://www.myApache.com:8888时,会提示你没有客户端证书。

你必须在浏览器安装一个客户端证书,选择证书后,才能访问。

1.4.1 证书准备:这里验证客户端所需要的证书,我们使用上面生成的apache.pem,apache.pk12,

首先声明,服务端证书和客户端证书之间是没有半毛钱关系的,这里我是为了方便,直接使用了服务端证书 同时作为客户端证书,你也再可以生成一份新的证书作为客户端证书!

 

1.4.2 Apache配置,在上面的VirtualHost中,加上一段客户端认证的配置:

 

<VirtualHost 127.0.0.1:8888>

    ServerAdmin myAdmin@qq.com

    ServerName  www.myApache.com      

               SSLEngine On

SSLCertificateFile "D:/apache.pem"

SSLCertificateKeyFile "D:/apache.key"

 

SSLVerifyClient  require

SSLCACertificateFile "D:/apache.pem"

 

</VirtualHost>

          服务端Apahce通过SSLVerifyClient  true知道了要检验客户端身份,通过SSLCACertificateFile知道了服务端信赖的证书是哪些。

          1.4.3 客户端准备,客户端要带着证书去访问服务端,在浏览器中加入apache.pk12到个人证书中。

> 打开chrome浏览器:

> 导入我们的apache.pk12:

> 输入PK12文件的密码,之后一直点next,然后保存。

1.4.4 验收成果,重启Apache,关闭所有浏览器,重新输入https://www.myApache.com:8888 .你可以看到会弹出一个 客户端证书的选择,

选择证书后点击确定,就可以访问到了!

 

恭喜!使用Apache搭建https双向认证服务,你做到了!

 

渣科 用了很久的时间才基本搞明白什么是HTTPS,单向认证和双向认证,反向代理,以及Apache一些重要的命令,希望大家也不要操之过急。弄懂了一些基本知识之后才开始进行实际的操作配置,但还是遇到了很多的问题,坎坎坷坷,到最后终于配置成功,还是很开心的,过程中涉及到的一些知识如果大家没有明白,最好还是先去查一下,我的建议是,看完到不懂的再去官网看描述或者查看别的博客。

什么是https(这篇文章只是讲了单向的https): https://www.runoob.com/w3cnote/http-vs-https.html

什么是keytool:https://docs.oracle.com/javase/8/docs/technotes/tools/windows/keytool.html

Apache的命令:http://httpd.apache.org/docs/2.4/mod/directives.html

还有一个很好,值得思考的问题:https://www.v2ex.com/amp/t/411144

 

//加油吧,渣科。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值