如何刷新 Bower 包证书?

Tro*_*oom 7 bower docker angular-touch

在构建 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

建立这个形象大约有两年的时间,进展顺利,然后突然拒绝合作。如何刷新丢失的证书?

Tro*_*oom 16

就我而言,我只需在 .bowerrc 文件中添加两行

"strict-ssl": false,
"https-proxy": "",
Run Code Online (Sandbox Code Playgroud)

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

  • 不需要 https-proxy,只需要 strict-ssl(docker 镜像中的 Node8) (3认同)

Ern*_*hny 9

您可能都在使用基于较旧节点 docker 映像的“非常旧”构建堆栈,该堆栈使用较旧的 Debian 发行版作为其基本映像(即node:6=> Debian Stretch)。

看来,registry.bower.io 的 LetsEncrypt 证书已于 2023 年 4 月 24 日更新,此后使用了更现代的中间证书。这在原始节点映像所基于的旧版 Debian 发行版中不可用/不为人所知。

当然,是时候升级您的堆栈了,但与此同时您可以使用这些解决方法。

在执行此操作之前,将其添加到您的 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
Run Code Online (Sandbox Code Playgroud)

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

RUN NODE_OPTIONS=--use-openssl-ca bower install ...
Run Code Online (Sandbox Code Playgroud)

如果使用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 Code Online (Sandbox Code Playgroud)