Получил "сертификат x.509, подписанный неизвестным органом", когда сервер пытался отправить уведомления Expo - PullRequest
1 голос
/ 10 июля 2020

Я получил сообщение об ошибке «Сертификат x.509, подписанный неизвестным органом», когда я попытался отправить уведомления на Expo Pu sh Сервер уведомлений.

Мой сервер, написанный на Golang, хранит expo pu sh жетонов. Затем он загружает эти токены и строит expo.PushMessage список и sh их, используя функцию PublishMultiple.

У меня есть два сервера, один для тестирования, а другой для производства. Хорошо работает на тестовом сервере. Я получил уведомление о pu sh на моем тестовом телефоне. Итак, я обновил свой производственный сервер, затем производственный сервер выдает сообщение x.509 certificate signed by unknown authority.

Во-первых, я подозреваю, что мой токен expo pu sh был поврежден, но токен pu sh работает хорошо, когда Я использовал Expo pu sh инструмент уведомлений .

Я не уверен, где искать решение. Может кто-нибудь помочь мне? Я исправлю вопрос, если вы хотите узнать о моем серверном коде или настройках. На данный момент я не уверен, какая часть кода или настроек должна быть предоставлена ​​для поиска решения.

Следующие коды - единственное место, где может возникнуть ошибка.

import (
    expo "github.com/oliveroneill/exponent-server-sdk-golang/sdk"
    "github.com/pkg/errors"
)

type Client struct {
    PushClient *expo.PushClient
}

func NewClient() *Client {
    client := expo.NewPushClient(nil)

    return &Client{PushClient: client}
}

func (c *Client) PushNotifications(deviceKeys []string, title string, body string) (error, map[string]string) {
    messages := make([]expo.PushMessage, 0)
    for _, deviceKey := range deviceKeys {
        pushToken, err := expo.NewExponentPushToken(deviceKey)
        if err != nil {
            continue
        }

        messages = append(messages, expo.PushMessage{
            To:        pushToken,
            Body:      body,
            Data:      nil,
            Sound:     "default",
            Title:     title,
            Priority:  expo.DefaultPriority,
            ChannelID: "default",
        })
    }

    // This is only place the error can occur
    // PublishMultiple function is a part of the Expo SDK
    responses, err := c.PushClient.PublishMultiple(messages)
    if err != nil {
        return errors.WithStack(err), nil
    }

    sentErrors := make(map[string]string)
    for index, response := range responses {
        err := response.ValidateResponse()
        if err != nil && index >= len(deviceKeys) {
            sentErrors[deviceKeys[index]] = err.Error()
        }
    }

    return nil, sentErrors
}

Dockerfile для сборки моего рабочего сервера:

FROM golang:1.13-alpine as builder

WORKDIR /usr/src/app
ARG app
COPY . .

RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -mod vendor -a -ldflags '-s' -o main ./apps/$app

FROM scratch

COPY --from=builder /usr/src/app/main /app/main

WORKDIR /app
CMD ["./main"]

1 Ответ

2 голосов
/ 10 июля 2020

golang:*-alpine изображений являются намеренно минимальными и не имеют пула сертификатов системы.

Самое простое решение - добавить его самостоятельно при создании образа docker, добавив:

RUN apk add --no-cache ca-certificates
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...