React Native本地主机的SSL证书无效。

3
我几周前开始使用Expo启动了这个React Native项目,一切都很顺利,直到昨天。
当我运行expo start时,像往常一样得到了Metro Bundler,并点击“在Web浏览器中运行”,然后VS Code终端提示我输入本地主机证书的密码。我不知道那是什么,但有this link指向某个本地SSL签名工具,我对此一无所知。即使有了链接,我也不确定应该输入什么密码,所以我只是按下回车键而没有输入任何内容,现在就卡在这里了。
我无法再在浏览器中运行我的应用程序。每当我尝试这样做时,我都会得到以下错误:

halp

而且日志只有这个:

PS D:\Projects\GroceryApp\GroceryApp.Web> expo start 在 D:\Projects\GroceryApp\GroceryApp.Web 启动项目 Expo DevTools 正在 http://localhost:19003 运行 在浏览器中打开 DevTools...(按 shift-d 取消) 确保自动 SSL 证书已创建(您可能需要使用 sudo 重新运行) 在端口 19001 上启动 Metro Bundler。 调试模式在此环境中不受支持 检查 React Native 的新版本 当前版本:0.61.4 未找到发布缓存 未找到发布缓存 在 GitHub 上检查更新版本 未找到发布缓存 将 "6d6386b01438c6ef0acd213d304b5839" 保存到缓存中 未找到发布缓存 未找到发布缓存 最新版本:0.60.0 隧道准备就绪。 exp://192.168.0.108:19000 二维码 要使用实时重新加载运行应用程序,请选择以下之一: • 在 Android 或 iOS 上的 Expo 客户端中登录 @redacted。您的项目将自动出现在“项目”选项卡中。 • 使用 Expo 应用程序(Android)或相机应用程序(iOS)扫描上面的 QR 码。 • 按 a 以在 Android 模拟器上运行,或按 w 以在 Web 上运行。 • 按 e 发送带有链接的电子邮件到您的手机。 Expo 按 ? 显示所有可用命令的列表。 您的项目日志将出现在下方。按 Ctrl+C 退出。

因此,我尝试通过按下W来强制它,然后我得到了这个:

尝试在Web浏览器中打开项目... (node:15116) UnhandledPromiseRejectionWarning: 错误:证书"D:\Projects\GroceryApp\GroceryApp.Web.expo\web\development\ssl\cert-localhost.pem"无效。 error:2007E073:BIO例程:BIO_new_mem_buf:null参数 在validateKeyAndCerts (C:\Users\Redacted\AppData\Roaming\npm\node_modules\expo-cli\node_modules@expo\webpack-config\src\addons\withDevServer.ts:26:11) 在getHttpsConfig (C:\Users\Redacted\AppData\Roaming\npm\node_modules\expo-cli\node_modules@expo\webpack-config\src\addons\withDevServer.ts:62:5) 在createDevServer (C:\Users\Redacted\AppData\Roaming\npm\node_modules\expo-cli\node_modules@expo\webpack-config\src\addons\withDevServer.ts:191:12) 在Object.withDevServer (C:\Users\Redacted\AppData\Roaming\npm\node_modules\expo-cli\node_modules@expo\webpack-config\src\addons\withDevServer.ts:101:31) 在Object.(C:\Users\Redacted\AppData\Roaming\npm\node_modules\expo-cli\node_modules@expo\webpack-config\src\webpack.config.ts:419:21) 在Generator.next () 在C:\Users\Redacted\AppData\Roaming\npm\node_modules\expo-cli\node_modules@expo\webpack-config\webpack\webpack.config.js:8:71
在new Promise () 在__awaiter (C:\Users\Redacted\AppData\Roaming\npm\node_modules\expo-cli\node_modules@expo\webpack-config\webpack\webpack.config.js:4:12) 在Object.default_1 [as default] (C:\Users\Redacted\AppData\Roaming\npm\node_modules\expo-cli\node_modules@expo\webpack-config\webpack\webpack.config.js:87:12) 在C:\Users\Redacted\AppData\Roaming\npm\node_modules\expo-cli\node_modules@expo\webpack-config\src\index.ts:21:71 在Generator.next () 在C:\Users\Redacted\AppData\Roaming\npm\node_modules\expo-cli\node_modules@expo\webpack-config\webpack\index.js:8:71 在new Promise () 在__awaiter (C:\Users\Redacted\AppData\Roaming\npm\node_modules\expo-cli\node_modules@expo\webpack-config\webpack\index.js:4:12)
在createWebpackConfigAsync (C:\Users\Redacted\AppData\Roaming\npm\node_modules\expo-cli\node_modules@expo\webpack-config\webpack\index.js:26:12)

(node:15116) UnhandledPromiseRejectionWarning: 未处理的promise拒绝警告。这个错误是由于在没有catch块的异步函数中抛出,或者拒绝了一个没有使用.catch()处理的promise引起的。要在未处理的promise拒绝时终止Node.js进程,请使用CLI标志--unhandled-rejections=strict(请参阅https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode)。 (rejection id: 6) (node:15116) [DEP0018] DeprecationWarning: 未处理的promise拒绝已被弃用。将来,未处理的promise拒绝将以非零退出代码终止Node.js进程。

这是有道理的,因为那个文件完全是空的。

抱歉发布的内容很长,我想确保所有日志都在这里。

请帮忙。提前致谢。


我也没有再被提示输入密码了,我很确定应该输入我的Windows密码,但我不知道如何更改。 - Guilherme Lofrano Corneto
我刚开始使用Expo,但是我遇到了相同的症状。在经过一系列“接受此CA证书?”消息后,我成功地让它工作了一次。然后我开始收到那些错误信息。我注意到cacert-local.pem文件为0字节。 - Joshua Engel
1
同样的问题。空的本地主机证书文件,如果你删除它,它会重新生成,再次为空。我已经对在本地主机上使用https失去了希望(特别是在这里和官方论坛上都缺乏答案的情况下)。如果你需要,可以使用expo start --no-https来运行它而不使用SSL。这就是我一直在使用的方法。 - Guilherme Lofrano Corneto
哦,太感谢了。这会帮助我开始。我希望他们在我深入研究之前就能解决它。(并且这不会阻止我做下一件事情,也就是尝试使用Amplify进行登录。)我有一种感觉,某个地方升级了某些东西,然后断开连接就会连锁反应。 - Joshua Engel
1
有一个新版本的expo(3.19.2),它稍微好一些。我遇到了一个错误:“›无法为HTTPS自签名SSL证书。回退到不安全的https。您可以重新运行--no-https以禁用HTTPS,或删除.expo文件夹并重试。”删除.expo没有帮助,但如果我接受它的虚假证书,我认为它可以工作。 - Joshua Engel
是的,更新到较新版本似乎解决了问题。现在我的浏览器抱怨“不安全”的证书,但至少我可以使用我的https本地域名。不幸的是,删除 .expo 并没有起到任何作用。 - Guilherme Lofrano Corneto
2个回答

1

当您使用选项--https首次启动Expo应用程序时,它将创建一个初始不受信任的证书,在我的Mac上,该证书位于此处:

/Users/myname/Library/Application Support/devcert/certificate-authority/certificate.cert

该证书用于生成由expo服务器用于TLS的.pem文件(位于此处:.expo/tls)。删除.pem文件是无用的,因为expo将从第一次尝试使用TLS/https提供应用程序时创建的开发证书重新生成它们。因此,解决方案是将开发证书添加到受信任根列表中,这可以在OSX上完成:

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain -p ssl -p basic '/Users/myname/Library/Application Support/devcert/certificate-authority/certificate.cert'

也许有人可以提供类似的解决方案,适用于Windows和/或Linux。


-1
我建议升级到更高版本的Expo并重新运行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接