Windows上为Apache配置HTTPS

1. 安装OpenSSL:javascript

Windows下安装的wamp64中的Apache内置的OpenSSL是32位的,所以若是服务器主机以前没有额外安装过OpenSSL的话,须要先安装64位OpenSSL,安装地址以下:php

http://slproweb.com/products/Win32OpenSSL.htmlhtml

选择Win64 OpenSSL最新版本号的Light便可,安装时有一步须要勾选"Copy DLLs to Windows System directory"java

参考:https://stackoverflow.com/questions/40017498/cannot-load-modules-mod-ssl-so-into-servermysql

注:本节能够解决错误日志中出现的问题:Cannot load modules/mod_ssl.so into server: The operating system cannot run %1.web

2. 证书的申请或生成:sql

事实上SSL证书是能够本身给本身颁发的,若是只是测试HTTPS下的一些问题,彻底能够本身自建Root CA。具体可参考:apache

http://www.barretlee.com/blog/2016/04/24/detail-about-ca-and-certs/服务器

可是阿里云有免费证书,所以上面的东西我也没试过。测试

以阿里云为例,经过域名能够免费申请到证书,包含四个文件:

并有以下安装指导:

 

 

3. 安装证书与常见问题:

配置conf/httpd.conf:

找到以下行并去掉#

#LoadModule ssl_module modules/mod_ssl.so

# Include conf/extra/httpd-ssl.conf

另外,要确认如下两行至少有一行是去掉#的:

LoadModule socache_dbm_module modules/mod_socache_dbm.so

LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

 

配置conf/extra/httpd-ssl.conf

须要修改的关键行:

Listen 443

SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4

SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4
 
SSLHonorCipherOrder on
 
SSLProtocol TLSv1 +TLSv1.1 +TLSv1.2

SSLProxyProtocol all -SSLv3
 
SSLPassPhraseDialog  builtin
 
SSLSessionCache  dbm:d:/wamp64/bin/apache/apache2.4.23/logs/ssl_scache"

#SSLSessionCache "shmcb:d:/wamp64/bin/apache/apache2.4.23/logs/ssl_scache(512000)"

SSLSessionCacheTimeout  300
 
<VirtualHost _default_:443>
 
DocumentRoot "d:/wamp64/www"
ServerName tryservice.*******.com:443
#ServerAdmin admin@tryservice.*******.com
ErrorLog "d:/wamp64/logs/apache/apache_error.log"
TransferLog "d:/wamp64/logs/apache/access.log"
 
SSLEngine on
 
SSLCertificateFile "d:/wamp64/cert/tryservice/public.pem"
SSLCertificateKeyFile "d:/wamp64/cert/tryservice/214************.key"
SSLCertificateChainFile "d:/wamp64/cert/tryservice/chain.pem"

<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
</FilesMatch>
##
<Directory "d:/wamp64/bin/apache/apache2.4.23/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>
##
 
BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0
 
CustomLog "d:/wamp64/logs/apache/ssl_request.log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

</VirtualHost>                                 

 

  

注意: 

SSLSessionCache 两者取一便可,与httpd.conf中一致,若是一个致使重启Apache失败,能够试试另外一个;

涉及到日志位置、证书位置,尽可能使用物理路径(要加引号),使用相对位置很容易错误;

DocumentRoot, ServerName, ServerAdmin,通常来讲应该与httpd.conf一致,可是要灵活处理,与证书的域名以及该域名对应网站的根目录对应起来。

4. 确认80端口与443端口没有被占用:

命令行输入命令:

netstat -aon|findstr "80"

获得输出:TCP    127.0.0.1:80        0.0.0.0:0              LISTENING      2448

说明80端口被进程号为2448的进程占用。同理可找到443是否被进程占用。

输入命令:

tasklist|findstr "2448"

能够查看该进程的具体信息,若是太多找不到,能够去任务管理器的进程选项卡找到该进程。若被通常进程占用可直接结束进程接触占用。如果SYSTEM占用,请参考如下解决方式。

80端口若是被SYSTEM占用,通常来讲缘由是开启了IIS服务,把默认网站删除或者更改端口便可解除占用;443端口被SYSTEM占用,打开任务管理器,在服务选项卡中找到RemoteAccess,中止服务便可解除占用(注意等正常启动Apache后再手动启动服务)。

 

 

注:本节能够解决错误日志中出现问题:

(OS 10013)以一种访问权限不容许的方式作了一个访问套接字的尝试。 : AH00072: make_sock: could not bind to address 127.0.0.1:80

(OS 10013)以一种访问权限不容许的方式作了一个访问套接字的尝试。 : AH00072: make_sock: could not bind to address 127.0.0.1:443

 

5. 重启Apache:

此时重启Apache,通常来讲能够正常启动了。若是仍然没法启动,在任务管理器中的服务选项卡中找到如下两个服务:wampmysqld64, wampapache64

 

 

如果wampmysqld64没有运行,通常来讲是由于服务器的MySQL服务在运行占用,在服务选项卡中找到MySQL服务中止,再重启Apache便可;

如果wampapache64没有运行,说明配置文件仍然有问题,首先中止Apache服务,在目录 ” D:\wamp64\bin\apache\apache2.4.23\bin” 中打开命令行,运行httpd命令,便可查看系统错误日志,针对问题解决。

 

6. 虚拟服务器的SSL配置:

配置conf/extra/httpd-vhosts.conf

<VirtualHost *:80>
ServerName tryservice.*******.com
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://127.0.0.1:4050/
ProxyPassReverse / http://127.0.0.1:4050/
</VirtualHost>
 
<VirtualHost *:443>
ServerName tryservice.*******.com
SSLEngine on
SSLProxyEngine on
SSLCertificateFile "d:/wamp64/cert/tryservice/public.pem"
SSLCertificateKeyFile "d:/wamp64/cert/tryservice/214************.key"
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://127.0.0.1:4050/
ProxyPassReverse / http://127.0.0.1:4050/
</VirtualHost>

  


虚拟服务器的SSL配置,要根据上面的*80加上后面的*443,一样注意域名与其证书一一对应。 

 

7. 在同一服务器上为多个域名部署不一样的证书:

配置conf/extra/httpd-ssl.conf

Listen 443

##不须要更改
 
<VirtualHost _default_:443>

##不须要更改

</VirtualHost>                                 
 
#须要增长的域名配置:
<VirtualHost *:443>
 
#   General setup for the virtual host
DocumentRoot "d:/wamp64/www2"
ServerName trydoctor.*******.com:443
#ServerAdmin admin@tryservice.*******.com
ErrorLog "d:/wamp64/logs/apache/apache_error.log"
TransferLog "d:/wamp64/logs/apache/access.log"
 
SSLEngine on
 
SSLCertificateFile "d:/wamp64/cert/trydoctor/public.pem"
SSLCertificateKeyFile "d:/wamp64/cert/trydoctor/214************.key"
SSLCertificateChainFile "d:/wamp64/cert/trydoctor/chain.pem"
 
<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
</FilesMatch>
<Directory "d:/wamp64/bin/apache/apache2.4.23/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>
 
BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0
 
CustomLog "d:/wamp64/logs/apache/ssl_request.log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
 
</VirtualHost>                                 
相关文章
相关标签/搜索