如何刷新Bower包证书?

7
在构建 Docker 容器时,我遇到了这个错误:
Step 6/17 : RUN bower install --allow-root ---> Running in 20f9229dcd1e bower angular-touch#~1.5.0 CERT_HAS_EXPIRED Request to https://registry.bower.io/packages/angular-touch failed: certificate has expired
这个镜像的构建大约持续了两年时间,突然间就不再合作了。我该如何刷新缺失的证书呢?
7个回答

14
在我的情况下,我只需将两行代码添加到.bowerrc文件中。
"strict-ssl": false,
"https-proxy": "",

这是一种解决方法,但这是不好的做法。然而,使用过时的插件和bower也是不好的做法。


对我来说没有解决这个问题。我想知道为什么今天会发生这种情况。另一件奇怪的事情是,这个问题只在 Docker 内发生。有什么想法吗? - theschmitzer
3
不需要 https 代理,只需要 strict-ssl(在 Docker 镜像中使用 Node8)。 - J D
根据我的经验,这个方法只在你清空 Bower 缓存后才能正常运行。 - tromgy

8

你们可能都在使用“非常老”的构建堆栈,基于旧版Node Docker镜像,并使用旧版的Debian发行版作为其基本镜像(即node:6 => Debian Stretch)。

看起来,registry.bower.io的letsencrypt证书已于2023年4月24日更新,此后使用了更现代的中间证书。这在原始的基于旧版Debian发行版的Node镜像上是不可用/未知的。

当然,现在正是升级您的构建堆栈的时候了,但在此期间,您可以使用以下解决方法。

将以下内容添加到Dockerfile中,在执行bower install之前进行解决:

如果使用node:6 / Debian Strech

# manually remove expired letsencrypt X3 certificate and install the new ISRG X1 root CA 
RUN mkdir -p /usr/share/ca-certificates/letsencrypt/ \
  && cd /usr/share/ca-certificates/letsencrypt/ \
  && curl -kLO https://letsencrypt.org/certs/isrgrootx1.pem \
  && perl -i.bak -pe 's/^(mozilla\/DST_Root_CA_X3.crt)/!$1/g' /etc/ca-certificates.conf \
  && update-ca-certificates

然后使用此标志告诉Bower使用系统范围的CA系统:

RUN NODE_OPTIONS=--use-openssl-ca bower install ...

如果使用 node:4 / Debian Jessie

无法让这个古老的 npm 使用 openssl-ca,因此在这种情况下禁用 SSL 检查:

RUN <<EOR
cat <<EOF > .bowerrc
{
  "registry": "https://registry.bower.io",
  "strict-ssl": false,
  "https-proxy": "" 
}
EOF
EOR

RUN cd / 运行无效。https://dev59.com/WlMH5IYBdhLWcg3wpgtd更正确的步骤:RUN mkdir -p /usr/share/ca-certificates/letsencrypt/WORKDIR /usr/share/ca-certificates/letsencryptRUN curl -kLO https://letsencrypt.org/certs/isrgrootx1.pem \ && perl -i.bak -pe 's/^(mozilla\/DST_Root_CA_X3.crt)/!$1/g' /etc/ca-certificates.conf \ && update-ca-certificates - Andrey Fedosenko
我不理解你的评论 @AndreyFedosenko。在我的回复中没有 RUN cd / - Ernesto Baschny
刚刚检查了一下,看起来你的解决方案可以直接使用,无需修改。我可能在某个地方犯了错误。对此我感到抱歉 @ernesto-baschny - Andrey Fedosenko
感谢,这对我有用。对于构建遗留代码非常有用! - wilsontgh

3

.bowerrc 中指向新的注册表

答案见此处

{
 "directory": "bower_components",
 "registry": "https://bower.herokuapp.com"
}

谢谢,这对我们很有帮助。不知道bower.herokuapp.com现在是官方网站吗? - Shreehari
这个可以运行,但是bower.herokuapp.com已经被弃用了,所以这不是一个永久的解决方案。 - lrpe

2
我从昨天开始一直遇到这些错误。 我像下面这样解决了它: 如果你的依赖项在bower.json中像这样:
 "dependencies": {
    "bootstrap-sass": "3.2.0",
    "jquery": "2.2.0",
...
}

然后将其更改为:

"dependencies": {
    "bootstrap-sass": "https://github.com/twbs/bootstrap-sass.git#3.2.0",
    "jquery": "https://github.com/jquery/jquery.git#2.2.0",
...
}

使用您指定的版本和 git URL。 您可以在此处找到所有 bower 包的 git URL: https://registry.bower.io/packages

根据我的经验,这仅适用于没有“更深层次”的 bower 依赖项的情况,也就是说,它只适用于直接列出的软件包,而不适用于它们的依赖项。 - tromgy

1

bower install 仍适用于更新版本的node。 从我所注意到的来看,证书已经停止适用于6、7和8版本。

解决方法是:只在更新的node(例如12)上执行bower install 命令,而其余构建项目的命令则在我需要的版本上执行。

这在我们的项目中起作用了。


0

将Node版本从8升级到18对我解决了这个错误。


0

不确定是否正确,但以下步骤对我们有效:

1 - 删除旧证书:

sed -i 's/mozilla\/DST_Root_CA_X3.crt/!mozilla\/DST_Root_CA_X3.crt/g' /etc/ca-certificates.conf

2 - 更新证书:

update-ca-certificates

3 - 暂时禁用SSL:在.bowerrc文件中添加"strict-ssl": false

4 - 在您的步骤中,在bower install命令之前添加bower cache-clean

5 - 在bower install命令中包含标志--use-openssl-ca

6 - 运行您的构建,这次应该可以工作了。

7 - 返回并启用SSL:从.bowerrc文件中删除"strict-ssl": false

8 - 下一次构建应该可以使用SSL而不会出现证书问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接