使用Let’s Encrypt证书运行create-react-app开发HTTPS服务报错求助
解决create-react-app开发模式下Let’s Encrypt证书密钥不兼容问题
问题原因
Let’s Encrypt默认颁发的是ECDSA类型密钥的证书,而create-react-app依赖的webpack-dev-server旧版本对ECDSA密钥的支持存在兼容性问题,导致出现error:03000096:digital envelope routines::operation not supported for this keytype错误。
解决方案
方案一:生成RSA类型的自签证书(开发环境推荐)
开发环境下可以用OpenSSL生成兼容的RSA证书,步骤如下:
- 打开终端,执行以下命令生成证书和密钥:
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes
- 将生成的
key.pem和cert.pem替换到你的./HTTPS目录下 - 保持
.env文件的配置不变,重新启动React应用
方案二:自定义webpack-dev-server配置以支持ECDSA密钥
如果坚持使用Let’s Encrypt的证书,需要修改webpack-dev-server的配置:
- 安装
react-app-rewired工具(无需eject项目):
npm install react-app-rewired --save-dev
- 在项目根目录创建
config-overrides.js文件,添加以下内容:
const fs = require('fs'); const path = require('path'); module.exports = function override(config, env) { if (env === 'development') { config.devServer = { ...config.devServer, https: { key: fs.readFileSync(path.resolve(__dirname, './HTTPS/key.pem')), cert: fs.readFileSync(path.resolve(__dirname, './HTTPS/cert.pem')), minVersion: 'TLSv1.2' } }; } return config; };
- 修改
package.json中的启动脚本:
将原有的"start": "react-scripts start"替换为:
"start": "react-app-rewired start"
- 重新启动React应用
方案三:升级Node.js版本
旧版本Node.js对ECDSA密钥的支持不完善,升级到16.x及以上的LTS版本后,可能无需修改配置即可正常使用Let’s Encrypt的证书。
内容的提问来源于stack exchange,提问作者Dutu
相关产品推荐
相关产品推荐

