programing

c/c++ 클라이언트 서버 크로스 플랫폼 프로그램에서 gssapi kerberos를 사용하는 방법?

subpage 2023. 9. 21. 20:23
반응형

c/c++ 클라이언트 서버 크로스 플랫폼 프로그램에서 gssapi kerberos를 사용하는 방법?

지난 몇 년간 Kerberos 인증을 위해 Heimdal/MIT Gssapi와 "스퍼래디컬" 작업을 해야 했습니다.Linux 박스에서 실행되는 웹 서비스로 사용되는 애플리케이션을 구축하고 Windows 및/또는 Linux 데스크톱 및 Workstation에서 실행되는 브라우저와 같은 클라이언트 애플리케이션을 서비스해야 했습니다.길들이기 가장 쉬운 짐승은 아니겠죠.결국 제 작업을 정리할 때, 저는 다차원적인 어려움으로 인해 어려움이 발생했다는 것을 기록할 수 있었습니다.gssapi 프로그래밍을 시작하는 것은 단지 빈약한 설명서와 실제로 존재하지 않는 튜토리얼 때문에 정말 어려운 일입니다.구글링은 대부분 케르베로가 무엇인지에 대한 이론적인 토론으로 이어지거나, 특정한 의미적 문제 외에 이미 모든 것을 알고 있다는 가정 하에 작성된 내용으로 이어집니다.이 근처에 있는 몇몇 정말 좋은 해킹들이 저에게 도움이 되었습니다. 그래서 저는 개발자의 관점에서 이 내용을 요약하고, 여기에 일종의 위키로 공유하여 이 환상적인 장소와 동료 프로그래머들에게 무언가를 돌려주는 것이 좋을 것이라고 생각합니다.

이런 위키는 처음 해보았고, 저는 GSSAPI나 Kerberos에 대한 권한이 전혀 없으니 친절하게 대해주시기 바랍니다만, 그 이상으로 저의 실수에 대해 기여하고 수정해주시기 바랍니다.사이트 편집자 여러분, 마법을 사용해 주실 것을 기대하고 있습니다 ;)

프로젝트를 성공적으로 완료하려면 다음과 같은 세 가지 구체적인 작업을 올바르게 수행해야 합니다.

  1. 테스트 환경 설정
  2. 라이브러리 설정
  3. 당신의 코드

이미 말씀드린 것처럼, 세 가지 모두가 어느 곳에서도 한 페이지에 모아지지 않았기 때문에, 그러한 프로젝트들은 짐승들입니다.

자, 그럼 처음부터 시작하겠습니다.

초보 GSSAPI에 대한 피할 수 없는 이론은 서버가 사용자를 권위적으로 식별하기 위한 자격 증명을 제공하도록 클라이언트 응용 프로그램을 도와줍니다.서버 응용프로그램이 사용자에 따라 원하는 경우 제공된 응답을 변조할 수 있으므로 매우 유용합니다.따라서 클라이언트와 서버 응용프로그램은 케르베로 인식되거나 케르베로 인식되는 경우가 있습니다.

Kerberos 기반 인증은 클라이언트와 서버 응용프로그램이 모두 Kerberos Realm의 구성원이어야 합니다.KDC(Kerberos Domain Controller)는 영역을 관리하는 지정 기관입니다.물론 *NIX 기반의 KDC를 사용할 수도 있지만, Microsoft의 AD 서버는 가장 대중적으로 경험이 많은 KDC 중 하나입니다. 하지만 KDC가 없으면 Kerberos 비즈니스는 불가능합니다.도메인에 가입된 데스크톱, 서버 및 워크스테이션은 모두 도메인에 가입된 상태로 유지되는 한 서로 식별합니다.

초기 실험의 경우 클라이언트와 서버 응용프로그램을 동일한 영역에 설정합니다.물론 Kerberos Authentication은 이러한 영역의 KDC 간에 신뢰를 생성하거나 서로 신뢰하지 않는 다른 KDC의 키 탭을 병합하여 영역 간에 사용할 수 있습니다.코드는 이렇게 다른 복잡한 시나리오를 수용하기 위해 실제로 변경할 필요가 없습니다.

케르베로스 인증은 기본적으로 "티켓(또는 토큰)"을 통해 작동합니다.구성원이 영역에 가입하면, KDC는 각 영역에 "토큰"을 부여합니다.이러한 토큰은 고유하며 시간과 FQDN은 이러한 티켓에 필수적인 요소입니다.

코드의 첫 줄을 생각하기도 전에 다음 두 가지를 제대로 이해했는지 확인하십시오.

Pitfall #1 개발 및 테스트 환경을 설정할 때 모든 것을 테스트하고 FQDN으로 처리해야 합니다. 예를 들어 연결을 확인하려면 IP가 아닌 FQDN을 사용하여 ping을 수행합니다.따라서 이들은 반드시 동일한 DNS 서비스 구성을 가져야 합니다.

함정 #2 KDC, 클라이언트 소프트웨어, 서버 소프트웨어를 실행하는 모든 호스트 시스템에 동일한 타임 서버가 있는지 확인합니다.시간 동기화는 사람이 잊어버리는 것이고, 많은 머리를 쪼개고 머리를 부딪친 후에 실수가 된다는 것을 깨닫습니다.

클라이언트와 서버 응용프로그램 모두 kerberos 키탭이 필요합니다.따라서 응용 프로그램이 *NIX 호스트에서 실행되고 Microsoft 도메인의 일부가 되려면 kerberos 키 탭을 생성한 후 gss 프로그래밍을 위한 나머지 준비 단계를 살펴봐야 합니다.

Kerberos 5(krb5 1.0)에 대한 단계별 가이드의 상호 운용성은 반드시 읽어봐야 할 사항입니다.

GSS-API 프로그래밍 가이드는 훌륭한 북마크입니다.

*NIX 배포 환경에 따라 코드를 작성하기 위한 헤더 및 라이브러리를 설치할 수 있습니다.하지만 제 제안은 소스를 다운받아서 직접 구축하는 것입니다.네, 한 번에 맞추지 못하실 수도 있지만 수고할 가치는 있습니다.

Pitfall #3 애플리케이션이 Kerberos 인식 환경에서 실행되고 있는지 확인합니다.저는 이것을 정말 힘들게 배웠지만, 제가 똑똑하지 않아서인지도 모릅니다.gssapi 프로그래밍 어려움의 초기 단계에서, 저는 kerberos 키탭이 애플리케이션 kerberos 인식을 위해 반드시 필요하다는 것을 알게 되었습니다.하지만 애플리케이션에서 이러한 키탭을 로드하는 방법에 대해 아무것도 찾을 수 없었습니다.왜 그런지 아세요?그런 api가 존재하지 않기 때문입니다!!!이유:애플리케이션은 키 탭을 인식하는 환경에서 실행됩니다.자, 간단히 말씀드리겠습니다.키 탭을 저장한 경로에 환경 변수를 설정한 후 GSSAPI/Kerberos 작업을 수행해야 하는 응용 프로그램을 실행해야 합니다.그래서 당신이 뭘 하든지 간에:

export KRB5_KTNAME=<path/to/your/keytab>

또는 을 이용합니다.setenv정하다KRB5_KTNAMEgssapi를 사용하는 코드의 첫번째 줄이 실행되기 전에 당신의 애플리케이션에서 충분히.

이제 응용 프로그램의 코드에 필요한 작업을 수행할 준비가 되었습니다.

애플리케이션 개발자가 애플리케이션을 작성하고 테스트하기 위해 검토해야 하는 다른 측면이 꽤 있다는 것을 알고 있습니다.저는 몇 가지 환경 변수를 알고 있는데, 그것은 중요할 수 있습니다.

누가 그것에 대해 좀 더 설명해 줄 수 있습니까?

언급URL : https://stackoverflow.com/questions/21089832/how-to-use-gssapi-kerberos-in-c-c-client-server-cross-platform-programs

반응형