windows系统下,基于Apache的SSL配置

2020-12-22  本文已影响0人  公输昊少

系统环境及前置条件

windows server 2012 R2 + Wampserver64
公网IP,开放80端口
要配置证书的域名解析指向本服务器的公网IP
在Apache中完成VirtualHost的配置,保证能够通过域名正确访问到我们的Web服务。

申请证书

我主要是按照下面链接中的教程来申请免费证书:
https://certbot.eff.org/lets-encrypt/windows-apache
教程中的1-3可以看一下,然后根据“4.Installation instructions (default)”来安装cerbot。安装完成后,以管理员方式运行该软件,会为我们打开命令行窗口,然后按照指引来申请证书即可。
如果我们在申请证书的过程中需要保持服务运行,那么采用如下命令:

certbot certonly --webroot

(未测试)如果申请过程中不需要保持服务运行,可以采用如下命令:

certbot certonly --standlone

然后根据提示输入响应的信息即可。

接下来可能会提示输入其他信息,根据实际情况输入即可。所有信息输入完成后,看到如下信息,则说明我们申请完成。以下信息中给出了证书文件的存放路径,我们可以记下来

Congratulations! Your certificate and chain have been saved at:
C:\Certbot\live\your.domain\fullchain.pem
Your key file has been saved at:
C:\Certbot\live\your.domain\privkey.pem

注:这里给的路径指向的是一个快捷方式,我们可以从快捷方式的属性中看到证书文件的真实路径。

配置SSL

这里需要我们修改Apache的配置文件了,需要注意的是,我们在修改完配置文件后,一定要检查一下我们修改后的配置文件语法是否合法,否则Apache无法正常启动。如果Apache的bin文件夹已经加入了环境变了,那么我们直接在命令行输入如下命令即可:

httpd.exe -t

如果语法正确,会提示Syntax OK,否则会给出错误信息,我们根据提示的信息修改即可。
如果如果上述命令无法正确执行,可能是Apache的bin文件夹没有加入环境变量,我们在命令行进入该文件夹,然后再运行该命令,或者直接采用绝对路径运行该命令即可。

修改Apache配置以激活SSL

这部分主要参考了stackoverflow上Installation SSL in wamp server: Error in httpd-ssl.conf这一问题目前投票最高的答案“How to Configure WAMPServer to use HTTPS SSL”的“Step 5: Configure Apache to activate SSL”。
编辑httpd.conf文件,取消如下几行的注释:

LoadModule authn_socache_module modules/mod_authn_socache.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

另外就是要取消以下代码的注释:

Include conf/extra/httpd-ssl.conf

其中conf/extra/httpd-ssl.conf就是我们配置SSL的文件。
我们还需要将上面的这行代码移动一下,移动后结果如下:

<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

# Secure (SSL/TLS) connections
Include conf/extra/httpd-ssl.conf

在这里,我没有直接采用该配置文件,而是新建了一个配置文件,命名为httpd-ssl_mydomain.conf,因而我的配置文件就改成了:

<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

# Secure (SSL/TLS) connections
Include conf/extra/httpd-ssl_mydomain.conf

改完配置后,测试一下,看看有没有语法错误,没问题的话,进行接下来的操作。

配置SSL

我们打开httpd-ssl_mydomain.conf文件,填入如下信息:

Listen 443

SSLPassPhraseDialog  builtin

SSLSessionCache        "shmcb:C:/path/to/webroot/logs/ssl_scache(512000)"
SSLSessionCacheTimeout  300

<VirtualHost *:443>
    ServerAdmin hongsuwang@fas.harvard.edu
    DocumentRoot "C:/path/to/webroot"
    ServerAlias your.domain(这里就是填上域名)
    ErrorLog "C:/path/to/webroot/logs/error.log"
    CustomLog "C:/path/to/webroot/logs/access.log" combined

    #SSL
    SSLEngine On
    SSLCertificateFile C:/Certbot/live/your.domain/fullchain.pem
    SSLCertificateKeyFile C:/Certbot/live/your.domain/privkey.pem
    SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
    SSLProtocol All -SSLv2 -SSLv3
    SSLHonorCipherOrder On

    #PHP
    # Include conf/php/54.conf

    #PATH
    <Directory "C:/path/to/webroot">
    Options FollowSymLinks ExecCGI
    AllowOverride All
    Require all granted
    DirectoryIndex index.php default.php index.html index.htm default.html default.htm  
    </Directory>
    
</VirtualHost>                                

修改完,测试语法,没问题的话就可以重启Apache了,重启之后应该就可以通过https访问Web服务了。
配置文件中的443是https的默认端口,但是我们的服务器好像有限制,通过该端口无法正常访问,我们改成81端口就没问题了,只是需要在域名后面加上端口号。

上一篇下一篇

猜你喜欢

热点阅读