AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 503851
Accepted
Adrian
Adrian
Asked: 2019-03-02 10:50:09 +0800 CST2019-03-02 10:50:09 +0800 CST 2019-03-02 10:50:09 +0800 CST

Como gerar um arquivo de certificado que deve ser usado com a configuração ssh?

  • 772

Eu tenho uma configuração como abaixo no meu arquivo ~/.ssh/config:

Host xxx
    HostName 127.0.0.1
    Port 2222
    User gigi
    ServerAliveInterval 30
    IdentityFile ~/blablabla
    # CertificateFile ~/blablabla-cert.pub

que funciona bem, mas estou curioso sobre como alguém geraria o CertificateFilese realmente deseja usá-lo? Considere que um já possui as chaves RSA privadas e públicas geradas com, por exemplo, openssl req -newkey rsa:2048 -x509 [...].

ssh-config
  • 2 2 respostas
  • 10794 Views

2 respostas

  • Voted
  1. Best Answer
    Haxiel
    2019-03-02T23:53:12+08:002019-03-02T23:53:12+08:00

    O modelo de certificado de autenticação usado pelo SSH é uma variação do método de autenticação de chave pública. Com certificados, a chave pública de cada usuário (ou host) é assinada por outra chave, conhecida como autoridade de certificação (CA). A mesma CA pode ser usada para assinar várias chaves de usuário ou host. O usuário ou o host pode confiar em uma única autoridade de certificação em vez de ter que confiar em cada chave de usuário/host individual. Como essa é uma alteração no modelo de autenticação, a implementação de certificados requer alterações no lado do cliente e do servidor.

    Além disso, observe que os certificados usados ​​pelo SSL (os gerados por openssl) são diferentes dos usados ​​pelo SSH. Este tópico é explicado por estes QAs no Security SE: Qual é a diferença entre SSL e SSH? , Convertendo chaves entre OpenSSL e OpenSSH .

    Agora, como a questão é sobre como um cliente pode se conectar a um servidor usando um certificado SSH, vejamos essa abordagem. A página de manual parassh-keygen tem algumas informações relevantes:

    ssh-keygensuporta assinatura de chaves para produzir certificados que podem ser usados ​​para autenticação de usuário ou host. Os certificados consistem em uma chave pública, algumas informações de identidade, zero ou mais nomes principais (usuário ou host) e um conjunto de opções que são assinadas por uma chave de Autoridade de Certificação (CA). Clientes ou servidores podem confiar apenas na chave CA e verificar sua assinatura em um certificado em vez de confiar em muitas chaves de usuário/host. Observe que os certificados OpenSSH são um formato diferente e muito mais simples dos certificados X.509 usados ​​em ssl(8).

    ssh-keygensuporta dois tipos de certificados: usuário e host. Os certificados de usuário autenticam os usuários nos servidores, enquanto os certificados de host autenticam os hosts do servidor nos usuários. Para gerar um certificado de usuário:

    $ ssh-keygen -s /path/to/ca_key -I key_id /path/to/user_key.pub

    O certificado resultante será colocado em /path/to/user_key-cert.pub.

    Um certificado de host requer a -hopção:

    $ ssh-keygen -s /path/to/ca_key -I key_id -h /path/to/host_key.pub

    O certificado de host será enviado para /path/to/host_key-cert.pub.

    A primeira coisa que vamos precisar aqui é uma chave CA. Uma chave CA é um par de chaves pública-privada regular, então vamos gerar uma como de costume:

    ssh-keygen -t rsa -f ca
    

    A -f caopção simplesmente especifica o nome do arquivo de saída como 'ca'. Isso resulta na geração de dois arquivos - ca (chave privada) e ca.pub (chave pública).

    Em seguida, assinaremos nossa chave de usuário com a chave privada da CA (seguindo o exemplo do manual):

    ssh-keygen -s path/to/ca -I myuser@myhost -n myuser ~/.ssh/id_rsa.pub
    

    Isso gerará um novo arquivo chamado ~/.ssh/id_rsa-cert.pubque contém o certificado SSH. A -sopção especifica o caminho para a chave privada da autoridade de certificação, a -Iopção especifica um identificador que é registrado no lado do servidor e a -nopção especifica o principal (nome de usuário). O conteúdo do certificado pode ser verificado executando ssh-keygen -L -f ~/.ssh/id_rsa-cert.pub.

    Neste ponto, você está livre para editar seu arquivo de configuração (~/.ssh/config) e incluir a CertificateFilediretiva para apontar para o certificado recém-gerado. Como indica o manual , a IdentityFilediretiva também deve ser especificada junto com ela para identificar a chave privada correspondente.

    A última coisa a fazer é dizer ao servidor para confiar em seu certificado CA. Você precisará copiar a chave pública do certificado CA para o servidor de destino. Isso é feito editando o /etc/ssh/sshd_configarquivo e especificando a TrustedUserCAKeysdiretiva:

    TrustedUserCAKeys /path/to/ca.pub
    

    Feito isso, reinicie o daemon SSH no servidor. No meu sistema CentOS, isso é feito executando systemctl restart sshd. Depois disso, você poderá fazer login no sistema usando seu certificado. Rastrear sua sshconexão usando o sinalizador detalhado ( -v) mostrará o certificado que está sendo oferecido ao servidor e o servidor que o aceita.

    Uma última coisa a ser observada aqui é que qualquer chave de usuário assinada com a mesma chave CA agora será confiável para o servidor de destino. O acesso às chaves da CA deve ser controlado em qualquer cenário prático. Também existem diretivas como essas AuthorizedPrincipalsFileque podem ser usadas para limitar o acesso do lado do servidor. Veja o manual do sshd_config para mais detalhes. Do lado do cliente, os certificados também podem ser criados com especificações mais rígidas. Consulte o manual do ssh-keygen para obter esses detalhes.

    • 7
  2. Louis Eduardo Arcila Bonfante
    2020-06-18T20:02:43+08:002020-06-18T20:02:43+08:00

    Para converter seu .crtpara .pubapenas fazer isso:

    1. Extraia a chave pública

      openssl x509 -in CERT.crt -pubkey -noout > CERT.pub.tmp
      
    2. Converter para um formato SSH (PKCS8)

      ssh-keygen -f CERT.pub.tmp -i -m PKCS8 > CERT.pub
      
    • 0

relate perguntas

  • Qual é a configuração ssh equivalente deste comando de túnel ssh?

  • Forçar alocação de PTY em ssh_config

  • Qual é a opção .ssh/config correspondente para ssh -N

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve