我使用了来自Let's Encrypt的TLS证书,react-scripts通过".env"文件(使用环境变量SSL_CRT_FILE和SSL_KEY_FILE)找到它。最近,我更新了证书,并将其类型从RSA更改为ECDSA(因为Let's Encrypt推荐这样做)。当我运行"yarn start"时,出现了以下错误:
The certificate "XXXXXX\fullchain.pem" is invalid.
error:0608B096:digital envelope routines:EVP_PKEY_encrypt_init:operation not supported for this keytype
我尝试重新创建我的'node_modules'目录,但这没有帮助。我降级回RSA证书,问题消失了。
4条答案
按热度按时间ee7vknir1#
这是因为在 create-react-app/packages/react-scripts/config/getHttpsConfig.js 文件的第19行,
validateKeyAndCerts
函数错误地假设在验证密钥时,密钥可以用于加密/解密。对于RSA密钥这是正确的,但对于EC密钥这是错误的。要么删除验证,要么更改验证以检查签名/验证是否成功。vsaztqbk2#
orenh1提交了一个PR #13123,它能够在不影响标准功能的情况下验证ECDSA。
bq8i3lrv3#
我看到了PR(谢谢!)。这个PR可以移动,但不能解决我的应用中的问题。
在我看来,除了从certbot生成RSA(而不是默认的ECDSA)之外,我没有其他选择。
根据PR,它只更改了一个文件('getHttpsConfig.js')。
我手动将这些更改合并到我的应用程序中,并在VSC调试器中逐步执行代码以显示更改允许该特定例程在没有错误的情况下完成。
然而,应用程序后来会因为不同的错误而失败。以下是在项目目录中的命令行输出
yarn start
:3ks5zfa04#
我成功地通过更新'react-scripts'并应用上述PR使CRA工作。
我使用yarn进行升级:
这次将react-scripts升级到了"^5.0.1"。
然后根据上述PR中的更改编辑了"getHttpsConfig.js"。
当我使用"yarn start"运行应用程序时,我在调试控制台中收到以下抱怨:
至少现在我会忽略这些抱怨。