在wamp服务器中安装SSL:httpd-ssl.conf文件出现错误。

19
我正尝试在本地主机上设置SSL,我已经按照http://madurad.wordpress.com/2014/04/25/redirect-http-to-https-with-wamp-server/和其他许多指南进行尝试,但无法成功。我卡在httpd-ssl.conf的语法上。当我进行设置时,我的Apache服务器会崩溃。
<Directory "c:/wamp/www/"> 
   Options Indexes FollowSymLinks  
   AllowOverride all 
   Require all granted 
   SSLOptions +StdEnvVars
</Directory>

我尝试了许多其他的东西,比如

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

为什么无法获取问题是什么?


可能是如何在本地主机上为Apache允许HTTPS?的重复问题。 - T.Todua
7个回答

84

如何配置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

ipconfig /flushdns

然后在 \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.y.z\bin文件夹中。 这应该是您创建自签名证书所需的全部内容!

然而:在我安装的任何Apache版本上,这些都不起作用。 我总是收到此错误消息。

error message

当我在Apache版本文件夹中时,序号会改变。

如果你遇到了这个错误,不用担心,下面是需要做的事情。

安装最新版本的OPENSSL TOOLKIT

可以从这里获取。

注意:目前不要使用V1.1版本,PHP团队尚未使用这些新链接编译PHP,因此请继续使用V1.0.?版本。

选择与您安装的WAMPServer版本相匹配的最新版本的“Win32 OpenSSLv xxx Light”或“Win64 OpenSSLv xxx Light”,因为这是您所需的全部内容。

这将下载一个.exe文件,您可以运行它来安装这个工具包。

它会问以下问题,建议您按照以下方式回答,以免将某些东西安装到C:\windows\system32中。毕竟这是一个工具包,而且经常更改。最好将这些东西分开,并不使它们成为系统全局。

openssl install suggestion

安装完成后(安装到您指定的任何文件夹),您就可以开始生成密钥和证书的过程了!


生成密钥和证书。

步骤1:生成RSA私钥

首先,我们需要创建自己的证书。 正常(付费)的流程是创建证书,然后将其传递给签名机构。 这就是为什么它需要花费金钱,因为他们必须进行尽职调查,检查您是否是您所说的人,并且您将在上面使用证书的站点是真实和合法的。

openssl工具包用于生成RSA私钥和CSR(证书签名请求),以用于我们的证书。 第一步是创建RSA私钥。 此密钥是一个1024位RSA密钥,使用Triple-DES加密并以PEM格式存储,以便作为ASCII文本可读取。

使用[b]以管理员身份运行[/b]打开命令窗口(Dos框)。 更改目录到您安装OpenSSL Toolkit的位置。 在我的情况下,这是

CD c:\apps\OpenSSL-Win32\bin

创建一个文件夹用于输出(以保持bin文件夹的整洁),我使用了网站。

md website

现在输入此命令:
openssl genrsa -out website\server.key 2048

这应该在网站文件夹中创建一个名为server.key的文件,没有密码密钥,请检查它是否存在。

步骤2:生成CSR(证书签名请求)

在生成CSR期间,您将被提示输入几个信息。 这些是证书的X.509属性。 其中一个提示是“Common Name(例如服务器FQDN或YOUR name)[]:”。 重要的是,在此字段中填入受SSL保护的服务器的完全限定域名。 因此,如果要受保护的网站是https://www.wamphelpers.dev,则在此提示处输入www.wampheplers.dev。我使用wamphelper.dev作为我的ServerNameServerName wamphelpers.dev

不要在问题“挑战密码[]:”中输入任何内容:]只需按Enter键即可。 如果您在此处输入密码短语,则在使用配置了SSL的Apache启动Apache时,Apache将无法启动,并显示以下错误消息:

[error] Init: SSLPassPhraseDialog builtin is not supported on 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 )

步骤三:生成自签名证书

此时,您需要生成一个自签名证书,因为您要么不打算让您的证书由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

第四步:安装私钥和证书

在您使用的Apache版本下创建这两个目录。

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

步骤五:配置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

步骤七:配置您的安全站点虚拟主机

是的,对于所有不赞成使用虚拟主机的人来说,现在您无法避免这个过程。

编辑\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,其他浏览器略有不同,但概念相同。

enter image description here

这是因为您的证书未经受信任机构签名,不要惊慌,这是正常现象。

点击“我了解风险”,然后会出现一个按钮,上面写着“添加例外”。 在确认证书网站详细信息属于您的情况下,点击添加例外按钮, 除非您清除了例外列表,否则您将不会再看到此消息。

重要提示 从Apache v2.2.12和OpenSSL v0.9.8j开始,现在可以在一个Apache实例中保护多个站点。 本教程不涵盖该过程。 请参见以下链接获取更多详细信息:

这里

以及这里

还有这里

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


1
非常有帮助,感谢你的努力。但我认为,在CustomLog“c:/wamp/logs/ssl_request.log”\的查找部分存在问题。 "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \“%r\” %b" - Jobayer
1
哇,运行得非常好。你知道当你编辑这么多配置文件时,我很担心它不会工作,因为你不能在中途检查......但它确实工作了。唯一的问题是,在apache 2.4.x中,您需要取消注释“LoadModule socache_shmcb_module modules/mod_socache_shmcb.so”,但仅此而已! - nullwriter
1
当我在httphttps上加载我的开发网站时,我收到了错误消息refused to connect ERR_CONNECTION_REFUSED。在Windows应用程序日志中,我看到了以下错误消息:The Apache service named reported the following error: >>> 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,问题得以解决,这是从此答案中学到的。 - Steve
1
如果您已经有密钥和证书文件,且步骤1-3中的所有设置和路径都相同,那么您可以直接复制这些文件并跳过OPENSSL TOOLKIT安装步骤。请从第5步继续操作。 - Jan
2
这绝对是我今天找到的最好的解释!这也适用于Wamp64,有任何疑问的人。 - Drmzindec
显示剩余19条评论

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?)。


3
如果您遇到以下错误:
无法将modules/mod_ssl.so加载到服务器中:找不到指定的模块。
您可以尝试在wamp文件夹中搜索libeay32.dll,它可能在{wamp文件夹}/bin/php/php{版本7}/中找到。
复制libeay32.dll和ssleay32.dll并将它们粘贴到{wamp文件夹}/bin/apache/apache{版本2.x}/bin/和{wamp文件夹}/bin/php/php{verion 5.x}中。确保您备份了要放置的任何内容。
运行httpd -t并测试语法。
注意:我认为这是wamp 3.0.6的apache openssl部分出现错误。幸运的是,在php7文件夹中,这些dll文件与apache和php5兼容。

3

@RiggsFolly: 在您的教程中有一些小错误/拼写错误/补充。以下内容与WAMPServer 2.5 64位(Apache 2.4.9和PHP 5.5.12)在Windows 7 SP1 64位上配合使用:

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

-当您尝试编辑hosts文件时,请确保禁用任何病毒扫描程序。其中一些会阻止访问hosts文件。

-编辑hosts文件时,请务必以管理员身份打开文本编辑器,否则将无法保存并出现错误。

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

-如果使用WAMPServer 64位,请确保下载64位版本的OpenSSL

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

-文件\ wamp \ bin \ apache \ apachex.y.z \ conf \ httpd-ssl.conf位于\ wamp \ bin \ apache \ apachex.y.z \ conf \ extra \ httpd-ssl.conf(也许这取决于WAMPServer版本)

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

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


1

@RiggsFolly: 你可以在这里方便地生成自签名证书和密钥http://www.selfsignedcertificate.com/,所以我可以从第4步开始教程(我也运行了标准的:80虚拟服务器)。

无论如何,在默认的WAMP安装中,一些提到的内容已经启用(我猜它会根据版本而改变),但其余部分对我有很大帮助。实际上还有一件事情是缺失的...我还需要取消“httpd.conf”中以下行的注释。

LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

1
如果出现以下错误:

Cannot load modules/mod_ssl.so into server: The operating system cannot run %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. 重新启动Apache
注意:已在Wamp服务器3上测试。

我尝试了这个,但是在openssl目录中没有找到libeay32.dllssleay32.dll - user6247920
4
我在C:\OpenSSL-Win64中也没有找到libeay32.dll或ssleay32.dll。但是,将这两个符号链接替换为从c:\wamp\bin\php\php7.0.4复制的文件副本,在c:\wamp\bin\apache\apache2.4.18\bin中可以解决问题。 - Matthew
1
@Aydus-Matthew 哦,你的方法对我起了作用,我已经苦恼了好几天...几乎要放弃了...谢啦! - Exlord
@Aydus-Matthew,我现在对你的爱是真实的。 - D.Tate

1

首先:

1). 关闭WAMP,然后进入C:\wamp\scripts\config.inc.php,从数组中移除libeay32.dllssleay32.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/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接