如何使用 MAMP 为本地主机和虚拟主机设置 SSL?

gra*_*dev 3 apache ssl mamp

我创建这个“问题”是为了记录我如何在本地设置 SSL,以防我将来需要再次执行此操作。我想我会在这里记录下来,希望这对其他人也有帮助,因为这是一个棘手的过程。

我正在使用 High Sierra、MAMP v 4.2.1 和 Chrome v 71 的 Mac

好吧,让我们滚吧。

gra*_*dev 6

1)为localhost创建SSL证书

\n\n

为了能够使用 HTTPS,localhost我们实际上需要两个证书:根证书和专门为域创建的域证书localhost

\n\n

我发现这些漂亮的脚本可以创建这两者。它们非常易于使用\xe2\x80\x94,只需严格按照说明进行操作即可。文档中唯一不太清楚的是,它说Then mark the certificate as trusted,这意味着您必须单击“钥匙串访问”中的证书并将Trust\xc2\xa0 选项更改为Always

\n\n

在这里您可以找到这些脚本实际用途的更详细解释)

\n\n

如果一切顺利,您现在应该有两个文件server.crtserver.key. 我在其中创建了一个ssl文件夹/Applications/MAMP并将文件移动到其中;但您可以将它们放在您认为最好的地方。

\n\n

现在让我们忘记这些文件并继续进行一些 Apache 配置。

\n\n

2) 配置MAMP的Apache接受SSL

\n\n

默认情况下,Apache 未配置为接受 SSL 连接,因此我们必须更改它。打开/Applications/MAMP/conf/apache/httpd.conf并确保以下行未被注释掉。如果是,请删除#行开头的:

\n\n
LoadModule ssl_module modules/mod_ssl.so \n\nInclude /Applications/MAMP/conf/apache/extra/httpd-ssl.conf\n
Run Code Online (Sandbox Code Playgroud)\n\n

另外,寻找这一行:

\n\n
Servername  localhost:443\n
Run Code Online (Sandbox Code Playgroud)\n\n

并确保端口设置为 443。443 是 HTTPS 安全连接的默认端口(常规、不安全的 HTTP 连接默认侦听端口 80)。

\n\n

接下来,打开/Applications/MAMP/conf/apache/extra/httpd-ssl.conf并确保有以下行:

\n\n
Listen 443\n
Run Code Online (Sandbox Code Playgroud)\n\n

同样,这很重要,因为我们必须在同一端口上设置所有内容。为此,您还应该单击 MAC 扩展坞中的 MAMP 图标,点击Preferences,转到Ports选项卡并选择Set Web & MySql ports to 80 & 3306

\n\n

停止并重新启动 MAMP 以应用我们迄今为止所做的更改。

\n\n

3) 配置 SSL 默认虚拟主机

\n\n

仍在 中/Applications/MAMP/conf/apache/httpd.conf,查找这些行:

\n\n
<VirtualHost _default_:443>\n\n#   General setup for the virtual host\nDocumentRoot "/Applications/MAMP/Library/htdocs"\nServerName www.example.com:443\n
Run Code Online (Sandbox Code Playgroud)\n\n

这些行设置 Apache 对于所有 HTTPS 连接的默认行为。这ServerName只是一个虚拟名称,您应该将其替换为localhost; 您还应该确保默认值DocumentRoot与您的项目根文件夹匹配。

\n\n

因此,将上面的行更改如下:

\n\n
<VirtualHost _default_:443>\n\n#   General setup for the virtual host\nDocumentRoot "/path/to/your/htdocs" \nServerName localhost\n
Run Code Online (Sandbox Code Playgroud)\n\n

当您进一步向下滚动时,虽然我们仍处于默认VirtualHost指令中,但您会发现这两行:

\n\n
SSLCertificateFile "/Applications/MAMP/conf/apache/server.crt"\n\nSSLCertificateKeyFile "/Applications/MAMP/conf/apache/server.key"\n
Run Code Online (Sandbox Code Playgroud)\n\n

将这些更改为放置我们在步骤 1 中生成的文件的位置。就像我之前所说,我已将我的文件放在“/Applications/MAMP/ssl”中,因此我已将上面的行更改为:

\n\n
SSLCertificateFile "/Applications/MAMP/ssl/server.crt"\n\nSSLCertificateKeyFile "/Applications/MAMP/ssl/server.key"\n
Run Code Online (Sandbox Code Playgroud)\n\n

停止并重新启动 MAMP 以应用更改。现在,如果您访问,https://localhost您应该能够看到根文件夹中的项目列表。就是这样localhost

\n\n

4) 为自定义本地域创建 SSL 证书

\n\n

如果您想创建一个自定义域myproject.dev并为此使用 SSL,以便您可以通过 访问它,该怎么办https://myproject.dev

\n\n

与我们所做的非常相似localhost,我们需要专门为该myproject.dev域创建一个 SSL 证书,然后为myproject.dev. 让我们从创建证书开始。

\n\n

再次,我发现了这个名为 的小工具create-ssl-certificate,它将为您生成特定本地域的 SSL 证书。这也非常容易使用,唯一不太清楚的部分是它是一个 NPM 包,您可以使用npm -g install create-ssl-certificate.

\n\n

如果 一切顺利create-ssl-certificate,您现在应该有两个文件,就像步骤 1 中一样。localhost默认情况下,create-ssl-certificate调用生成的文件ssl.crtssl.key。我已将它们重命名为server.crtserver.key与 \xc2\xa0 文件保持一致localhostssl然后我在根文件夹中创建了一个文件夹myproject,并将文件移到其中。

\n\n

让我们暂时忘记这些文件并继续进行一些 Apache 配置。

\n\n

4) 配置 MAMP 的 Apache 接受虚拟主机

\n\n

如果您之前创建过虚拟主机,那么您可能已经完成了此操作,因此可以跳过此步骤。

\n\n

要“激活”创建虚拟主机的可能性,我们唯一需要做的就是转到/Applications/MAMP/conf/apache/httpd.conf并取消注释此行:

\n\n

Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf

\n\n

5) 为 SSL 配置本地域的虚拟主机

\n\n

现在我们可以设置一个虚拟主机,以便我们可以访问myproject\xc2\xa0at https://myproject.dev。首先,编辑hosts\xc2\xa0 文件并添加以下行:

\n\n
127.0.0.1   myproject.dev\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后,转到/Applications/MAMP/conf/apache/extra/httpd-vhosts.conf并添加以下内容:

\n\n
<VirtualHost myproject.dev:443>\n    ServerName myproject.dev\n    DocumentRoot "/Users/myusername/Sites/myproject"\n    SSLEngine on\n    SSLCertificateFile "/Users/myusername/Sites/myproject/ssl/server.crt"\n    SSLCertificateKeyFile "/Users/myusername/Sites/myproject/ssl/server.key"        \n</VirtualHost>\n
Run Code Online (Sandbox Code Playgroud)\n\n

通过此配置,您将能够访问https://myproject.dev\xc2\xa0,因为服务器被指示搜索我们在步骤 4 中创建的 SSL 证书。

\n