自定义JHipster蓝图无法连接含内部CA的内部注册表求助
问题场景
开发JHipster蓝图时,执行命令jhipster --blueprints my-blueprint,选择安装JHipster Marketplace的其他生成器(输入y)后,触发报错:
WARNING! Unable to contact server to fetch additional modules: self signed certificate in certificate chain
已通过NODE_EXTRA_CA_CERTS环境变量指定内部证书,甚至直接在命令前显式声明该变量(如NODE_EXTRA_CA_CERTS=path/to/cert.cer jhipster --blueprints my-blueprint),但问题未解决。
可行解决方法
转换证书为PEM格式:
NODE_EXTRA_CA_CERTS仅支持PEM格式证书,如果你的证书是CER/CRT等DER格式,先用OpenSSL转换:openssl x509 -inform der -in path/to/cert.cer -out path/to/cert.pem之后将环境变量指向转换后的PEM文件。
配置npm证书信任:JHipster底层依赖npm处理模块,需同步配置npm的证书:
# 配置信任的CA证书 npm config set cafile "path/to/cert.pem" # 若仍有问题,临时关闭严格SSL校验(仅测试用,生产环境不建议) npm config set strict-ssl false修改JHipster请求的CA配置:如果上述方法无效,可能是JHipster的HTTP客户端未读取系统证书。可找到JHipster核心中Marketplace相关代码(通常在
generator-jhipster/lib/cli/marketplace.js),在发起HTTPS请求时显式指定CA:const https = require('https'); const fs = require('fs'); const caCert = fs.readFileSync('path/to/cert.pem'); // 修改原请求配置,添加ca选项 const requestOptions = { hostname: 'marketplace.jhipster.tech', path: '/api/modules', ca: caCert }; https.get(requestOptions, (res) => { // 原有响应处理逻辑 });配置网络代理(如有需要):若处于内部代理网络环境,除证书外还需配置代理:
# npm代理配置 npm config set proxy http://your-proxy-address:port npm config set https-proxy http://your-proxy-address:port # 系统环境变量代理 export HTTP_PROXY=http://your-proxy-address:port export HTTPS_PROXY=http://your-proxy-address:port确保代理服务器已信任你的内部证书。
内容的提问来源于stack exchange,提问作者javafueled

