Files
micromdm/mdm/server_test.go
Jesse Peterson 4d5fbf5fd1 scep v2, Mozilla PKCS7 fork, cleanup (#737)
- Upgrade to micromdm/scep v2 & updated API usage
  - Use interfaces rather than concrete types in a few places
- Switch to Mozilla's PKCS7 fork (actually @omorsi's fork of that fork)
- Import order: stdlib, project/self, 3rd party
2021-06-09 15:44:58 -07:00

58 lines
1.3 KiB
Go

package mdm
import (
"bytes"
"context"
"crypto/x509"
"encoding/base64"
"net/http/httptest"
"testing"
"github.com/micromdm/micromdm/pkg/crypto"
"go.mozilla.org/pkcs7"
)
// imitate a Mdm-Signature header
func mdmSignRequest(body []byte) (*x509.Certificate, string, error) {
key, cert, err := crypto.SimpleSelfSignedRSAKeypair("test", 365)
if err != nil {
return nil, "", err
}
sd, err := pkcs7.NewSignedData(body)
if err != nil {
return nil, "", err
}
sd.AddSigner(cert, key, pkcs7.SignerInfoConfig{})
sd.Detach()
sig, err := sd.Finish()
if err != nil {
return nil, "", err
}
return cert, base64.StdEncoding.EncodeToString(sig), nil
}
func Test_mdmMdmSignatureHeader(t *testing.T) {
// test that url values from checkin and acknowledge requests are passed to the event.
req := httptest.NewRequest("GET", "/mdm/checkin", bytes.NewReader([]byte(sampleCheckinRequest)))
cert, b64sig, err := mdmSignRequest([]byte(sampleCheckinRequest))
if err != nil {
t.Fatal(err)
}
req.Header.Set("Mdm-Signature", b64sig)
ctx := context.Background()
ctx = populateDeviceCertificateFromSignRequestHeader(ctx, req)
reqcert, err := DeviceCertificateFromContext(ctx)
if err != nil {
t.Fatal(err)
}
if 0 != bytes.Compare(cert.Raw, reqcert.Raw) {
t.Error("certificate mismatch")
}
}