在 wamp 服务器中安装 SSL:httpd-ssl.conf 中的错误

Posted

技术标签:

【中文标题】在 wamp 服务器中安装 SSL:httpd-ssl.conf 中的错误【英文标题】:Installation SSL in wamp server: Error in httpd-ssl.conf 【发布时间】:2017-07-02 05:59:43 【问题描述】:

我正在尝试在本地主机上设置 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>

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

【问题讨论】:

How do I allow HTTPS for Apache on localhost?的可能重复 2019 年更新 How do I allow HTTPS for Apache on localhost? 【参考方案1】:

如何配置 WAMPServer 以使用 HTTPS SSL

这不是一个简单的过程。希望本教程能让 SSL 为您工作。 但是,一旦它开始工作就正确配置它完全取决于您。

Additional reading for all who travel this road

好的,

本教程的基础是创建一个名为 www.wamphelpers.dev 的站点,因此无论您在何处看到该名称,都将其更改为您要保护的站点名称。

我首先在 \wamp\www\wamphelpers 中创建了一个不安全的站点

为该站点添加了一个虚拟主机,\wamp\bin\apache\apacheversion\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\apacheversion\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.y.z\bin 文件夹中 这应该是您创建自签名证书所需的全部内容!

但是:这些对我安装的任何 Apache 版本都不起作用。 我总是收到此错误消息。

序号的变化取决于我所在的 apache 版本文件夹。

如果您收到此错误,请不要担心这是您需要做的。

安装最新版本的 OPENSSL TOOLKIT

这个可以获取from here

注意:暂时不要使用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] 打开命令窗口(Dos 框) 将目录更改为上面安装 OpenSSL 工具包的位置。 就我而言,这是

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 因为我的ServerNameServerName wamphelpers.dev

不要在问题中输入任何内容:挑战密码 []:] 只需按 Enter。 如果您在配置 SSL 的情况下启动 Apache 时在此处输入密码,则 Apache 将无法启动,并会给出以下错误消息:-

[错误] Init: SSLPassPhraseDialog builtin 在 Win32 上不受支持

基本上,如果您确实输入了密码,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_PROTOCOLx %SSL_CIPHERx \"%r\" %b"

改成

CustomLog "c:/wamp/logs/ssl_request.log" \
          "%t %h %SSL_PROTOCOLx %SSL_CIPHERx \"%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 实例保护多个站点。 本教程不涉及该过程。 有关详细信息,请参见此处:

Here

and Here

and Here

就像我在顶部所说的那样,现在您需要对 SSL 配置中的所有可用选项进行一些研究,并按照您的意愿工作,而不是使用默认设置。

【讨论】:

真的很有帮助,感谢您的努力。但我认为,在 CustomLog "c:/wamp/logs/ssl_request.log" \ "%t %h %SSL_PROTOCOLx %SSL_CIPHERx \"%r\" %b" 哇,工作就像一个魅力。你知道当你编辑这么多配置文件时,我害怕它不会工作,因为你不能真正检查一半......但它确实做到了。唯一的事情,在 apache 2.4.x 中你需要取消注释“LoadModule socache_shmcb_module modules/mod_socache_shmcb.so”,但就是这样! httphttps 上加载我的开发站点时收到错误refused to connect ERR_CONNECTION_REFUSED,在Windows 应用程序日志中我看到The Apache service named reported the following error: &gt;&gt;&gt; AH00526: Syntax error on line 73 of D:/wamp/bin/apache/apache2.4.9/conf/extra/httpd-ssl.conf,。第 73 行说 SSLSessionCache "shmcb:d:/wamp/logs/ssl_scache" 已通过在 http.conf 中取消注释 LoadModule socache_shmcb_module modules/mod_socache_shmcb.so 解决,从 this answer 获知 如果您已经有密钥和证书文件,如果步骤 1-3 中的所有设置和路径都相同,则只需复制它们并跳过 OPENSSL TOOLKIT 安装步骤。从第 5 步继续。 工作得很好,需要取消注释这一行 LoadModule socache_shmcb_module modules/mod_socache_shmcb.so ,在 apache 2.4 中它默认被注释。你可以添加这个。【参考方案2】:

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

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

LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

【讨论】:

【参考方案3】:

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

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

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

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

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

-如果你使用 WAMPServer 64bit 一定要下载 64bit 版本的 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”也提到了这一点。

【讨论】:

【参考方案4】:

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

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

【讨论】:

【参考方案5】:

如果你有错误:

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

那么你必须:

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

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

【讨论】:

这个我试过了,但是在openssl目录里面没有找到libeay32.dll或者ssleay32.dll 我也没有在 C:\OpenSSL-Win64 中找到 libeay32.dll 或 ssleay32.dll。但是用 c:\wamp\bin\php\php7.0.4 中的文件副本替换 c:\wamp\bin\apache\apache2.4.18\bin 中的这两个符号链接对我有用。 @Aydus-Matthew OMG 为我做了这件事,几天来一直在敲我的脑袋......几乎放弃了...... TNX @Aydus-Matthew,我现在对你的爱是真实的【参考方案6】:

如果你有这样的错误:

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

    您可能想尝试在 wamp 文件夹中搜索 libeay32.dll,您可能在 wamp 文件夹/bin/php/phpversion 7/

    中找到它

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

    运行 httpd -t 并测试语法

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

【讨论】:

【参考方案7】:

首先:

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 &gt; 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

在 Common Name 中插入 'localhost' 非常重要

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

配置:

8).enable 在C:\wamp\bin\apache\apache2.4.23\bin\php.ini

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

9).proceed 到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',import servercert.crt 到 'Trusted Root Certificated Authorities'

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/

【讨论】:

以上是关于在 wamp 服务器中安装 SSL:httpd-ssl.conf 中的错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在 WAMP 服务器中安装 Imagick?

另一个Web服务器已在运行。 XAMPP apache [UBUNTU]

在 Node express 应用程序中安装 Entrust SSL 证书

在腾讯云服务器centos7.5系统中lamp(centos7.5+apache+mysql+php)环境中安装ssl证书

如何在 Laravel 中安装调试栏?

如何在 cpanel 中安装免费 ssl