bower CERTHASEXPIRED 错误问题
# 正题:如何解决 bower underscore#1.7.0 CERT_HAS_EXPIRED 错误问题 🤔
# 1️⃣ 错误分析
在使用 Bower 进行项目依赖管理时,遇到以下错误信息:
Request to https://registry.bower.io/packages/angular failed: certificate has expired
1
完整的报错信息:
/opt/modules/ambari/ambari-admin/src/main/resources/ui/admin-web/node/node /opt/modules/ambari/ambari-admin/src/main/resources/ui/admin-web/node_modules/bower/bin/bower install --allow-root --verbose
bower angular#* CERT_HAS_EXPIRED Request to https://registry.bower.io/packages/angular failed: certificate has expired
Stack trace:
Error: Request to https://registry.bower.io/packages/angular failed: certificate has expired
at createError (/opt/modules/ambari/ambari-admin/src/main/resources/ui/admin-web/node_modules/bower/lib/node_modules/bower-registry-client/lib/util/createError.js:2
:15)
at Request._callback (/opt/modules/ambari/ambari-admin/src/main/resources/ui/admin-web/node_modules/bower/lib/node_modules/bower-registry-client/lib/lookup.js:97:29
)
at self.callback (/opt/modules/ambari/ambari-admin/src/main/resources/ui/admin-web/node_modules/bower/lib/node_modules/bower-registry-client/node_modules/request/re
quest.js:188:22)
at emitOne (events.js:77:13)
at Request.emit (events.js:169:7)
at Request.request.emit (/opt/modules/ambari/ambari-admin/src/main/resources/ui/admin-web/node_modules/bower/lib/node_modules/request-replay/index.js:69:33)
at Request.onRequestError (/opt/modules/ambari/ambari-admin/src/main/resources/ui/admin-web/node_modules/bower/lib/node_modules/bower-registry-client/node_modules/r
equest/request.js:884:8)
at emitOne (events.js:82:20)
at ClientRequest.emit (events.js:169:7)
at TLSSocket.socketErrorListener (_http_client.js:269:9)
From previous event:
at PackageRepository.fetch (/opt/modules/ambari/ambari-admin/src/main/resources/ui/admin-web/node_modules/bower/lib/core/PackageRepository.js:46:14)
at Manager._fetch (/opt/modules/ambari/ambari-admin/src/main/resources/ui/admin-web/node_modules/bower/lib/core/Manager.js:382:10)
at Array.forEach (native)
at Manager.resolve (/opt/modules/ambari/ambari-admin/src/main/resources/ui/admin-web/node_modules/bower/lib/core/Manager.js:127:23)
at Project._bootstrap (/opt/modules/ambari/ambari-admin/src/main/resources/ui/admin-web/node_modules/bower/lib/core/Project.js:672:10)
at /opt/modules/ambari/ambari-admin/src/main/resources/ui/admin-web/node_modules/bower/lib/core/Project.js:83:25
From previous event:
at Manager.resolve (/opt/modules/ambari/ambari-admin/src/main/resources/ui/admin-web/node_modules/bower/lib/core/Manager.js:119:24)
at Project._bootstrap (/opt/modules/ambari/ambari-admin/src/main/resources/ui/admin-web/node_modules/bower/lib/core/Project.js:672:10)
at /opt/modules/ambari/ambari-admin/src/main/resources/ui/admin-web/node_modules/bower/lib/core/Project.js:83:25
From previous event:
at Project.install (/opt/modules/ambari/ambari-admin/src/main/resources/ui/admin-web/node_modules/bower/lib/core/Project.js:91:10)
at install (/opt/modules/ambari/ambari-admin/src/main/resources/ui/admin-web/node_modules/bower/lib/commands/install.js:29:20)
at /opt/modules/ambari/ambari-admin/src/main/resources/ui/admin-web/node_modules/bower/lib/commands/index.js:33:28
From previous event:
at withLogger (/opt/modules/ambari/ambari-admin/src/main/resources/ui/admin-web/node_modules/bower/lib/commands/index.js:40:14)
at Function.runFromArgv [as line] (/opt/modules/ambari/ambari-admin/src/main/resources/ui/admin-web/node_modules/bower/lib/commands/index.js:30:16)
at Object.<anonymous> (/opt/modules/ambari/ambari-admin/src/main/resources/ui/admin-web/node_modules/bower/lib/bin/bower.js:83:26)
Console trace:
Error
at StandardRenderer.error (/opt/modules/ambari/ambari-admin/src/main/resources/ui/admin-web/node_modules/bower/lib/renderers/StandardRenderer.js:88:37)
at Logger.<anonymous> (/opt/modules/ambari/ambari-admin/src/main/resources/ui/admin-web/node_modules/bower/lib/bin/bower.js:113:30)
at emitOne (events.js:77:13)
at Logger.emit (events.js:169:7)
at Logger.emit (/opt/modules/ambari/ambari-admin/src/main/resources/ui/admin-web/node_modules/bower/lib/node_modules/bower-logger/lib/Logger.js:29:39)
at /opt/modules/ambari/ambari-admin/src/main/resources/ui/admin-web/node_modules/bower/lib/commands/index.js:49:24
at _rejected (/opt/modules/ambari/ambari-admin/src/main/resources/ui/admin-web/node_modules/bower/lib/node_modules/q/q.js:864:24)
at /opt/modules/ambari/ambari-admin/src/main/resources/ui/admin-web/node_modules/bower/lib/node_modules/q/q.js:890:30
at Promise.when (/opt/modules/ambari/ambari-admin/src/main/resources/ui/admin-web/node_modules/bower/lib/node_modules/q/q.js:1142:31)
at Promise.promise.promiseDispatch (/opt/modules/ambari/ambari-admin/src/main/resources/ui/admin-web/node_modules/bower/lib/node_modules/q/q.js:808:41)
System info:
Bower version: 1.8.8
Node version: 4.5.0
OS: Linux 5.15.153.1-microsoft-standard-WSL2 x64
[root@centos1 admin-web]#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
该错误表示 Bower 在尝试从指定的注册源请求 Angular 包时,由于 SSL 证书过期,导致请求失败。这使得我无法顺利获取所需的依赖项,进而影响了项目的进展。
提示
SSL 证书过期的问题会导致依赖包无法正常安装,项目无法顺利推进。及早识别并解决该问题,避免项目进度延误。
# 2️⃣ 解决方案 💡
以下是我针对该问题提出的几种解决方案:
检查证书状态 🔍:
- 首先,我访问了
https://registry.bower.io
,查看该网站的 SSL 证书是否真的过期。这一检查步骤帮助我确认了问题的根本原因。
- 首先,我访问了
更新注册源 🔄:
- 如果确认证书已经过期,我考虑了更换注册源的方案。在很多情况下,Bower 的默认源可能会出现不可用或不稳定的情况,因此,替换为更可靠的源是一个不错的选择。
使用 GitHub 安装依赖包 🌐:
- 作为替代方案,我可以直接从 GitHub 安装需要的包。通过指定 GitHub 上的包链接,绕过 SSL 问题,避免证书过期带来的困扰。
调整 Bower 配置 ⚙️:
- 如果其他方案无法解决问题,我可以在 Bower 配置文件中添加
"strict-ssl": false
,临时禁用 SSL 验证。尽管这不是长期推荐的做法,但可以在短期内帮助我快速恢复依赖安装,避免影响项目进度。
- 如果其他方案无法解决问题,我可以在 Bower 配置文件中添加
# 3️⃣ 我的解决办法
由于在国内访问 Bower 镜像源非常困难,且大部分源都无法使用,我采取了以下几种方式来解决该问题:
禁用 SSL 验证:我在
.bowerrc
配置文件中添加了如下配置:{ "registry": "https://registry.bower.io/", "strict-ssl": false, "analytics": false, "shorthand-resolver": "https://ghp.ci/https://github.com/{{owner}}/{{package}}.git", "directory": "app/bower_components" }
1
2
3
4
5
6
7通过这种方式,我能够绕过证书验证,快速安装依赖,避免了由于证书过期导致的安装失败。
直接使用 GitHub 作为源:在安装 Angular 时,我直接指定从 GitHub 获取包:
bower install angular#1.8.2 --allow-root
1这样不仅解决了证书问题,还能确保我获取到最新版本的依赖包。
后续监控和修复:虽然临时禁用了 SSL 验证解决了当前问题,但我会继续关注 Bower 证书的更新和国内镜像的可用性。未来我计划恢复 SSL 验证,以保障依赖管理的安全性。
笔记
在解决证书过期的问题时,注意根据项目实际情况选择合适的替代方案。同时,及时更新依赖源和证书,保持项目的稳定性和安全性。