如何获取SSL证书以在Firefox上使用Localhost



我正在本地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的证书管理器中。

我的证书现在可以在"权限"选项卡下看到。但是,"服务器"选项卡仍然为空。当我尝试添加异常时,它会提示我输入位置。我试过localhosthttp://localhosthttps://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.certserver.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--安装


操作系统和浏览器现在都应该信任证书。

最新更新