18

我正在尝试在本地主机上设置 ssl 我已经遵循http://madurad.wordpress.com/2014/04/25/redirect-http-to-https-with-wamp-server/和许多其他但无法获得成功。我坚持使用 httpd-ssl.conf 的语法。当我设置

<Directory "c:/wamp/www/"> 
   Options Indexes FollowSymLinks  
   AllowOverride all 
   Require all granted 
   SSLOptions +StdEnvVars
</Directory>

我试过很多其他的,比如

<Directory "c:/wamp/www/"> 
   SSLOptions +StdEnvVars
</Directory>

什么问题无法得到....

4

7 回答 7

81

如何配置 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 中安装一些东西。毕竟这是一个工具包,它经常发生合理的变化。最好将这些东西分开,而不是使它们成为全局系统。

openssl 安装建议

一旦安装(到您在安装中指定的任何文件夹),您应该准备好开始生成密钥和证书的过程!


生成密钥和证书。

第 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 配置中的所有可用选项进行一些研究,并按照您的意愿工作,而不是使用默认设置。

于 2014-10-08T08:24:49.040 回答
5

有必要在 wampserver 2.5的文件httpd.conf中激活模块LoadModule socache_shmcb_module modules/mod_socache_shmcb.so 。如果不是 apache 抛出下一条消息:

AH00526:C:/wamp/bin/apache/apache2.4.9/conf/extra/httpd-ssl.conf 第 75 行的语法错误:SSLSessionCache:不支持“shmcb”会话缓存(已知名称:)。也许您需要加载适当的 socache 模块(mod_socache_shmcb?)。

于 2015-11-24T22:24:31.663 回答
3

如果你有这样的错误:

无法将模块/mod_ssl.so 加载到服务器中:找不到指定的模块。

  1. 您可能想尝试在 wamp 文件夹中搜索 libeay32.dll,您可能在 {wamp 文件夹}/bin/php/php{version 7}/ 中找到它

  2. 复制 libeay32.dll 和 ssleay32.dll 并将它们粘贴到 {wamp folder}/bin/apache/apache{version 2.x}/bin/ AND {wamp folder}/bin/php/php{verion 5.x}。确保备份您放置的任何内容。

  3. 运行 httpd -t 并测试语法

注意:我相信这是由于 wamp 3.0.6 的 apache openssl 部分中的错误。幸运的是,在 php7 文件夹中,这些 dll 与 apache 和 php5 兼容。

于 2016-09-18T14:51:13.317 回答
2

@RiggsFolly:您的教程中有一些小错误/错别字/添加。下面在 Windows 7 SP1 64 位上与 WAMPServer 2.5 64 位(Apache 2.4.9 和 PHP 5.5.12)结合使用:

-httpd-vhosts.conf 位于 extra/httpd-vhosts.conf

-当您尝试编辑主机文件时,请务必禁用任何病毒扫描程序。其中一些阻止访问主机文件。

- 确保在编辑主机文件时以管理员身份打开文本编辑器,否则尝试保存时会出错。

- 不要忘记删除主机行开头的#(如果有)

- 如果您使用 WAMPServer 64 位,请务必下载 64 位版本的 OpenSSL

-步骤 openssl genrsa -out website\server.key 2048 创建 server.key 文件而不是 privkey.pem!

-file \wamp\bin\apache\apachex.yz\conf\httpd-ssl.conf 位于 \wamp\bin\apache\apachex.yz\conf\extra\httpd-ssl.conf (可能这取决于 WAMPServer版本)

- 我必须为 http (80->8080) 和 https(443->444) 使用不同的端口,因为我认为 Skype 使用了这些端口。当您使用不同的端口时,请务必在本教程中看到 80 或 443 的任何地方使用这些端口

-我还必须启用 socache_shmcb_module。“httpd -t”也提到了这一点。

于 2015-02-25T09:58:13.030 回答
1

@RiggsFolly:可以很容易地生成带有密钥的自签名证书,例如在这里... http://www.selfsignedcertificate.com/,所以我可以从第 4 步开始教程(我还运行了标准:80 虚拟服务器) .

无论如何,在默认的 WAMP 安装中已经启用了一些提到的东西(我猜它会随着版本的变化而变化),但其余的对我帮助很大。实际上缺少一件事......我还不得不取消注释“httpd.conf”中的以下行

LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
于 2014-11-25T09:03:14.973 回答
1

如果您有错误:

无法将模块/mod_ssl.so 加载到服务器中:操作系统无法运行 %1

然后你必须:

  1. 在此处安装 Win32 OpenSSL http://slproweb.com/products/Win32OpenSSL.html
  2. 将 libeay32.dll、ssleay32.dll 复制/粘贴到您的 wamp php bin 文件夹中(C:\wamp64\bin\php\php5.6.19)
  3. 重启阿帕奇

注意:在 Wamp 服务器 3 上测试

于 2016-07-20T13:06:33.910 回答
1

首先:

1).关闭 WAMP 并继续C:\wamp\scripts\config.inc.php 从数组 libeay32.dll, ssleay32.dll, 第 133,139 行移动

2).从官方网站安装OpenSSL,注意你的操作系统版本是否为x64。

命令提示符:

3)。cd C:\wamp\bin\apache\apache2.4.23\bin

4)。openssl req -new > localhost.csr

5)。 openssl rsa -in privkey.pem -out localhost.key

6)。openssl x509 -in localhost.csr -out localhost.crt -req -signkey localhost.key -days 365 -sha256 -extfile v3.ext

更新:从 Chrome 58 开始,我们需要提供Subject Alternative Name. 我们可以从扩展文件中获得这个名称v3.ext

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = 127.0.0.1
DNS.2 = localhost

在通用名称中插入“localhost”非常重要

7).抓取 localhost.key 和 localhost.crt 并将它们放入C:\wamp\bin\apache\apache2.4.23\conf\key (当然,在创建适当的目录之前)

配置:

8).启用C:\wamp\bin\apache\apache2.4.23\bin\php.ini

C:\wamp\bin\php\php5.6.25\php.ini extension=php_openssl.dll

9). 继续 C:\wamp\bin\apache\apache2.4.23\conf\httpd.conf并取消注释:

LoadModule ssl_module modules/mod_ssl.so,

Include conf/extra/httpd-ssl.conf,

Include conf/extra/httpd-vhosts.conf,

LoadModule socache_shmcb_module modules/mod_socache_shmcb.so 

10)。继续 C:\wamp\bin\apache\apache2.4.23\conf\extra\httpd-ssl.conf

并进行更改:

SSLSessionCache "shmcb:c:/wamp/bin/apache/apache2.4.23/logs/ssl_scache(512000)",

SSLSessionCacheTimeout 300,

VirtualHost _default_:443,

DocumentRoot "c:/wamp/www/",

ServerName localhost:443,

ErrorLog "c:/wamp/bin/apache/apache2.4.23/logs/ssl_error.log"

, (如果不存在则创建文件)

TransferLog "c:/wamp/bin/apache/apache2.4.23/logs/access.log",

SSLCertificateFile "c:/wamp/bin/apache/apache2.4.23/conf/key/localhost.crt",

SSLCertificateKeyFile "c:/wamp/bin/apache/apache2.4.23/conf/key/localhost.key",

<Directory "c:/wamp/www/">
    SSLOptions +StdEnvVars
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Require local
</Directory>

,

  CustomLog "c:/wamp/bin/apache/apache2.4.23/logs/ssl_request.log"

证书处理:

11).按 Win+R 并插入“certmgr.msc”,将 servercert.crt 导入“受信任的根证书颁发机构”

12)。在命令提示符'httpd -t' 中检查您的服务器应该是 'Syntax OK'

13)。启动 Wamp 并继续链接https://localhost

我希望这会有所帮助

注意:请阅读这篇关于 Mozilla 行为的文章:

https://blog.mozilla.org/security/2014/09/23/phasing-out-certificates-with-sha-1-based-signature-algorithms/
于 2017-05-08T19:08:59.423 回答