轻 - 不需要的 HSTS

lighty - unwanted HSTS

多年来,我一直运行在我的开发机器上轻装上阵,已经设置了一些虚拟主机,其中之一是 phpmyadmin,另一个在某些页面上使用带有自签名证书的 SSL ;它多年来一直运行良好。

但是现在,每次我尝试访问我的虚拟主机时,浏览器都会向我显示一条错误消息,声称服务器未正确配置并使用 hsts (NET::ERR_CERT_AUTHORITY_INVALID) - 但是我从来没有设置过!

http://(ip-address)/ 工作正常;和 http://(ip-address)/vhost-path/ 一样,我会一直使用它,直到我轻装上阵并安装 nginx;但是重定向在测试中的某个时候使它无法使用。

我认为我的 Windows 客户端上的 AV 软件可能会导致问题;但它也显示在 Debian 开发机器上。

关于这是怎么发生的以及如何解决这个问题有什么想法吗?


详情:

/etc/conf/lighttpd/conf-enabled的内容:

05-auth.conf
10-fastcgi.conf
10-ssl.conf
50-phpmyadmin.conf
10-cgi.conf
10-simple-vhost.conf
15-fastcgi-php.conf
90-javascript-alias.conf

据我所知,只有10-ssl.conf包含的内容比默认内容多;而且它们多年来都没有修改过。

lighttpd.conf(两年前的mtime)包含:

server.modules = (
        "mod_access",
        "mod_accesslog",
        "mod_alias",
        "mod_compress",
        "mod_redirect",
)

... (general server setup) ...

include_shell "/usr/share/lighttpd/create-mime.assign.pl"
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"

... (vhost configuration) ...

/etc/conf/lighttpd/ssl/ 包含我在其上使用 https 的一个虚拟主机的 SSL 证书(有效期至 2023 年某处)。

Chrome 拥有 .dev TLD,并决定将其预加载到浏览器中的静态 HSTS 列表中。 Firefox 最近紧随其后。有关详细信息,请参阅此 link:https://ma.ttias.be/chrome-force-dev-domains-https-via-preloaded-hsts/

这意味着您不能关闭 HSTS。

您的选择是:

  1. 使用不同的域(例如 .test)
  2. 创建一个自签名证书并将您的测试站点切换到 HTTPS。

请注意,由于 HSTS 不允许您点击证书错误,因此您还需要将证书(或问题)添加到信任库。

我强烈认为应该在 HTTPS 站点上进行开发。这与生产相匹配,因此避免了上线时混合内容的问题,certain powerful features will not work on HTTP-only sites,以及某些新功能(HTTP/2、Brotli 压缩、Service Workers)。

帮自己一个忙,创建一个自签名证书,将其添加到您的信任库,然后转移到 HTTPS 进行开发。另请注意,Chrome 要求证书具有 SAN 字段,这需要更多的努力,但可以在 linux 上完成(替换 server.domain.tld 的两个实例):

openssl req \
    -newkey rsa:2048 \
    -x509 \
    -nodes \
    -keyout server.key \
    -new \
    -out server.crt \
    -subj /CN=server.domain.tld\
    -reqexts SAN \
    -extensions SAN \
    -config <(cat /etc/pki/tls/openssl.cnf\<(printf '[SAN]\nsubjectAltName=DNS:server.domain.tld')) \
    -sha256 \
    -days 3650

或者在无法使用在线工具的 MacOS 上:

cat /System/Library/OpenSSL/openssl.cnf > /tmp/openssl.cnf
echo '[SAN]\nsubjectAltName=DNS:server.domain.tl'>> /tmp/openssl.cnf
openssl req \
    -newkey rsa:2048 \
    -x509 \
    -nodes \
    -keyout server.key \
    -new \-out server.crt \
    -subj /CN=server.domain.tl\
    -reqexts SAN \
    -extensions SAN \
    -config /tmp/openssl.cnf\
    -sha256 \
    -days 3650