create-react-app ECDSA证书不受支持

v9tzhpje  于 2个月前  发布在  React
关注(0)|答案(4)|浏览(35)

我使用了来自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证书,问题消失了。

ee7vknir

ee7vknir1#

这是因为在 create-react-app/packages/react-scripts/config/getHttpsConfig.js 文件的第19行,validateKeyAndCerts 函数错误地假设在验证密钥时,密钥可以用于加密/解密。对于RSA密钥这是正确的,但对于EC密钥这是错误的。要么删除验证,要么更改验证以检查签名/验证是否成功。

vsaztqbk

vsaztqbk2#

orenh1提交了一个PR #13123,它能够在不影响标准功能的情况下验证ECDSA。

bq8i3lrv

bq8i3lrv3#

我看到了PR(谢谢!)。这个PR可以移动,但不能解决我的应用中的问题。
在我看来,除了从certbot生成RSA(而不是默认的ECDSA)之外,我没有其他选择。
根据PR,它只更改了一个文件('getHttpsConfig.js')。
我手动将这些更改合并到我的应用程序中,并在VSC调试器中逐步执行代码以显示更改允许该特定例程在没有错误的情况下完成。
然而,应用程序后来会因为不同的错误而失败。以下是在项目目录中的命令行输出yarn start:

Starting the development server...

/home/tms/frontend/gate_dashboard/node_modules/react-scripts/scripts/start.js:19
  throw err;
  ^

Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:71:19)
    at Object.createHash (node:crypto:140:10)
    at module.exports (/home/tms/frontend/gate_dashboard/node_modules/webpack/lib/util/createHash.js:135:53)
    at NormalModule._initBuildHash (/home/tms/frontend/gate_dashboard/node_modules/webpack/lib/NormalModule.js:417:16)
    at /home/tms/frontend/gate_dashboard/node_modules/webpack/lib/NormalModule.js:452:10
    at /home/tms/frontend/gate_dashboard/node_modules/webpack/lib/NormalModule.js:323:13
    at /home/tms/frontend/gate_dashboard/node_modules/loader-runner/lib/LoaderRunner.js:367:11
    at /home/tms/frontend/gate_dashboard/node_modules/loader-runner/lib/LoaderRunner.js:233:18
    at context.callback (/home/tms/frontend/gate_dashboard/node_modules/loader-runner/lib/LoaderRunner.js:111:13)
    at /home/tms/frontend/gate_dashboard/node_modules/react-scripts/node_modules/babel-loader/lib/index.js:59:103 {
  opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
  library: 'digital envelope routines',
  reason: 'unsupported',
  code: 'ERR_OSSL_EVP_UNSUPPORTED'
}

Node.js v19.8.1
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
3ks5zfa0

3ks5zfa04#

我成功地通过更新'react-scripts'并应用上述PR使CRA工作。
我使用yarn进行升级:

yarn remove react-scripts
yarn add react-scripts

这次将react-scripts升级到了"^5.0.1"。
然后根据上述PR中的更改编辑了"getHttpsConfig.js"。
当我使用"yarn start"运行应用程序时,我在调试控制台中收到以下抱怨:

(node:18650) [DEP_WEBPACK_DEV_SERVER_HTTPS] DeprecationWarning: 'https' option is deprecated. Please use the 'server' option.
(Use `node --trace-deprecation ...` to show where the warning was created)
(node:18650) [DEP_WEBPACK_DEV_SERVER_ON_AFTER_SETUP_MIDDLEWARE] DeprecationWarning: 'onAfterSetupMiddleware' option is deprecated. Please use the 'setupMiddlewares' option.
(node:18650) [DEP_WEBPACK_DEV_SERVER_ON_BEFORE_SETUP_MIDDLEWARE] DeprecationWarning: 'onBeforeSetupMiddleware' option is deprecated. Please use the 'setupMiddlewares' option.

至少现在我会忽略这些抱怨。

相关问题