
Gostaria de poder fazer SSH em minha máquina usando um cartão inteligente .NET da Gemalto como método de autenticação. Como isso poderia ser feito em uma máquina Fedora 13 (ou estilo Red Hat genérico)?
Estas são as etapas básicas que considero necessárias:
- Fornecer certificado para o cartão inteligente (e possivelmente uma CA para emiti-lo?)
- Obtenha o certificado no cartão inteligente
- Configure o servidor SSH para permitir autenticação de cartão inteligente e configure-o para usar um certificado/CA específico
- Um cliente SSH com suporte para cartão inteligente (pontos extras para um cliente gratuito baseado em Windows)
Responder1
Os drivers da Gemalto agora são de código aberto, acredito. Eles têm o código-fonte em seu site.
Você precisará configurar o pam
módulo (não sei como fazer isso, mas o código certamente está lá). Imagino que a pam
configuração exigiria um mapeamento de um princípio de certificado para um ID de usuário local.
Acredito que o GDM agora suporta cartões inteligentes, mas não tenho certeza de como ele os detecta. Tentarei pesquisar isso mais tarde (a maneira mais fácil é provavelmente apenas dar uma olhada no gdm
código-fonte).
Claro que tudo isso requer pcscd
e libpcsclite
deve ser instalado. Você também precisará copiar o libgtop11dotnet.so
arquivo /usr/lib
.
código fonte para compilar libgtop11dotnet.so :https://github.com/AbigailBuccaneer/libgtop11dotnet
Responder2
Eu recomendaria Kerberos. O MIT produz um cliente e servidor krb5.
vwduder, você poderia recomendar um leitor de cartão inteligente e uma fonte de cartões compatíveis com FIPS-201?
http://csrc.nist.gov/publications/fips/fips201-1/FIPS-201-1-chng1.pdf
Tenho uma cópia em meu próprio servidor, mas não sou popular o suficiente neste stacktrace neste momento para compartilhá-la com você. O acima é apenas um pouco menos confiável do que nossos próprios servidores, então você provavelmente conseguirá obtê-lo deles;)
[editar] Agora sou bastante popular!
Responder3
Ao usar chaves RSA, 1) e 2) são triviais, porque como veremos em 3) o certificado real é irrelevante neste contexto. Basta acessar cacert.org ou gerar um certificado autoassinado e está tudo pronto.
Para 3) você precisará extrair sua chave pública e instalá-la em $HOME/.ssh/authorized_keys. Preste atenção à propriedade e às permissões dos arquivos! (700 para .ssh, 600 para chaves_autorizadas). A autenticação de chave pública em todo o host é desencorajada, mas deixada como um exercício para mentes curiosas.
Quanto ao 4) você deve dar uma olhada no PuTTY SC (http://www.joebar.ch/puttysc/) ou -preferencialmente- PuTTY-CAC (http://www.risacher.org/putty-cac/) que aprimora o PuTTY SC com um melhor algoritmo de extração de chave pública e também inclui o suporte Kerberos-GSSAPI do ramo de desenvolvimento do PuTTY.
Responder4
Fiz um vídeo para mostrar como usar um cartão inteligente com um servidor Linux usando PuttySC eSeguroCRT. Você pode assistir aqui:Como fazer SSH com seu cartão inteligente
Não explico como provisionar um certificado no cartão, mas se você fizer isso, lembre-se que a chave de administração do cartão deve ser alterada usando um Sistema de Gerenciamento de Cartões. Será muito mais fácil para você se sua empresa fornecer um cartão inteligente para que você não precise se preocupar com essa parte.
Depois de provisionar o cartão, você precisa extrair a chave pública e adicioná-la a ~/.sshd/authorized_key.
Para se conectar ao servidor, você pode usar ferramentas como PuttySC ou SecureCRT. Você precisará obter a biblioteca PSKC#11 para o cartão (do fabricante do cartão inteligente ou de uma versão de código aberto). Configure a ferramenta SSH com a biblioteca, ela deverá ser capaz de lê-la e encontrar o certificado.
Ao autenticar, a ferramenta solicitará o PIN do cartão inteligente.