我正在本地apache Web服务器上运行一个网站,当我点击网站中的某些链接时会遇到错误。Firefox显示一个";无法连接";错误页面,并在URL前面附加一个https://。
我最初认为这是浏览器配置问题,并尝试了这里建议的所有解决方案:Firefox重定向到https
在这里:如何阻止Firefox在本地开发服务器上强制使用https://?
我尝试过的那些链接中的建议包括:
- 清除缓存
- 忘记网站
- 使用/不使用私人模式
- 将browser.fixup.fallback-to-http设置为false
- 正在将network.structtransportsecurity.preloadlist设置为false
我现在认为这是某种SSL证书问题。按下URL旁边的信息按钮会显示一条消息,上面写着连接不安全
因此,我使用openssl req -nodes -new -x509 -keyout server.key -out server.cert
制作了一个证书,并将其导入到Firefox的证书管理器中。
我的证书现在可以在"权限"选项卡下看到。但是,"服务器"选项卡仍然为空。当我尝试添加异常时,它会提示我输入位置。我试过localhost
、http://localhost
和https://localhost
,但在每种情况下,它都说无法获得该网站的身份。
如果有任何建议或指示,我将不胜感激。
谢谢。
更新:12/2/20
经过进一步研究,我仍然认为这是一个SSL错误。但我不认为是火狐造成的。我遵循了各种各样的教程,比如,但都无济于事
让Chrome接受自签名本地主机证书
如何使用OpenSSL 创建自签名证书
https://deliciousbrains.com/ssl-certificate-authority-for-local-https-development/
https://gist.github.com/cecilemuller/9492b848eb8fe46d462abeb26656c4f8
所有这些都包含大致相同的模式,即使用openSSL命令在某个文件位置生成CA,然后将其放入Keychain Access并打开权限。
在每种情况下,我都无法让Firefox加载https页面,也无法让它在证书管理器的服务器选项卡中识别本地主机的标识。
我还下载了Chrome。我相信我的说法是正确的,Chrome希望Keychain Access获得本地主机认证,尽管我的本地主机认证是可信的,但Chrome也无法访问https页面。即使我将配置chrome://flags/#allow-insecure-localhost
更改为启用,这种情况也会持续存在。
因为两个浏览器(以及Safari)都给出了相同的错误,我认为这不是浏览器的问题。我现在认为这个错误与apache配置有关,尽管我在这里找到了教程:https://gist.github.com/nrollr/4daba07c67adcb30693e没有效果,我将继续追求这个想法。
和往常一样,任何关于这个问题起源的想法或见解都会受到重视。
这可能不是唯一的问题,但证书除了受信任外,还需要嵌入一个与localhost域匹配的Common Name记录。
试试看:openssl req -nodes -new -x509 -keyout server.key -out server.cert -subj "/CN=localhost"
这毕竟是一个apache问题。我相信我面临的问题相当小众,但为了在未来帮助别人,我采取了以下步骤来解决它:
我不得不将server.cert
和server.key
文件放入usr > local > etc > httpd
.cert和.key文件是使用openssl req -nodes -new -x509 -keyout server.key -out server.cert
生成的
我不得不编辑httpd.conf
以包括:
LoadModule socache_shmcb_module lib/httpd/modules/mod_socache_shmcb.so
LoadModule ssl_module lib/httpd/modules/mod_ssl.so
Include /usr/local/etc/httpd/extra/httpd-ssl.conf
我不得不编辑httpd-ssl.conf
,它位于usr > local > etc > httpd > extras
内部在端口443而不是默认的8443上侦听并更改的名称
SSLCertificateFile “/usr/local/etc/httpd/server.crt”
到SSLCertificateFile "/usr/local/etc/httpd/server.cert"
在这些步骤之后,我不必将localhost添加到Firefox的证书管理器中的服务器异常列表中,localhost是可信的并接受https。
在经历了类似的挫折之后,我试图在没有任何可怕的安全警告的情况下让https://localhost/
在Firefox中工作,我想分享一下这是可以做到的——这些步骤可能有些晦涩难懂,目前可用的许多指令都在解决不同的问题、过时或根本不起作用。
我的第一次尝试生成的消息与您收到的消息相同。我相信这是在Apache中通过使用SAN生成证书(Subject Alt-Name)并按照下面Let's Encrypt中的说明解决的。
对我来说,更困难的错误是Firefox特有的:MOZILLA_PKIX_ERROR_SELF_SIGNED_CERT
实际上只有3个步骤(生成证书、在服务器上安装、添加到客户端的信任存储)。以下说明适用于Debian 11上的Apache2和Firefox 102.5 ESR。
第一步将使用SAN:生成localhost自签名证书
openssl req -x509 -out localhost.crt -keyout localhost.key
-newkey rsa:2048 -nodes -sha256
-subj '/CN=localhost' -extensions EXT -config <(
printf "[dn]nCN=localhostn[req]ndistinguished_name = dnn[EXT]nsubjectAltName=DNS:localhostnkeyUsage=digitalSignaturenextendedKeyUsage=serverAuth")
来源:https://letsencrypt.org/docs/certificates-for-localhost/
复制证书&"下的私钥"/usr/local/share/ca证书">(为单独的站点创建子目录)
"/etc/ssl/certs/";必须用刷新
sudo update-ca-certificates
来源:https://grumpytechie.net/2020/02/25/adding-custom-root-ca-certificates-to-debian/
下一步将在Apache2服务器上安装localhost自签名证书。请确保在Apache中为HTTPS启用虚拟主机。(在Debian 11上,这可以通过命令a2ensite
来完成)Apache配置文件/etc/apache2/sites-available/default-ssl.conf
将需要修改,以指向证书&私钥:
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
[ ... ]
SSLCertificateFile /usr/local/share/ca-certificates/localhost/localhost.crt
SSLCertificateKeyFile /usr/local/share/ca-certificates/localhost/localhost.key
下一步将在Firefox客户端上安装localhost自签名证书。
通过尝试添加自签名证书,将出现各种错误;设置">quot;隐私&安全性";。特别是当使用";您的证书";选项卡,我无法导入,因为它说我没有相应的私钥,这似乎无关紧要,因为浏览器不应该有私钥,而且这两个文件都是由我的用户创建和拥有的。当使用";权威机构";选项卡,它根本不会导入,因为它是自签名的。也许还有其他方法可以导入,也许使用PKCS12文件,但我无法通过这一部分
如果您无法克服上述错误,则可能需要设置一个策略文件以允许信任证书颁发机构。
https://support.mozilla.org/en-US/kb/setting-certificate-authorities-firefox
创建一个文件";policys.json";在"/usr/share/ffirefox-esr/distring/";,并将其指向证书位置(而不是私钥):
{
"policies": {
"Certificates": {
"ImportEnterpriseRoots": true,
"Install": ["localhost.crt","/etc/ssl/certs/localhost.pem"]
}
}
}
https://github.com/mozilla/policy-templates/blob/master/README.md#certificates--安装
操作系统和浏览器现在都应该信任证书。