我正在寻找一种方法将自定义CA添加到NPM,以便我可以使用该证书从某个位置下载(一个内部git服务器),而不必使用“nuke all CA-checking”(指关闭所有CA检查)。
npm config set strict-ssl false
有没有办法实现这个功能?如果没有,是否已经存在缺陷?
cafile
。npm config set cafile /path/to/cert.pem
您还可以直接配置ca
字符串。
npm config set ca "cert string"
ca
也可以是证书字符串的数组。在您的 .npmrc
文件中:
ca[]="cert 1 base64 string"
ca[]="cert 2 base64 string"
npm config
命令将相关配置项保存到您的 ~/.npmrc
文件中:
cafile=/path/to/cert.pem
注意:这些 CA 设置将覆盖 npm 使用的默认“真实世界”证书颁发机构查找。如果您尝试通过未由您的 CA 证书签名的 https 访问任何公共 npm 注册表,则会出现错误。
因此,如果您需要同时支持公共 https npm 注册表和自己的注册表,您可以使用 基于 Mozilla 的 curl CA 捆绑包 并将您的 CA 证书附加到 cacert.pem
文件中:curl -o ~/.npm.certs.pem https://curl.se/ca/cacert.pem
cat my-ca-cert.pem >> ~/.npm.certs.pem
npm config set cafile ~/.npm.certs.pem
很遗憾,npm的CA证书包无法编辑,因为它是在源代码中提供的(感谢tomekwi)。但是nitzel提供了一种通用的Node.js方法,可以通过NODE_EXTRA_CA_CERTS
环境变量添加证书。
RHEL注意事项:如果您使用基于RHEL的发行版并且使用RHEL打包的nodejs/npm,则可以使用标准的update-ca-trust
方法,因为RedHat将其软件包指向系统CA证书。
$env:NODE_EXTRA_CA_CERTS=path\to\certificate.pem; npm install
(由评论中的Marc指出)
set NODE_EXTRA_CA_CERTS=C:\\path\\to\\certificate.pem
npm install
export NODE_EXTRA_CA_CERTS=/path/to/trusted/CA.pem
npm install
/path/to
只适用于Linux... - Marc/
和\
(并使用\
来转义字符,而不是\
)。在markdown中转义\
和\
真是太困难了。._. - nitzel
NODE_DEBUG=tls,https,http npm -ddd command
,检查你的HTTP连接是否设置了CA,并查看TLS握手的过程。 - MattJava
的%jdk%/%jre%/lib/security
中的cacerts
。在.npmrc
中显示了正确的路径。但仍然出现错误,关于npm ERR! fatal: unable to access <URL>: SSL certificate problem: unable to get local issuer certificate
。你有什么想法如何解决吗? - Jimit Patelkeytool
进行导出,才能在Java之外的环境中使用。 - Matt