【问题标题】:LetsEncrypt and CakePhp issueLetsEncrypt 和 CakePhp 问题
【发布时间】:2016-09-12 06:21:17
【问题描述】:

我正在尝试使用 cakephp 安装 LetsEncrypt,但遇到了一些问题。让我描述一下:

首先,我在装有 CentOS 6 的服务器上安装 LetsEncrypt。

正如在几个网站上提到的,它需要将 python 从 2.6 升级到 2.7,因为 LetsEncrypt 需要 Python 2.7。我做到了。

如果我运行./letsencrypt-auto,我会得到

“您的操作系统上还没有可用的安装程序;请尝试运行“letsencrypt-auto certonly”以获取可以手动安装的证书”

我知道这是正常的,因为 CentOS 6 没有安装程序。

所以我运行./letsencrypt-auto certonly。出现一个窗口。我可以选择:

  1. 将文件放在 webroot 目录中
  2. 自动使用临时网络服务器

所以我按 1。然后我输入我的域名。我看到了:

  1. 输入新的 webroot

我按确定,我看到我的根目录。我选择/root

然后我有以下错误:

授权程序失败。 www.example.com (http-01): urn:acme:error:unauthorized :: 客户端缺少足够的 授权 :: 来自无效的响应 http://www.example.com/.well-known/acme-challenge/-CnpDIgxBB9EOH-BCssGOyiunFjnMlGLWhWw9roE4Ds: " 500 Internal Server Error Inter"

重要提示: - 服务器报错如下:

域:www.example.com 类型:未经授权 详细信息:无效 来自http://www.example.com/.well-known的回复
/acme 挑战/-CnpDIgxBB9EOH-BCssGOyiunFjnMlGLWhWw9roE4Ds:
"
500 内部服务器错误
国际米兰

要修复这些错误,请确保您的域名是
正确输入和该域的 DNS A 记录
包含正确的 IP 地址。

cakephp 来了。如前所述,我正在使用 cakephp。似乎对于这个特定问题,您需要修改提到的 htaccess 文件here

我需要在root htaccessapp/.htaccess 中添加"RewriteRule ^(\.well-known/.*)$ $1 [L]" 作为第一条重写规则

我做了什么。

root .htaccess: 

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule ^(\.well-known/.*)$ $1 [L]
   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    (.*) app/webroot/$1 [L]
   AddDefaultCharset UTF-8 
</IfModule>

app/.htaccess:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^(\.well-known/.*)$ $1 [L]
    RewriteRule    ^$    webroot/    [L]
    RewriteRule    (.*)  webroot/$1    [L]
    AddDefaultCharset UTF-8 
 </IfModule>

但我还是有同样的问题

知道我做错了什么吗?

非常感谢

【问题讨论】:

  • in the root htaccess and the app/.htaccess 您服务器的文档根目录应该是app/webroot,您应该更改的唯一htaccess 文件(可能)是app/webroot/.htaccess。鉴于您正在做的事情 - 您可以简单地将您的应用程序移开以生成和安装证书,然后将其移回。
  • 感谢您的帮助。我尝试使用 app/webroot 作为“输入新的 webroot”,但我仍然遇到问题

标签: cakephp lets-encrypt


【解决方案1】:

Cake 的 webroot 有一个带有 RewriteCond %{REQUEST_FILENAME} !-d 规则的 .htaccess,这意味着对于匹配 webroot 中的实际目录的任何请求,都不会调用 cake。

因此,只需将.well-known 目录和所需的所有其他内容放在webroot 目录中,您就可以正常访问它们而不会弄乱.htaccess

PS。在某些情况下,Let's encrypt 需要的文件不会作为文本返回,在这种情况下,您应该启用 headers apache 模块(如果尚未启用)并将以下规则放入您的 apache 或虚拟主机配置中:

<IfModule mod_headers.c>
  <LocationMatch "/.well-known/acme-challenge/*">
    Header set Content-Type "text/plain"
  </LocationMatch>
</IfModule>

【讨论】:

  • 感谢您的帮助。我在 webroot 中创建了一个 .well-known 目录,但我仍然遇到问题:/ 我还尝试修改 httpd.conf 文件,结果相同
  • 如果没有确切的错误,很难猜出什么是错误的(查看 apache 日志,500 可能是由大量事情引起的)。另外,请尝试还原您在每个配置中的更改,如果您有多种黑客攻击,则无法弄清楚。顺便说一句,这听起来可能微不足道,但您并没有真正尝试验证 example.com,对吧?
  • PS : 我放了 example.com 来保持匿名,当然我有一个真实的 URL :)
  • 我前进了一步。正如您提到的,我将所有内容都放入了 webroot,但忘记在其他 htaccess 中删除 RewriteRule ^(\.well-known/.*)$ $1 [L]。所以现在在运行 ./letsencrypt-auto certonly 时,它会自动在 webroot 中创建一个 .well-known 目录,但这个目录是空的(没有 acme 挑战)。
  • 并且letsencrypt返回错误:客户端缺乏足够的授权 :: Invalid response from myexample.com/.well-known/acme-challenge/…: "
猜你喜欢
  • 2019-05-29
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 2014-10-02
  • 1970-01-01
  • 2012-09-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多