前言:
踩坑了两天! 主要问题在于httpd-ssl.conf.
实际需求为:正式环境需开启Https访问,故将本地环境 Wamp 64( Apache + MySQL + PHP74 + Windows) 环境同步 wss:// 和测试其他逻辑代码。
自签证书工具
需下载对应wamp版本的OpenSSL证书版本
下载地址: openssl
选择 Light 版本 / 对应操作系统即可
安装完毕目录:C:\Program Files\OpenSSL-Win64\bin (后续以此为例)
创建必要证书
生成无密码版本
- 进入OpenSSL bin目录
cd C:\Program Files\OpenSSL-Win64\bin
- 创建证书
此时bin目录新增 server.key 文件。
openssl genrsa -des3 -out server.key 2048
openssl rsa -in server.key -out server.key
- 进入Apache的Conf目录,新增文件: openssl.cnf
此项很多教程没提及
以此目录为案例:C:\wamp64\bin\apache\apache2.4.46\conf ,新建 openssl.cnf 文件
域名请替换成你自己测试环境要用的, 否则将导致可能无法生效,其他无所谓
[ req ]
default_bits = 2048
default_md = sha256
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[ req_distinguished_name ]
C = CN # 国家代码 (中国为CN)
ST = State # 省/州
L = City # 城市
O = Organization # 组织名称
OU = Organizational Unit # 组织单位名称
CN = www.域名.com # 通用名称 (例如,域名)
[ v3_req ]
subjectAltName = @alt_names
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
[ alt_names ]
DNS.1 = www.域名.com
DNS.2 = 域名.com
- 生成无密码版本
引入前面新建的 openssl.cnf 文件
openssl req -new -x509 -key server.key -out ca.crt -days 3650 -config C:\wamp64\bin\apache\apache2.4.46\conf\openssl.cnf
- 生成server.csr文件
openssl req -new -key server.key -out server.csr -config C:\wamp64\bin\apache\apache2.4.46\conf\openssl.cnf
- 生成server.csr文件
openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey server.key -CAcreateserial -out server.crt
- 移动证书至指定目录
server.crt
server.key
剪切到C:\wamp64\bin\apache\apache2.4.46\conf 位置,
是的,只需要两个。
配置:httpd.conf
编辑: C:\wamp64\bin\apache\apache2.4.51\conf\httpd.conf 文件
前面的#号删除
Include conf/extra/httpd-ssl.conf
LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
配置:httpd-ssl.conf
这里是踩坑最多的地方
一遍一遍配置了,以为是路径引入问题,以为host问题等等,于是我刨了边源码,找到问题出在 Listen 443 这个首行也是最容易忽略的!
先说一般配置过程:同样的 配置项 - 替换你的东东
DocumentRoot "${INSTALL_DIR}/www"
ServerName www.你的域名.com:443
SSLCertificateKeyFile "C:\wamp64\bin\apache\apache2.4.46\conf\server.key"
SSLCertificateFile "C:\wamp64\bin\apache\apache2.4.46\conf\server.crt"
是的,只有4个地方。
但始终我一直重启Wamp服务都到黄色警告状态,给我都看麻了。
解决思路:
确保虚拟主机配置正确,可以尝试将配置文件中多余的部分注释掉,最小化配置以排除问题。例如清空httpd-ssl.conf 文件,只保留:
<VirtualHost *:443>
DocumentRoot "网站目录"
ServerName www.你的域名.com
SSLEngine on
SSLCertificateKeyFile "C:\wamp64\bin\apache\apache2.4.46\conf\server.key"
SSLCertificateFile "C:\wamp64\bin\apache\apache2.4.46\conf\server.crt"
</VirtualHost>
排查着不对劲,到最后确定就是 httpd-ssl.conf 文件的问题,我一行一行删除,看到底哪里影响了,就是第一行我最信你了。。。 不显眼的 Listen 443
端口冲突
是我的其他服务占用端口
Windows命令:netstat -aon | findstr :443
查出: TCP [::]:443 [::]:0 LISTENING 7060
从netstat的结果来看,端口443已经被进程ID为7060的进程占用了。这意味着目前有一个服务正在监听443端口,这可能是导致Apache无法启动的原因。
再查: tasklist /FI “PID eq 7060”
查出: vmware-hostd.exe 7060 Services 0 55,504 K
端口443是由vmware-hostd.exe进程占用的。vmware-hostd.exe是VMware Workstation或其他VMware产品的相关进程,用于管理虚拟机和网络服务。这是导致Apache无法监听443端口的原因。
停止: net stop “VMware Host Agent”
wamp 它终于绿了 😭
配置:Virtual Host
先在本地host文件内新增你的域名: C:\Windows\System32\drivers\etc\hosts
再在 C:\wamp64\bin\apache\apache2.4.51\conf\extra\httpd-vhosts.conf 编辑你的虚拟端口
<VirtualHost *:443>
ServerName www.你的域名.com
ServerAlias www.你的域名.com
DocumentRoot "你的网站目录"
SSLEngine on
SSLCertificateKeyFile "C:\wamp64\bin\apache\apache2.4.46\conf\server.key"
SSLCertificateFile "C:\wamp64\bin\apache\apache2.4.46\conf\server.crt"
<Directory "你的网站目录">
Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride All
Require local
Require all granted
</Directory>
</VirtualHost>
end