沃梦达 / 编程问答 / php问题 / 正文

尝试访问Microsoft Graph时无法获取本地颁发者证书(&Q)

quot;unable to get local issuer certificatequot; when trying to access Microsoft Graph(尝试访问Microsoft Graph时无法获取本地颁发者证书(Q))

本文介绍了尝试访问Microsoft Graph时无法获取本地颁发者证书(&Q)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要将我的Symfony4应用程序配置为使用msgraph-sdk-php库阅读和发送电子邮件。

我的第一次体验是这段代码:

    $guzzle = new GuzzleHttpClient();
    $url = 'https://login.microsoftonline.com/' . $tenantId . '/oauth2/token?api-version=1.0';
    $token = json_decode($guzzle->post($url, [
        'form_params' => [
            'client_id' => $clientId,
            'client_secret' => $clientSecret,
            'resource' => 'https://graph.microsoft.com/',
            'grant_type' => 'client_credentials',
        ],
        'verify' => false
    ])->getBody()->getContents());
    $accessToken = $token->access_token;

    $graph = new Graph();
    $graph->setAccessToken($accessToken);

    try {
        $user = $graph->createRequest("GET", "/me")
            ->setReturnType(User::class)
            ->execute();
    } catch (GraphException $e) {
        $user=(object) ['getGivenName'=>$e->getMessage()];
    }

    return "Hello, I am $user->getGivenName() ";

但随后symfony向我显示了一个例外页面,并显示以下消息:

cURL错误60:SSL证书问题:无法获取本地颁发者证书

我应该做些什么来克服这个问题?

推荐答案

在Windows系统上,cURL有时无法访问CA-Certs。因此,您必须下载CA-Files并将其添加到Curl。您可以在此处下载证书:

http://curl.haxx.se/docs/caextract.html

curl_setopt($ch, CURLOPT_CAINFO, __DIR__ . "/certs/cacert.pem");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);

因此,若要临时修复该问题,您可以禁用对等验证,但您应该仅针对测试执行此操作。

$client->setDefaultOption('verify', false);

那么应该可以连接。若要添加证书,您可以将其添加到以下位置,但您必须先下载证书。

$client = new GuzzleHttpClient();
$client->setDefaultOption('verify', 'curl-ca-bundle.crt');

或最后一个解决方案将ca文件添加到您的php.ini(来自curl.haxx.se的文件):

curl.cainfo = "[pathtothisfile]cacert.pem"

这篇关于尝试访问Microsoft Graph时无法获取本地颁发者证书(&Q)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:尝试访问Microsoft Graph时无法获取本地颁发者证书(&Q)