当前位置: 首页 > 知识库问答 >
问题:

主机:localhost。不在证书的备用名称中

长孙智刚
2023-03-14

我在进行服务器端渲染时遇到以下错误。

RENDERING ERROR: { [Error: Network error: request to https://api-dev.xyz.io/graphql failed, reason: Hostname/IP doesn't match certificate's altnames: "Host: localhost. is not in the cert's altnames: DNS:*.xyz.io"]
  graphQLErrors: null,
  networkError: 
   { [FetchError: request to https://api-dev.xyz.io/graphql failed, reason: Hostname/IP doesn't match certificate's altnames: "Host: localhost. is not in the cert's altnames: DNS:*.xyz.io"]
     name: 'FetchError',
     message: 'request to https://api-dev.xyz.io/graphql failed, reason: Hostname/IP doesn\'t match certificate\'s altnames: "Host: localhost. is not in the cert\'s altnames: DNS:*.xyz.io"',
     type: 'system',
     errno: undefined,
     code: undefined },
  message: 'Network error: request to https://api-dev.xyz.io/graphql failed, reason: Hostname/IP doesn\'t match certificate\'s altnames: "Host: localhost. is not in the cert\'s altnames: DNS:*.xyz.io"',
  extraInfo: undefined }

注意:-我正在使用反应、redux、apollo-Client(GraphQL)和ExpressJS(NodeJS)。我向其发出请求的API服务器位于另一个域上,我无法对此进行任何更改。

在使用客户端渲染时,我没有遇到任何困难,一切都正常工作,但在使用服务器端渲染时,我遇到了上述错误。

所以我在服务器上尝试了以下方法,但仍然没有运气。

>

  • 添加自签名证书

    添加“rejectUnauthorized”:https选项中为false。

    const options = {
      'key': key,
      'cert': cert,
      'ca': [ fs.readFileSync('local-certificate.pem') ],
      'rejectUnauthorized':false
    };
    
    https.createServer(options, app).listen(httpsPort, '0.0.0.0', function onStart(err) {
      if (err) { console.log(err); }
      console.info('==> Listening on httpsPort %s. Open up http://0.0.0.0:%s/ in your browser.', httpsPort, options);
    });
    

    我还尝试在我的自签名证书中添加一个alt名称,并借助如何使用OpenSSL使用SubjectAltName生成自签名证书?

    是否有任何方法可以绕过证书验证,以便我的express server可以向另一个域上的API服务器发出具有有效证书的请求

    我仍然有点不确定我是否可以通过在我的终端(在我的快速服务器上)进行任何更改来修复它。

    请让我知道这方面的任何见解。

  • 共有3个答案

    伍溪叠
    2023-03-14

    错误消息指出服务器位于https://api-dev.xyz.io/graphql认为传入请求正被定向到https://localhost/graphql.因此,它失败了,因为SSL证书不安全https://localhost/.

    服务器端渲染是否会尝试对正在进行服务器端渲染的同一服务器执行fetch/API调用,以加载渲染的初始数据?如果是这样,客户端需要的来自API的初始数据是否可以直接传递到服务器端渲染,而不是尝试在服务器端渲染中对自身执行API调用?

    也许本教程可以用作示例参考。

    纪晨
    2023-03-14

    我相信迈克尔·兰迪斯(MichaelLandis)试图让大家明白这一点,但并没有完全提供解决方案。如果您的服务在192.168.100.100上本地运行,那么这需要在您的主机文件中(例如/etc/hosts on linux):

    192.168.100.100 api-dev.xyz.io
    

    需要向api-dev.xyz发出当前失败的请求。io,即使在SSR期间。更容易避免对“http[s]://localhost/…”的请求

    长孙嘉
    2023-03-14

    错误不是由您问题中的代码引起的。

    您所做的是创建一个新的HTTP服务器,该服务器将侦听httpsPort,并将绑定到所有本地IP地址。

    我建议您在绑定到所有本地IP地址时省略0.0.0.0,因为这是默认行为,但这不是问题。

    然后,您将为该服务器分配证书本地证书。pem,这意味着连接到此服务器的客户端将获得此证书。

    这部分代码中没有连接到任何外部API。

     类似资料:
    • 问题内容: 我尝试使用自签名证书连接到服务器。我使用此代码接受所有证书。 但是尽管如此,我收到以下错误: 我确定我的证书代码已执行,那么可能是什么问题? 问题答案: 您可以使用

    • 我被困在如何修复这个SSL错误上—— 我的SSL证书在Chrome上运行良好,但在Safari和Firefox上,如果我去www.domain.com而不是domain.com,就会出现主机名不匹配的错误 我已经使用Certbot为我的domain.com和www.domain.com域设置了SSL证书 当我在nginx上检查以确保证书存在时,我运行< code>sudo certbot - ng

    • 我试图从java调用Heroku的开发人员api,但是我得到了以下异常: 我的代码如下所示: https://stackoverflow.com/a/7266768 https://stackoverflow.com/a/3904473 https://stackoverflow.com/a/25356821 建议我应该重写证书主机名检查,这肯定违背了这一点(当然生产还没有准备好)?

    • 当我们试图从zuul访问安全的https REST点时,我们得到了以下异常。 服务通过POST请求在eureka注册。请找到下面的示例POST请求。 该服务通过POST请求向eureka注册。请查看下面的发帖请求示例。 如果我在上面的zuul配置中用相应的url替换serviceId,它可以正常工作。 密钥库。jks一直处于src/main/resources之下。此外,还将密钥存储条目导入$JD

    • 问题内容: 我一直在使用以下代码连接到Google的服务之一。这段代码在我的本地机器上运行良好: 我将这段代码放到了已阻止Google.com的生产环境中。根据要求,他们允许我访问IP:74.125.236.52,这是Google的IP之一,从而允许与Google服务器通信。我编辑了主机文件,也添加了该条目。 仍然无法访问URL,我想知道为什么。所以我将上面的代码替换为: 现在我得到这样的错误:

    • 我有一个httpsendpoint,我需要从wso2 API管理器访问它。(使用1.10)。我已经将证书文件添加到“client-truststore.jks”文件中。但现在它给出了如下错误。 我已经更新了Axis2.xml文件,如下所示。 如何使用WSO2 APIManager解决此问题以访问此https后端服务