I’m trying to use cryptography to generate a SSH authorized key that is use 
when the SSH server is set up with TrustedUserCAKeys.

On the Linux command line, the keys are setup as follows

$ ssh-keygen -t rsa -b 2048 -f test
$ ssh-keygen -s /path/to/trusted_user_ca_pk -I test -V +52w test.pub

That will create a test-cert.pub

$ cat test-cert.pub
ssh-rsa-cert-...@openssh.com AAAAHHNzaC1yc2EtY2VydC12MDFAb3BlbnNz... 
K8v+ESbFDSmb+Z9YIE7owjQ2m92s= test@test.local <mailto:xxx@xxxx.local>

$ ssh-keygen -L -f test-cert.pub
test-cert.pub:
        Type: ssh-rsa-cert-...@openssh.com user certificate
        Public key: RSA-CERT SHA256:pXIIcD3P9mD7BLzYYKlx70kNE4y4pkEuJmFsRuUrpFc
        Signing CA: RSA SHA256:a16H80IMdKLq9WZfaMqAEB9kYx7zFzmbwQP3cOeELPI 
(using rsa-sha2-512)
        Key ID: "test"
        Serial: 0
        Valid: from 2023-09-19T23:08:00 to 2024-09-17T23:09:25
        Principals: (none)
        Critical Options: (none)
        Extensions:
                permit-X11-forwarding
                permit-agent-forwarding
                permit-port-forwarding
                permit-pty
                permit-user-rc


Since this appears to be a certificate, I was trying to use x509 to generate 
the certificate.

subject = Name([
    x509.NameAttribute(NameOID.COMMON_NAME, oid),
])
csr = x509.CertificateSigningRequestBuilder().subject_name(
    subject
).sign(private_key, hashes.SHA256(), default_backend())

# Sign the CSR with the CA private key. The ( ) allows
user_certificate = (
    x509.CertificateBuilder()
    .subject_name(csr.subject)
    .issuer_name(subject)
    .public_key(csr.public_key())
    .serial_number(x509.random_serial_number())
    .not_valid_before(datetime.datetime.utcnow())
    .not_valid_after(datetime.datetime.utcnow() + datetime.timedelta(days=days))
    .sign(ca_private_key, hashes.SHA256(), default_backend())
)
authorized_key = user_certificate.public_bytes(
    encoding=serialization.Encoding.PEM,
)
The only encoding that is allowed is PEM, and no formatting is allowed. 
I’ve tried getting the public_key() from user_certificate, and formatting it 
with public_bytes(), but that just gave me a ssh-rsa algorithm key (no cert).
If this is the correct path to get what I want, how do I get this into an 
encoding/format for OpenSSH?

Thanks,
John

_______________________________________________
Cryptography-dev mailing list
Cryptography-dev@python.org
https://mail.python.org/mailman/listinfo/cryptography-dev

Reply via email to