【发布时间】:2014-07-10 09:54:44
【问题描述】:
我正在寻找一种将自定义 CA 添加到 NPM 的方法,以便我可以使用所述证书(内部 git 服务器)从某个位置下载,而无需使用所有 CA 检查
npm config set strict-ssl false
有没有办法实现这个? (如果没有:是否已经存在缺陷?)
【问题讨论】:
我正在寻找一种将自定义 CA 添加到 NPM 的方法,以便我可以使用所述证书(内部 git 服务器)从某个位置下载,而无需使用所有 CA 检查
npm config set strict-ssl false
有没有办法实现这个? (如果没有:是否已经存在缺陷?)
【问题讨论】:
您可以将 npm 指向 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 使用的默认“真实世界”证书颁发机构查找。如果您尝试通过 https 使用任何未经您的 CA 证书签名的公共 npm 注册表,您将收到错误。
如果您需要同时支持公共 https npm 注册表以及您自己的注册表,您可以使用 curl's Mozilla based CA bundle 并将您的 CA 证书附加到 cacert.pem 文件中:
curl https://curl.haxx.se/ca/cacert.pem > ~/.npm.certs.pem
cat my-ca-cert.pem >> ~/.npm.certs.pem
npm config set cafile ~/.npm.certs.pem
不幸的是,npm 的 CA 包不可编辑,因为它在 source code 中提供(感谢 tomekwi)但 nitzel has provided a generic Node.js method 通过 NODE_EXTRA_CA_CERTS 环境变量附加证书。
RHEL 注意:如果您碰巧使用的是基于 RHEL 的发行版和 RHEL 打包的 nodejs/npm,您可以使用标准的 update-ca-trust method 作为 RedHat 指向他们的包在系统 CA 上。
【讨论】:
NODE_DEBUG=tls,https,http npm -ddd command检查你的http连接是否有CA设置以及TLS握手在做什么
%jdk%/%jre%/lib/security 的cacerts 的Java。它在.npmrc 中显示正确的路径。关于npm ERR! fatal: unable to access <URL>: SSL certificate problem: unable to get local issuer certificate 的错误仍然存在。关于这个如何解决它的任何想法??
keytool 才能在 java 之外使用。
如果Matts Answer 没有帮助您:
$env:NODE_EXTRA_CA_CERTS=path\to\certificate.pem; npm install 在 Windows Powershell 中为我工作。
对于 DOS/cmd(由 cmets 中的Marc 指出)
set NODE_EXTRA_CA_CERTS=C:\\path\\to\\certificate.pem
npm install
【讨论】:
/path/to 只能在 Linux 中运行...
set NODE_EXTRA_CA_CERTS=C:\\bcp\\cafile.pem(在 DOS 中)
/ 和 \(并使用 ` 而不是 \ 来转义字符)在中转义 ` 和 \ 真是太难了降价._.
export NODE_EXTRA_CA_CERTS=/path/to/trusted/CA.pemcredit