Windows平台下Apache SSL/TLS(https)的配置方法

时间:2022-10-05 17:18:38

首先需要说明的是我所用的平台是Windows server 2008 + Apache 2.4。
所谓TLS1.0,其实就是SSL3.0版本,所以我们要做的工作,就是对Apache进行SSL配置。

准备工作:
下载并安装Apache windows版本带openssl的安装包。

Apache官网只提供源码,用户可以自行编译。我在这里推荐使用xampp这类在windows平台有更加有好的操作界面的控制平台,其中内附了apache,mysql等常用的服务器必备软件,一键安装省去了调试和配置的麻烦。

安装好apache后,打开apache安装目录,我这里以C:\xampp\apache为例。打开目录下的bin目录,确认其中是否有openssl.exe,如果有,说明此apache是包含openssl的,无需再装openssl。在这里我要多说一句,根据网上的资料来看,现在还没有独立安装apache后再安装openssl并使其协调工作的完美解决方案,所以大家一定要在安装apache时就确认其已经包含了openssl。

再开打C:\xampp\apache\conf目录,确认其中有openssl.cnf文件,这是openssl的配置文件。如果没有可以去百度自行下载并拷贝到该目录。

准备工作做好之后,下面开始正式配置工作。

步骤一:创建自签凭证
打开命令提示符(cmd),以管理员身份运行。
转到apache的bin目录下
cd C:\xampp\apache\bin
而后指定ssl配置文件目录
set OPENSSL_CONF=C:\xampp\apache\conf\openssl.cnf
参照下面的格式创建证书
openssl req -config openssl.cnf -new -out qwb.csr -keyout qwb.pem
其中,qwb.csr和qwb.pem是我自己定义的名字,你可以定义任何你喜欢的名字,如xiaoming.csr和xiaoming.pem
回车确认之后,会弹出一些问题,一一回答就好。
下面是个示例,首先会让设定一个密码,之后再输入一遍以确认密码,这个密码设定好要记住。
之后的Country Name等内容,自己看着填,Common Name这里提示可以填全域名(FQDN:以http://开头的域名全称)或你的名字,因为我是在本机测试,所以只填了http://localhost
再后面的extra问题就自己看着随便填了。
Windows平台下Apache SSL/TLS(https)的配置方法

待这些完成,可以看到bin文件夹下生成两个文件qwb.csr和qwb.pem。
之后我们来生成供apache使用的密钥文件
输入命令
openssl rsa -in qwb.pem -out qwb.key
此时会被要求输入之前设定的密码,输完确认后,在bin目录下会生成qwb.key文件。
最后生成一个供apache使用的数字证书
openssl x509 -in qwb.csr -out qwb.cert -req -signkey qwb.key -days 365
此步将会在bin目录下生成qwb.cert文件,
至此已经生成了所有我们需要用到的文件。

步骤二:开启Apache的SSL功能
打开httpd.conf,我的在C:\xampp\apache\conf\目录下。
移去下面两行前面的注释,并保存

  • #LoadModule ssl_module modules/mod_ssl.so
  • #Include conf/extra/httpd-ssl.conf

打开httpd-ssl.conf文件,我的在C:\xampp\apache\conf\extra\目录下。
将标签下的DocumentRoot,ServerName等设定为自己需要的内容,此处不再赘述,若有疑问,请参考Apache虚拟主机的配置方法。
重启apache,访问https://localhost, 完美打开~

第三步:配置虚拟主机,使http与https都可以访问站点
完成上面的步骤后,https是可以访问了,但我们发现,http的访问已经打不开了。
现在我们配置虚拟主机以使两种方式都可以访问站点。
我在这里贴出配置文件的格式,具体如何配置apache虚拟主机,不是本文讨论的重点,就不过多赘述了。

<VirtualHost *:81>
ServerAdmin webmaster@localhost
DocumentRoot "C:/xampp/htdocs"
ServerName localhost:81
ErrorLog "logs/dummy-host2.example.com-error.log"
CustomLog "logs/dummy-host2.example.com-access.log" common
</VirtualHost>

<VirtualHost *:443>
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "C:/xampp/apache/bin/qwb.cert"
SSLCertificateKeyFile "C:/xampp/apache/bin/qwb.key"
ServerAdmin webmaster@localhost
DocumentRoot "C:/xampp/htdocs"
ServerName localhost:443
ErrorLog "logs/dummy-host2.example.com-error.log"
CustomLog "logs/dummy-host2.example.com-access.log" common
</VirtualHost>

保存并重启apache,看看是否完成了我们的目标~