2 years ago

#46015

test-img

Nash

Sign a public key with a CA private key

I am trying to implement the function performed by the command ssh-keygen -s ca_key -I <some name> -n <some principal> -V -start:+end ~/.ssh/id_rsa.pub in Go. Here is my code

    userPublicKey, _, _, _, err := ssh.ParseAuthorizedKey(userPublicKeyBytes)
    privPem, _ := pem.Decode(caPrivateKeyBytes)
    caPrivateKey, err := x509.ParsePKCS1PrivateKey(privPem.Bytes)

    signer, err := ssh.NewSignerFromKey(caPrivateKey)

    permissions := ssh.Permissions{
        CriticalOptions: map[string]string{},
        Extensions: map[string]string{ "permit-agent-forwarding": ""},
    }

    cert := ssh.Certificate{
        CertType: ssh.UserCert, Permissions: permissions, Key: userPublicKey,
    }

    err = cert.SignCert(rand.Reader, signer)
    log.Println(string(cert.Marshal()))

The result is a certificate (when marshalled) starts as expected, with ssh-rsa-cert-v01@openssh.com, but instead of the base64 encoded contents, I get weird symbols:

ssh-rsa-cert-v01@openssh.com -`"�3�c�u�u.�X��&S�_^)�u��:�jJ�Đz��'B��~�A��ŷ�
6հ�@���%T��� m�����*Erkq�y��Z����t&so1TTmCt��k��f���:�Lr�
tI`��>�%���!R��<�`M>��3���BhR�ٚ./�*Pk�#���Bd�,k���W+G�P���;��IQ
                                        6$�)�k#ㄆ�]G�"�tذ&Mh>(8���-򃶶�
...
...

What am I doing wrong?

go

ssh

rsa

pki

0 Answers

Your Answer

Accepted video resources