2 votes

Le serveur a reçu le message "certificat x.509 signé par une autorité inconnue" lorsqu'il a essayé d'envoyer des notifications d'Expo.

J'ai obtenu le message d'erreur "x.509 certificate signed by unknown authority" lorsque j'ai essayé d'envoyer des notifications au serveur Expo Push Notification.

Mon serveur écrit en Golang stocke les jetons expo push. Puis, il charge ces jetons et construit expo.PushMessage et les pousser en utilisant PublishMultiple fonction.

J'ai deux serveurs, un pour les tests et l'autre pour la production. Cela fonctionne bien sur le serveur de test. J'ai reçu une notification push sur mon téléphone de test. Donc, j'ai mis à jour mon serveur de production, puis le serveur de production produit x.509 certificate signed by unknown authority message.

Tout d'abord, je soupçonne que mon jeton de poussée expo a été corrompu, mais le jeton de poussée fonctionne bien lorsque j'ai utilisé Outil de notifications push de l'Expo .

Je ne sais pas où chercher une solution. Quelqu'un peut-il m'aider ? Je vais revoir la question si vous voulez connaître le code ou les paramètres de mon serveur. Pour l'instant, je ne suis pas sûr de la partie du code ou des paramètres à fournir pour trouver une solution.

Les codes suivants sont à peu près le seul endroit où l'erreur peut se produire.

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
}

Un fichier docker pour construire mon serveur de production :

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"]

3voto

Marc Points 5790

golang:*-alpine Les images sont intentionnellement minimes et ne disposent pas d'un pool de certificats système.

La solution la plus simple est de l'ajouter vous-même lors de la construction de votre image docker en ajoutant :

RUN apk add --no-cache ca-certificates

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X