Windows上为Apache配置HTTPS

 
转 https://www.cnblogs.com/tianzijiaozi/p/7582671.html
 

1. 安装OpenSSL:

Windows下安装的wamp64中的Apache内置的OpenSSL是32位的,因此如果服务器主机之前没有额外安装过OpenSSL的话,需要先安装64位OpenSSL,安装地址如下:

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

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

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

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

2. 证书的申请或生成:

事实上SSL证书是可以自己给自己颁发的,如果只是测试HTTPS下的一些问题,完全可以自己自建Root CA。具体可参考:

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

需要修改的关键行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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>                                

  

Windows上为Apache配置HTTPS的更多相关文章

  1. PHP 1:在Windows上安装和配置PHP,Apache和My SQL

    原文:PHP 1:在Windows上安装和配置PHP,Apache和My SQL 如果你Google一把类似的主题,你会发现相关的文章可以塞满你的硬盘.在这里之所以把它再次拿出来,目的是想记录我作为一 ...

  2. Apache配置HTTPS的过程小记

    一.HTTPS的summery,综述,它的基本原理,扫肓. http://www.codeceo.com/article/https-knowledge.html 读过后,就明白https怎么加密的, ...

  3. Apache配置HTTPS功能

    apache配置https 一.yum 安装openssl和openssl-devel,httpd-devel 二.生成证书(也可以从公司的证书颁发机构获取): #建立服务器密钥 openssl ge ...

  4. windows上安装apache python mod_python

    综述:   windows上安装apache python mod_python的例子.教程甚至图解都不少:但作为新手还是会出错,而且一时无法快速排解. 在此笔者将根据自己的实践经验,给出几个需要注意 ...

  5. Linux下Apache配置HTTPS功能

    Apache配置HTTPS功能  转 https://www.cnblogs.com/liaojiafa/p/6028816.html 一.yum 安装openssl和openssl-devel,ht ...

  6. Windows上PostgreSQL安装配置教程

    Windows上PostgreSQL安装配置教程 这篇文章主要为大家详细介绍了Windows上PostgreSQL安装配置教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 PostgreSQL的 ...

  7. Apache配置https

    Apache配置https 之前一直用的是Tomcat,今天突然接到任务要给Apache配置https证书,因为小程序要用.下面把过程列出来以备后续查看. 1.首先你得有ssl证书,没有的可以去购买, ...

  8. windows环境利用apache 配置虚拟主机

    windows环境利用apache 配置虚拟主机 1.改动http.host #LoadModule vhost_alias_module modules/mod_vhost_alias.so #In ...

  9. apache配置https协议

    安装openssl有两种方式,第一种直接下载安装包,装上就可运行:第二种可以自己下载源码,自己编译.下面对两种方式均进行详细描述. 一.下载和安装openss 方法一:直接使用openssl安装包 W ...

随机推荐

  1. Linux-GitLab安装及汉化

    gitlab 安装及汉化 GitLab简介: GitLab是一个用于仓库管理系统的开源项目.使用Git作为代码管理工具,并在此基础上搭建起来的Web服务.可通过Web界面进行访问公开的或者私人项目.它 ...

  2. python实现简单的百度云自动下载

    最近女同让我帮助从百度云下载200个文件,给了我连接和提取码,这种重复的工作不适合人做写了一个简单的爬虫 #coding=utf-8 ''' 自动填写提取码下载百度云资源 方法: for 读取文件中的 ...

  3. 二.django项目环境搭建

    Ⅰ.web框架介绍 1.socket 服务端 1)客户端(手机中各种app.浏览器)是用来与服务端(网站的服务器程序)进行交互的 2)服务端类似发电厂,客户端类似电器,socket类似插座,互联网的数 ...

  4. Linux 下 boost 库的安装,配置个人环境变量

    部分引自: https://blog.csdn.net/this_capslock/article/details/47170313 1. 下载boost安装包并解压缩到http://www.boos ...

  5. Node.js模块化教程

    Node.js模块化教程 下载安装node.js 创建项目结构 |-modules |-module1.js |-module2.js |-module3.js|-app.js|-package.js ...

  6. Pandas系列(五)-分类数据处理

    内容目录 1. 创建对象 2. 常用操作 3. 内存使用量的陷阱 一.创建对象 1.基本概念:分类数据直白来说就是取值为有限的,或者说是固定数量的可能值.例如:性别.血型. 2.创建分类数据:这里以血 ...

  7. Python list和 np.Array 的转换关系

    一.List转String 1.str list转 string a_list = ["h","e","l","l",& ...

  8. 分布式监控系统开发【day38】:报警自动升级代码解析及测试(八)

    一.报警自动升级代码解析 发送邮件代码 def action_email(self,action_obj,action_operation_obj,host_id,trigger_data): ''' ...

  9. Docker:私有仓库registry [十一]

    一.运行docker私有仓库 安装registry docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregi ...

  10. linux,pthread(转)

    互斥量.条件变量与pthread_cond_wait()函数的使用,详解(二)   1.Linux“线程” 进程与线程之间是有区别的,不过linux内核只提供了轻量进程的支持,未实现线程模型.Linu ...