如何配置 WAMPServer 以使用 HTTPS SSL
这不是一个简单的过程。希望本教程能让 SSL 为您工作。但是,一旦它工作就正确配置它完全取决于您。
所有走过这条路的人的补充阅读
行,
我在本教程的基础上创建了一个名为 www.wamphelpers.dev 的站点,因此无论您在何处看到该名称,都将其更改为您要保护的站点名称。
我首先在 \wamp\www\wamphelpers 中创建了一个不安全的站点
为该站点添加了一个虚拟主机,在\wamp\bin\apache\apache{version}\conf\extra\httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "c:/wamp/www"
ServerName localhost
ServerAlias localhost
<Directory "c:/wamp/www">
AllowOverride All
Require local
</Directory>
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "c:/wamp/www/wamphelpers"
ServerName wamphelpers.dev
ServerAlias www.wamphelpers.dev
<Directory "c:/wamp/www/wamphelpers">
AllowOverride All
Require local
</Directory>
</VirtualHost>
将其域名添加到 C:\windows\system32\drivers\etc\hosts
某些病毒检查程序会阻止对 HOSTS 文件的访问,因此您可能需要禁用病毒检查程序,或将其配置为暂时不阻止 hosts 文件。
127.0.0.1 wamphelpers.dev www.wamphelpers.dev
::1 wamphelpers.dev www.wamphelpers.dev
现在从使用“以管理员身份运行”启动的命令窗口重新启动 dnscache,如下所示
net stop dnscache
net start dnscache
然后在 \wamp\www\wamphelpers\index.php 中创建了一个简单的脚本
<?php
echo 'Hello, this is the WAMPHELPERS.DEV site homepage';
?>
现在激活您定义的新虚拟主机,编辑\wamp\bin\apache\apache{version}\conf\httpd.conf
并找到这一行
# Virtual hosts
#Include conf/extra/httpd-vhosts.conf
并像这样删除#
评论字符
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
保存文件。
现在重新启动 Apache 并确保您的简单不安全的虚拟托管站点在继续之前工作。
openssl 工具包。
openssl.exe、ssleay32.dll 和 libeay32.dll 随附并位于 C:\wamp\bin\apache\apachex.yz\bin 文件夹中,这应该是您创建自签名证书所需的全部内容!
但是:这些对我安装的任何 Apache 版本都不起作用。我总是收到此错误消息。
序号的变化取决于我所在的 apache 版本文件夹。
如果您收到此错误,请不要担心这是您需要做的。
安装最新版本的 OPENSSL TOOLKIT
这可以从这里获得
注意:暂时不要使用 V1.1 版本,PHP 团队还没有使用这些新链接编译 PHP,所以坚持使用 V1.0。?版本,直到他们这样做。
选择“Win32 OpenSSLv xxx Light”或“Win64 OpenSSLv xxx Light”的最新版本以匹配您安装的 WAMPServer 版本,因为这就是您所需要的。
这将下载一个 .exe 文件,您可以运行该文件来安装此工具包。
它会问以下问题,我建议你这样回答,这样你就不会在 C:\windows\system32 中安装一些东西。毕竟这是一个工具包,它经常发生合理的变化。最好将这些东西分开,而不是使它们成为全局系统。
一旦安装(到您在安装中指定的任何文件夹),您应该准备好开始生成密钥和证书的过程!
生成密钥和证书。
第 1 步:生成 RSA 私钥
首先,我们需要为自己创建一个证书。正常(付费)过程是创建您的证书,然后将其传递给签名机构。这就是为什么要花钱,因为他们必须做尽职调查,以检查您是否是您所说的人,以及您将在其上使用证书的网站是否真实且合法。
openssl 工具包用于生成 RSA 私钥和 CSR(证书签名请求)以用于我们的证书。第一步是创建您的 RSA 私钥。此密钥是一个 1024 位 RSA 密钥,它使用 Triple-DES 加密并以 PEM 格式存储,因此可以作为 ASCII 文本读取。
使用 [b]以管理员身份运行 [/b] 将目录更改为您在上面安装 OpenSSL 工具包的位置打开命令窗口(Dos 框)。就我而言,这是
CD c:\apps\OpenSSL-Win32\bin
为要放入的输出创建一个文件夹(以保持 bin 文件夹整洁)我使用网站
md website
现在输入这个命令:
openssl genrsa -out website\server.key 2048
这应该在网站文件夹中创建了一个名为 server.key 的文件,没有密码密钥,请检查它是否存在。
第 2 步:生成 CSR(证书签名请求)
在生成 CSR 期间,系统会提示您输入几条信息。这些是证书的 X.509 属性。提示之一将是“通用名称(例如服务器 FQDN 或您的名称)[]:”。
使用受 SSL 保护的服务器的完全限定域名填写此字段很重要。
所以如果要保护的网站是https://www.wamphelpers.dev
,那么www.wampheplers.dev
在这个提示符下输入。我照wamphelper.dev
原样ServerName
使用ServerName wamphelpers.dev
不要在问题中输入任何内容:挑战密码 []: ] 只需按 Enter。如果您在使用 SSL 配置启动 Apache 时在此处输入密码,则 Apache 将无法启动,并会给出以下错误消息:-
[错误] Init:Win32 不支持内置 SSLPassPhraseDialog
基本上,如果您确实输入了密码,Apache 应该在每次启动时向您挑战该密码。这显然不会让你的生活变得更轻松,但主要是在 Windows 上它实际上不起作用,并且会导致 Apache 在尝试询问密码时崩溃,并出现上述错误。
生成 CSR 的命令如下:
openssl req -new -key website\server.key -out website\server.csr
Example question and answers:
Country Name (2 letter code) [AU]:GB
State or Province Name (full name) [Some-State]: Hampshire
Locality Name (eg, city) []: Portsmouth
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Wamp Helpers Ltd
Organizational Unit Name (eg, section) []: Information Technology
Common Name (e.g. server FQDN or YOUR name) []: wamphelpers.dev
Email Address []: me@wamphelpers.dev
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: ( leave blank just hit the enter key )
An optional company name []: ( leave blank just hit the enter key )
第 3 步:生成自签名证书
此时您将需要生成一个自签名证书,因为您不打算让 CA 签署您的证书,或者您希望在 CA 签署您的证书时测试您的新 SSL 实施。
预警告
此证书将在客户端浏览器中生成错误,表明签名证书颁发机构未知且不受信任。这是不可避免的,因为我们自己在签署证书,但是信任网络当然不知道我们是谁。
请参阅本文档后面的示例,展示如何告诉您的浏览器您确实信任此证书
openssl x509 -req -days 365 -in website\server.csr -signkey website\server.key -out website\server.crt
Example output:
Loading 'screen' into random state - done
Signature ok
subject=/C=GB/ST=Hampshire/L=Portsmouth/O=WampHelpers Ltd/OU=Information Technology/CN=www.wamphelpers.dev/emailAddress=riggsfolly@wamphelpers.dev
Getting Private key
第 4 步:安装私钥和证书
在您使用的 Apache 版本下创建这 2 个目录。
md c:\wamp\bin\apache\apachex.y.z\conf\ssl.key
md c:\wamp\bin\apache\apachex.y.z\conf\ssl.crt
并将我们刚刚生成的文件复制到它们中,如下所示:
copy website\server.crt c:\wamp\bin\apache\apachex.y.z\conf\ssl.crt
copy website\server.key c:\wamp\bin\apache\apachex.y.z\conf\ssl.key
第 5 步:配置 Apache 以激活 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
然后在这个块之后移动那条线....像这样
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
# Secure (SSL/TLS) connections
Include conf/extra/httpd-ssl.conf
第 6 步:配置 PHP 以激活 SSL
编辑您的 php.ini(使用 wampmanager 菜单编辑正确的菜单)
删除评论';' 从这条线
extension=php_openssl.dll
第 7 步:配置您的安全站点虚拟主机
是的,对于所有虚拟主机的反对者来说,现在你无法避免这个过程。
编辑\wamp\bin\apache\apachex.y.z\conf\extra\httpd-ssl.conf
该文件由 Apache 发布并包含一些默认文件位置。我们可以保留该文件的大部分内容,但我们需要在此处配置虚拟主机以匹配我们的实际站点位置和其他一些内容,以便:
找到这些行
DocumentRoot "c:/Apache2/htdocs"
ServerName www.example.com:443
ServerAdmin admin@example.com
ErrorLog "c:/Apache2/logs/error.log"
TransferLog "c:/Apache2/logs/access.log"
并将它们更改为
DocumentRoot "c:/wamp/www/wamphelpers"
ServerName wamphelpers.dev:443
ErrorLog "c:/wamp/logs/ssl_error.log"
TransferLog "c:/wamp/logs/ssl_access.log"
寻找
SSLCertificateFile "c:/Apache2/conf/server.crt"
并更改为
SSLCertificateFile "c:/wamp/bin/apache/apachex.y.x/conf/ssl.crt/server.crt"
寻找
SSLCertificateKeyFile "c:/Apache2/conf/server.key"
并更改为
SSLCertificateKeyFile "c:/wamp/bin/apache/apachex.y.x/conf/ssl.key/server.key"
寻找
<Directory "c:/Apache2/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
并更改为
Apache 2.2 语法
<Directory "c:/wamp/www/wamphelpers">
SSLOptions +StdEnvVars
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order Deny,Allow
Deny from all
Allow from 127.0.0.1 localhost ::1
</Directory>
Apache 2.4 语法
<Directory "c:/wamp/www/wamphelpers">
SSLOptions +StdEnvVars
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require local
</Directory>
寻找
SSLSessionCache "shmcb:c:/Apache2/logs/ssl_scache(512000)"
SSLSessionCacheTimeout 300
并将其更改为
SSLSessionCache "shmcb:c:/wamp/logs/ssl_scache(512000)"
SSLSessionCacheTimeout 300
寻找
CustomLog "c:/Apache24/logs/ssl_request.log" \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
并更改为
CustomLog "c:/wamp/logs/ssl_request.log" \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
基本上查看 conf 文件和任何未注释掉但引用文件或文件夹的命令应更改为引用 WAMPServer 文件夹结构而不是“C:/Apache2 ....”
现在确保我们更改的所有这些文件都已保存,并使用 wampmanager 菜单重新启动 Apache。
首先测试未受保护的站点是否仍在工作。
然后尝试通过在域名前面添加“https://”来使用您的新受保护站点,即https://www.wamphelpers.dev
当然不要使用单引号。
如果 Apache 没有重新启动,您可能拼写错误。像这样测试配置:-
打开命令窗口
cd \wamp\bin\apache\apachex.y.z\bin
httpd -t
这将解析所有配置文件,并应为您提供文件名和发现错误的行号。
修复它并重试。
首次访问您的站点将生成一个类似这样的消息页面。这是使用FireFox,其他的会略有不同,但概念是一样的。
这是因为您的证书没有由受信任的权威机构签署,不要惊慌,这是应该发生的。
单击“我了解风险”,这将显示一个按钮,显示“添加例外” 在检查证书站点详细信息实际上是您的之后,按添加例外按钮,除非您清除,否则您将不会再次看到此消息例外列表。
重要提示
从 Apache v2.2.12 和 OpenSSL v0.9.8j 开始,现在可以为每个 Apache 实例保护多个站点。本教程不涉及该过程。有关更多详细信息,请参见此处:
这里
和这里
和这里
就像我在顶部所说的那样,现在您需要对 SSL 配置中的所有可用选项进行一些研究,并按照您的意愿工作,而不是使用默认设置。