내 SSH 구성에 사용할 인증서 파일을 어떻게 생성합니까?

내 SSH 구성에 사용할 인증서 파일을 어떻게 생성합니까?

내 ~/.ssh/config 파일의 구성은 다음과 같습니다.

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

CertificateFile이것은 훌륭하게 작동하지만 실제로 사용하고 싶다면 어떻게 생성할지 궁금합니다 . 예를 들어 RSA 키 등을 사용하여 이미 개인 및 공개 키를 생성했다고 가정해 보세요 openssl req -newkey rsa:2048 -x509 [...].

답변1

SSH에서 사용하는 인증용 인증서 모델은 공개 키 인증 방법의 변형입니다. 인증서를 사용하면 각 사용자(또는 호스트)의 공개 키가 CA(인증 기관)라는 다른 키로 서명됩니다. 동일한 CA를 사용하여 여러 사용자 또는 호스트 키에 서명할 수 있습니다. 그러면 사용자나 호스트는 각 개별 사용자/호스트 키를 신뢰하는 대신 단일 CA를 신뢰할 수 있습니다. 이는 인증 모델에 대한 변경 사항이므로 인증서를 구현하려면 클라이언트 측과 서버 측 모두에서 변경이 필요합니다.

또한 SSL에서 사용하는 인증서(에서 생성된 인증서 openssl)는 SSH에서 사용하는 인증서와 다릅니다. Security SE의 QA에서는 다음 주제를 설명합니다.SSL과 SSH의 차이점은 무엇입니까?,OpenSSL과 OpenSSH 간 키 변환.

이제 클라이언트가 SSH 인증서를 사용하여 서버에 어떻게 접속하는지가 문제이므로 그 방법을 살펴보겠습니다. 이것매뉴얼 페이지ssh-keygen몇 가지 관련 정보가 있습니다.

ssh-keygen사용자 또는 호스트 인증에 사용할 수 있는 인증서를 생성하기 위해 키 서명이 지원됩니다. 인증서는 공개 키, 일부 ID 정보, 0개 이상의 주체(사용자 또는 호스트) 이름, CA(인증 기관) 키로 서명된 옵션 집합으로 구성됩니다. 그러면 클라이언트나 서버는 많은 사용자/호스트 키를 신뢰하는 대신 CA 키만 신뢰하고 인증서의 서명을 확인할 수 있습니다. OpenSSH 인증서는 ssl(8)에서 사용된 X.509 인증서와 형식이 다르지만 형식이 훨씬 간단하다는 점에 유의하세요.

ssh-keygen사용자와 호스트라는 두 가지 유형의 인증서가 지원됩니다. 사용자 인증서는 서버에 대해 사용자의 신원을 인증하고, 호스트 인증서는 서버 호스트의 신원에 대해 사용자를 인증합니다. 사용자 인증서 생성:

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

생성된 인증서는 에 배치됩니다 /path/to/user_key-cert.pub.

호스트 인증서에는 -h다음 옵션이 필요합니다.

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

호스트 인증서가 로 출력됩니다 /path/to/host_key-cert.pub.

여기서 가장 먼저 필요한 것은 CA 키입니다. CA 키는 일반 개인-공개 키 쌍이므로 평소대로 생성해 보겠습니다.

ssh-keygen -t rsa -f ca

-f ca옵션은 단순히 출력 파일 이름을 "ca"로 지정합니다. 그러면 ca(개인 키)와 ca.pub(공개 키)라는 두 개의 파일이 생성됩니다.

다음으로 CA의 개인 키를 사용하여 사용자 키에 서명합니다(매뉴얼의 예 참조).

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

~/.ssh/id_rsa-cert.pub그러면 SSH 인증서가 포함된 새 파일이 생성됩니다 . 이 -s옵션은 CA의 개인 키에 대한 경로를 지정하고, 이 -I옵션은 서버 측에 기록되는 식별자를 지정하고, 이 -n옵션은 주체(사용자 이름)를 지정합니다. 인증서 내용은 를 실행하여 확인할 수 있습니다 ssh-keygen -L -f ~/.ssh/id_rsa-cert.pub.

이 시점에서 구성 파일(~/.ssh/config)을 자유롭게 편집하고 CertificateFile새로 생성된 인증서를 가리키는 지시문을 포함할 수 있습니다.설명서에 적힌대로, 해당 개인 키를 식별하려면 이 IdentityFile지시어도 함께 지정해야 합니다.

마지막으로 해야 할 일은 서버에 CA 인증서를 신뢰하도록 지시하는 것입니다. CA 인증서의 공개 키를 대상 서버에 복사해야 합니다. 이는 /etc/ssh/sshd_config파일을 편집하고 지시문을 지정하여 TrustedUserCAKeys수행 됩니다.

TrustedUserCAKeys /path/to/ca.pub

완료되면 서버에서 SSH 데몬을 다시 시작합니다. 내 CentOS 시스템에서는 를 실행하여 이 작업을 수행 systemctl restart sshd한 후 자격 증명을 사용하여 시스템에 로그인할 수 있습니다. ssh자세한 플래그( )를 사용하여 연결을 추적하면 -v서버에 제공된 인증서와 이를 수락한 서버가 표시됩니다.

여기서 마지막으로 주목해야 할 점은 동일한 CA 키로 서명된 모든 사용자 키는 이제 대상 서버에서 신뢰된다는 것입니다. CA 키에 대한 액세스는 실제 시나리오에서 제어되어야 합니다. AuthorizedPrincipalsFile예를 들어 서버 측 액세스를 제한하는 데 사용할 수 있는 지시문도 있습니다 . 보다sshd_config 매뉴얼자세한 내용은. 클라이언트 측에서는 더 엄격한 사양으로 인증서를 생성할 수도 있습니다. 보다SSH-keygen 매뉴얼이러한 세부 사항에 대해서는.

답변2

변환 .crt하려면 .pub다음을 수행하십시오.

  1. 공개 키 추출

    openssl x509 -in CERT.crt -pubkey -noout > CERT.pub.tmp
    
  2. SSH 형식(PKCS8)으로 변환

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

관련 정보