
인증 방법으로 Gemalto .NET 스마트 카드를 사용하여 내 컴퓨터에 SSH로 연결할 수 있기를 원합니다. Fedora 13(또는 일반 Red Hat 스타일) 시스템에서 이 작업을 어떻게 수행할 수 있습니까?
제가 생각하는 대략적인 단계는 다음과 같습니다.
- 스마트 카드에 대한 인증서 제공(및 이를 발급할 CA도 있습니까?)
- 스마트 카드에 인증서 가져 오기
- 스마트 카드 인증을 허용하도록 SSH 서버를 구성하고 특정 인증서/CA를 사용하도록 구성합니다.
- 스마트 카드를 지원하는 SSH 클라이언트(무료 Windows 기반 클라이언트의 경우 추가 포인트)
답변1
Gemalto 드라이버는 이제 오픈 소스라고 생각합니다. 그들은 그들의 웹 사이트에 소스 코드를 가지고 있습니다.
모듈 을 구성해야 합니다 pam
(이 작업을 수행하는 방법은 모르겠지만 코드는 확실히 거기에 있습니다). pam
구성에는 인증서 원칙을 로컬 사용자 ID에 매핑해야 한다고 생각됩니다 .
GDM 현재 스마트 카드를 지원한다고 생각하지만 어떻게 감지하는지 잘 모르겠습니다. 나중에 찾아보도록 하겠습니다(가장 쉬운 방법은 아마도 gdm
소스 코드를 살짝 살펴보는 것입니다).
물론 이 모든 작업에는 설치가 pcscd
필요 합니다. 또한 을(를) libpcsclite
복사해야 합니다 .libgtop11dotnet.so
/usr/lib
libgtop11dotnet.so를 컴파일하기 위한 소스 코드:https://github.com/AbigailBuccaneer/libgtop11dotnet
답변2
저는 케르베로스를 추천합니다. MIT는 krb5 클라이언트 및 서버를 생산합니다.
vwduder님, 스마트 카드 리더기와 FIPS-201 호환 카드 소스를 추천해 주실 수 있나요?
http://csrc.nist.gov/publications/fips/fips201-1/FIPS-201-1-chng1.pdf
내 서버에 사본이 있지만 현재로서는 이 스택트레이스에서 당신과 공유할 만큼 인기가 없습니다. 위의 내용은 우리 서버보다 안정성이 약간 낮기 때문에 아마도 해당 서버에서 얻을 수 있을 것입니다. ;)
[수정] 이제 나도 충분히 인기가 있다!
답변3
RSA 키를 사용할 때 1)과 2)는 간단합니다. 왜냐하면 3)에서 볼 수 있듯이 실제 인증서는 이 컨텍스트와 관련이 없기 때문입니다. cacert.org로 이동하거나 자체 서명된 인증서를 생성하면 모든 준비가 완료됩니다.
3)의 경우 공개 키를 추출하여 $HOME/.ssh/authorized_keys에 설치해야 합니다. 파일 소유권과 권한에 주의하세요! (.ssh의 경우 700, Authorized_keys의 경우 600) 호스트 전체 공개 키 인증은 권장되지 않지만 호기심이 많은 사람들을 위한 연습으로 남겨두었습니다.
4)에 대해서는 PuTTY SC(http://www.joebar.ch/puttysc/) 또는 -바람직하게는- PuTTY-CAC(http://www.risacher.org/putty-cac/) 이는 더 나은 공개 키 추출 알고리즘으로 PuTTY SC를 개선하고 PuTTY 개발 분기의 Kerberos-GSSAPI 지원도 포함합니다.
답변4
PuttySC를 이용하여 Linux 서버에서 스마트 카드를 사용하는 방법을 보여드리기 위해 영상을 제작했고,SecureCRT. 여기서 시청할 수 있습니다:스마트 카드로 SSH를 사용하는 방법
카드에 인증서를 제공하는 방법은 설명하지 않지만, 그렇게 하는 경우 카드 관리 시스템을 사용하여 카드의 관리자 키를 변경해야 한다는 점을 기억하세요. 이 부분은 걱정하지 않으셔도 되도록 회사에서 스마트 카드를 제공해 주시면 훨씬 수월해질 것입니다.
카드를 프로비저닝한 후에는 공개 키를 추출한 다음 ~/.sshd/authorized_key에 추가해야 합니다.
서버에 연결하려면 PuttySC 또는 SecureCRT와 같은 도구를 사용할 수 있습니다. 카드용 PSKC#11 라이브러리(스마트 카드 제조업체 또는 오픈 소스 버전)를 구해야 합니다. 라이브러리로 SSH 도구를 구성하면 이를 읽고 인증서를 찾을 수 있어야 합니다.
인증하면 도구에서 스마트 카드 PIN을 묻는 메시지를 표시합니다.