[Bug]: SSL peer certificate error while setting up token
- Dominant language
- PHP
- Stars
- 4.6k
- Forks
- 308
- PR merge metrics
- No merged PRs in 30d
Description
### System architecture
Windows
### PHP Version
PHP 8.4
### Bug description
I installed Expose via Composer recently. When I try to set up the token with
`expose token ...` I get the following error:
```
production.ERROR: cURL error 60: SSL peer certificate or SSH remote key was not OK (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://expose.dev/api/client/token {"exception":"[object] (GuzzleHttp\\Exception\\RequestException(code: 0): cURL error 60: SSL peer certificate or SSH remote key was not OK (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://expose.dev/api/client/token at phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php:276)
```
I tried reinstalling it, but nothing helps.
### Steps to reproduce
1. Install Expose using Composer
2. run `expose token ...` command
### Relevant log output
```shell
[2025-08-05 11:41:41] production.ERROR: cURL error 60: SSL peer certificate or SSH remote key was not OK (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://expose.dev/api/client/token {"exception":"[object] (GuzzleHttp\\Exception\\RequestException(code: 0): cURL error 60: SSL peer certificate or SSH remote key was not OK (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://expose.dev/api/client/token at phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php:276)
[stacktrace]
#0 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php(205): GuzzleHttp\\Handler\\CurlFactory::createRejection(Object(GuzzleHttp\\Handler\\EasyHandle), Array)
#1 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php(157): GuzzleHttp\\Handler\\CurlFactory::finishError(Object(GuzzleHttp\\Handler\\CurlHandler), Object(GuzzleHttp\\Handler\\EasyHandle), Object(GuzzleHttp\\Handler\\CurlFactory))
#2 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php(47): GuzzleHttp\\Handler\\CurlFactory::finish(Object(GuzzleHttp\\Handler\\CurlHandler), Object(GuzzleHttp\\Handler\\EasyHandle), Object(GuzzleHttp\\Handler\\CurlFactory))
#3 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php(28): GuzzleHttp\\Handler\\CurlHandler->__invoke(Object(GuzzleHttp\\Psr7\\Request), Array)
#4 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php(48): GuzzleHttp\\Handler\\Proxy::{closure:GuzzleHttp\\Handler\\Proxy::wrapSync():27}(Object(GuzzleHttp\\Psr7\\Request), Array)
#5 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/illuminate/http/Client/PendingRequest.php(1339): GuzzleHttp\\Handler\\Proxy::{closure:GuzzleHttp\\Handler\\Proxy::wrapStreaming():47}(Object(GuzzleHttp\\Psr7\\Request), Array)
#6 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/illuminate/http/Client/PendingRequest.php(1305): Illuminate\\Http\\Client\\PendingRequest->{closure:{closure:Illuminate\\Http\\Client\\PendingRequest::buildStubHandler():1326}:1327}(Object(GuzzleHttp\\Psr7\\Request), Array)
#7 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/illuminate/http/Client/PendingRequest.php(1291): Illuminate\\Http\\Client\\PendingRequest->{closure:{closure:Illuminate\\Http\\Client\\PendingRequest::buildRecorderHandler():1303}:1304}(Object(GuzzleHttp\\Psr7\\Request), Array)
#8 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php(64): Illuminate\\Http\\Client\\PendingRequest->{closure:{closure:Illuminate\\Http\\Client\\PendingRequest::buildBeforeSendingHandler():1289}:1290}(Object(GuzzleHttp\\Psr7\\Request), Array)
#9 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/guzzlehttp/guzzle/src/Middleware.php(38): GuzzleHttp\\PrepareBodyMiddleware->__invoke(Object(GuzzleHttp\\Psr7\\Request), Array)
#10 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php(71): GuzzleHttp\\Middleware::{closure:{closure:GuzzleHttp\\Middleware::cookies():28}:29}(Object(GuzzleHttp\\Psr7\\Request), Array)
#11 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/guzzlehttp/guzzle/src/Middleware.php(63): GuzzleHttp\\RedirectMiddleware->__invoke(Object(GuzzleHttp\\Psr7\\Request), Array)
#12 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/guzzlehttp/guzzle/src/HandlerStack.php(75): GuzzleHttp\\Middleware::{closure:{closure:GuzzleHttp\\Middleware::httpErrors():60}:61}(Object(GuzzleHttp\\Psr7\\Request), Array)
#13 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/guzzlehttp/guzzle/src/Client.php(333): GuzzleHttp\\HandlerStack->__invoke(Object(GuzzleHttp\\Psr7\\Request), Array)
#14 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/guzzlehttp/guzzle/src/Client.php(169): GuzzleHttp\\Client->transfer(Object(GuzzleHttp\\Psr7\\Request), Array)
#15 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/guzzlehttp/guzzle/src/Client.php(189): GuzzleHttp\\Client->requestAsync('POST', Object(GuzzleHttp\\Psr7\\Uri), Array)
#16 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/illuminate/http/Client/PendingRequest.php(1137): GuzzleHttp\\Client->request('POST', 'https://expose....', Array)
#17 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/illuminate/http/Client/PendingRequest.php(907): Illuminate\\Http\\Client\\PendingRequest->sendRequest('POST', 'https://expose....', Array)
#18 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/illuminate/support/helpers.php(338): Illuminate\\Http\\Client\\PendingRequest->{closure:Illuminate\\Http\\Client\\PendingRequest::send():905}(1)
#19 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/illuminate/http/Client/PendingRequest.php(905): retry(0, Object(Closure), 100, Object(Closure))
#20 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/illuminate/http/Client/PendingRequest.php(804): Illuminate\\Http\\Client\\PendingRequest->send('POST', 'https://expose....', Array)
#21 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/app/Traits/FetchesPlatformData.php(30): Illuminate\\Http\\Client\\PendingRequest->post('https://expose....', Array)
#22 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/illuminate/cache/Repository.php(468): Expose\\Client\\Commands\\StoreAuthenticationTokenCommand->{closure:Expose\\Client\\Traits\\FetchesPlatformData::exposeToken():26}()
#23 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/illuminate/cache/CacheManager.php(453): Illuminate\\Cache\\Repository->rememberForever('expose_token_88...', Object(Closure))
#24 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/illuminate/support/Facades/Facade.php(361): Illuminate\\Cache\\CacheManager->__call('rememberForever', Array)
#25 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/app/Traits/FetchesPlatformData.php(26): Illuminate\\Support\\Facades\\Facade::__callStatic('rememberForever', Array)
#26 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/app/Commands/StoreAuthenticationTokenCommand.php(58): Expose\\Client\\Commands\\StoreAuthenticationTokenCommand->exposeToken()
#27 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/illuminate/container/BoundMethod.php(36): Expose\\Client\\Commands\\StoreAuthenticationTokenCommand->handle()
#28 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/illuminate/container/Util.php(43): Illuminate\\Container\\BoundMethod::{closure:Illuminate\\Container\\BoundMethod::call():35}()
#29 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/illuminate/container/BoundMethod.php(95): Illuminate\\Container\\Util::unwrapIfClosure(Object(Closure))
#30 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/illuminate/container/BoundMethod.php(35): Illuminate\\Container\\BoundMethod::callBoundMethod(Object(LaravelZero\\Framework\\Application), Array, Object(Closure))
#31 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/illuminate/container/Container.php(696): Illuminate\\Container\\BoundMethod::call(Object(LaravelZero\\Framework\\Application), Array, Array, NULL)
#32 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/illuminate/console/Command.php(213): Illuminate\\Container\\Container->call(Array)
#33 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/symfony/console/Command/Command.php(279): Illuminate\\Console\\Command->execute(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#34 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/illuminate/console/Command.php(182): Symfony\\Component\\Console\\Command\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#35 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/symfony/console/Application.php(1094): Illuminate\\Console\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#36 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/symfony/console/Application.php(342): Symfony\\Component\\Console\\Application->doRunCommand(Object(Expose\\Client\\Commands\\StoreAuthenticationTokenCommand), Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#37 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/symfony/console/Application.php(193): Symfony\\Component\\Console\\Application->doRun(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#38 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/laravel-zero/foundation/src/Illuminate/Foundation/Console/Kernel.php(196): Symfony\\Component\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#39 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/vendor/laravel-zero/framework/src/Kernel.php(111): Illuminate\\Foundation\\Console\\Kernel->handle(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#40 phar://C:/Users/micha/AppData/Roaming/Composer/vendor/exposedev/expose/builds/expose/expose(34): LaravelZero\\Framework\\Kernel->handle(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#41 C:\\Users\\micha\\AppData\\Roaming\\Composer\\vendor\\exposedev\\expose\\builds\\expose(15): require('phar://C:/Users...')
#42 C:\\Users\\micha\\AppData\\Roaming\\Composer\\vendor\\bin\\expose(119): include('C:\\\\Users\\\\micha\\\\...')
#43 {main}
"}
In CurlFactory.php line 276:
cURL error 60: SSL peer certificate or SSH remote key was not OK (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://expose.dev/api/client/token
```
Contributor guide
Assessment
This issue has not been assessed yet.