Saya mendapat pesan kesalahan "sertifikat x.509 ditandatangani oleh otoritas tidak dikenal" ketika saya mencoba mengirim pemberitahuan ke server Pemberitahuan Dorong Expo.

Server saya yang ditulis di Golang menyimpan token push expo. Kemudian, ia memuat token tersebut dan membuat daftar expo.PushMessage dan mendorongnya menggunakan fungsi PublishMultiple.

Saya memiliki dua server, satu untuk pengujian dan yang lainnya untuk produksi. Ini bekerja dengan baik di server uji. Saya mendapat pemberitahuan push di ponsel pengujian saya. Jadi, saya memperbarui server produksi saya, kemudian server produksi menghasilkan pesan x.509 certificate signed by unknown authority.

Pertama, saya menduga bahwa token push expo saya telah rusak, tetapi token push berfungsi dengan baik ketika saya menggunakan Alat pemberitahuan push Expo.

Saya tidak yakin ke mana harus mencari solusi. Ada yang bisa bantu saya? Saya akan merevisi pertanyaan jika Anda ingin tahu tentang kode atau pengaturan server saya. Saat ini, saya tidak yakin bagian kode atau pengaturan mana yang harus disediakan untuk menemukan solusi.

Kode berikut berada di sekitar satu-satunya tempat kesalahan dapat terjadi.

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 untuk membangun server produksi saya:

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
byron1st 10 Juli 2020, 09:01

1 menjawab

Jawaban Terbaik

golang:*-alpine gambar sengaja minimal dan tidak memiliki kumpulan sertifikat sistem.

Solusi paling sederhana adalah menambahkannya sendiri saat membuat gambar buruh pelabuhan Anda dengan menambahkan:

RUN apk add --no-cache ca-certificates
2
Marc 10 Juli 2020, 08:14