Preciso criar um certificado SSH codificado como X.509 por RFC 6187, Certificados X.509v3 para autenticação Secure Shell . Com base na ssh-keygen (1)
página do manual e em alguns tutoriais online, estou no ponto em que posso criar a CA, assinar uma identidade de usuário e salvá-la no formato de certificado OpenSSH.
Aqui estão as instruções:
Criar chave CA
ssh-keygen -b 4096 -t rsa -f example-com-ca -C "CA key for example.com"
Criar chave de usuário
ssh-keygen -b 2048 -t rsa -f id_rsa -C [email protected]
Criar certificado de usuário
ssh-keygen -s example-com-ca -n [email protected] -V +52w -I example.com-user ./id_rsa.pub
O certificado resultante é o formato OpenSSH:
$ cat id_rsa-cert.pub
[email protected] AAAAHHNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20AAAAg0Ta
5nRrxKSB3k5sqCMH27W715uEUB54FKH44mBUMlCkAAAADAQABAAABAQDw8XuWbvSGsxyUdBY+KCfSRRz
G525MUN9/nbshWdl60ozMc4KU/Td44J8jKVq/hNHuyO7kqTaaeiO61FQmRPz3/vpmwUGEWkdhdQ5ujBj
1+X2/acnV+8Q2mXzxnvMvkcPh4T2jSXEMTJ8v5WG6cJkih+rJEbHHJF0tpxRSyxiNKfenDRRmGiyABd1
JDmkLLaNFLSSo4WeCFQ82nMi4Lod4QQMlakPgd76s6GNFflRklFWuhRadCdxrnz5e9ZMV8vDeAi+8IS8
9z+hWotYC4TVAb8is72Un6/1rwNQgWX5NcX3O1ocboJuEanFIh2QJTYq/UBwSQobH2+fXq06Qm4efAAA
AAAAAAAAAAAABAAAAEGV4YW1wbGUuY29tLXVzZXIAAAAUAAAAEGpkb2VAZXhhbXBsZS5jb20AAAAAXSv
+tAAAAABfC+ETAAAAAAAAAIIAAAAVcGVybWl0LVgxMS1mb3J3YXJkaW5nAAAAAAAAABdwZXJtaXQtYWd
lbnQtZm9yd2FyZGluZwAAAAAAAAAWcGVybWl0LXBvcnQtZm9yd2FyZGluZwAAAAAAAAAKcGVybWl0LXB
0eQAAAAAAAAAOcGVybWl0LXVzZXItcmMAAAAAAAAAAAAAAhcAAAAHc3NoLXJzYQAAAAMBAAEAAAIBAMG
bEpcMRTnu5ewWWytcQqzcnSDZbF5yRYpEyQsKTLrQmSux104OOsXQ/5ba30/li4uewK0sL7Qqb79ZCVh
9pH4dnZf6KYIEtkTV2mj4d11ZsRYMXAcBSpuua+O6CTdEGMtmWrQZ3mVUMvCy8UFqcePE/QjxgvUBYZN
jRxx+nPtbYf88AWF1/I6uwKODaPspwpwh07TTqNjmIMpvc6gTWx0RO1avzTveOEvTnapgJI0mRjUmyGX
vvncE9U0WC65kugIkZcjI/kkXBVrgYVfhDssF8bvX2cO7NQt4QH5yANWgm0HraGqmNRAPXd84vomI0gF
8W4xwC9gnfJzjheeXLUEzSXOwiZSU2ElF1kGUlYRtM59VUjsTvFxjrXA9pPtGO5RopXot1GB3Y7vxnkj
blDzSdMAeLms0jv8Um6ty9uDzmW8o5GHZudatL8CAEP6HIvLrI6zQeI8iIlLmCsNjxE8p7annldcrNsX
f8hpNeG7RPtgcU1pMmc/fc3UPBvToqnMVfjKi1n2kGYrhOiNbfcpW7nZUSfLcSZGryIYMb7IlTjsXm6v
E1rCzJKukcMuI8U3qUwRzRS/xgLF5msSOiJ9qFM/FERGa6zYvdgTV2aq/07fDedqleChMreCiYPxPp1n
DLJOBcC+nvx7tIGj05z9BJvuCfOQWVnjIjZc0tUitAAACDwAAAAdzc2gtcnNhAAACALBk/Z4b3Z4O35H
NpC91oLWJExk39tkjdgJBC7YelzfH7apA4em/rk8G219EIJ8elKifJzLze1t3bfWOx/dwUHuTfqZ/e1h
j6Q/iNDQ9Q/2ijWso1E6alSIapdGogWHCQ4IDBlWaF8xzlCACbo82js2uvSYmbbcMlXPKqLbPJwiNJt8
AhDz3/JqRqedN7tObDMgUz0O0PGkYwUXjVV77EaVpRZF3ffTvnBBw9vHSwriVOZgOk4l2iXbZU51A+QB
l8bgFj4QCGvobMul/0AV+QsQ20AqUQ/nEIM1rXuH+ki0PYVpKkXPhKf2ODkLZdmpuKZX5lM9FumkFf/s
VVPa5GsonJG5s2VVEz7L+Ed6KBaJ+kFQrXu4hDxwEUCd/y/gYSicOb7B7N0jkPaVwRoR6tb0mAXGKE44
tumvptu/AJjlB23QOgIIToARgqampzmPwAm8jbU2AU3RtWx+RZGPnJKsJPtADMZ7ByJnGY/mPoNpGqQc
H8h+tClb1Ihxhbh1RQSuJNdgNlNGJbSdsonS9/8fxyxt7ok06Z05N6dy3PLwTuub1EzKmeSwQhHLHWXA
SKILcUaMosak1ybQZz8kMMrsMMUA2ubjrtGA8oe5skhc9gbAurebO1iGg+asUSNycDXZypwl20wpMlzL
VkxXSGHIz6Cd9QsfmJtuQh4QXfFrE [email protected]
É aqui que estou tendo problemas. Não vejo a ssh-keygen (1)
opção de escrever o certificado no formato X.509. Prefiro codificação PEM, mas provavelmente posso trabalhar com codificação ASN.1/DER.
Como escrever o certificado no formato X.509?
Uma questão relacionada está em Alternatives to SSH x509 logon .
OpenSSH não suporta X.509 – ele não pode gerar tais certificados nem consumi-los. ( Cas OpenSSH são algo totalmente diferente, e não há tradução padrão OpenSSH CA ⇆ X.509 especificada. Além do formato, eles intencionalmente não suportam muitos recursos PKI como hierarquia CA multi-nível, ao mesmo tempo em que são capazes de transportar OpenSSH específicos "opções de chave" e outros metadados que não possuem extensões X.509 correspondentes.)
Você provavelmente deseja o PKIX-SSH de Roumen Petrov , que é um fork OpenSSH mantido ativamente com amplo suporte X.509 PKI, incluindo os formatos RFC 6187 x509v3-*.
Se você precisar gerar uma entrada authorized_keys para um certificado X.509 existente , sem ter as ferramentas necessárias, o formato é relativamente simples e pode ser feito manualmente por meio de qualquer linguagem de programação. Os dados de author_keys são sempre baseados no formato de pacote SSHv2 (onde cada 'string' é implicitamente precedido por uint32be indicando seu comprimento); o primeiro item é sempre uma string com o próprio tipo pubkey; o restante está documentado na página 5.
(O campo 'certificado' contém dados codificados em DER, mas observe que a codificação PEM é literalmente apenas Base64 em torno do mesmo ASN.1 DER, com cabeçalhos "início/fim" inseridos.)
Tenho lutado com autenticação via SSH usando certificados X509, e depois de algum tempo entendi e testei com sucesso.
Caso seja útil para alguém, escrevi um post explicando todo o processo em um blog que acabei de implantar (de uma maneira rápida e suja, o blog é simples e não muito bonito, mas útil).
Você pode ler uma descrição completa do teste no artigo "OpenSSH com certificados X509 COMO FAZER" .
Cumprimentos.