문제

우리는 사용자가 입력 할 때 원격을 만들고 싶은 브라우저 기반 응용 프로그램이 하나 있습니다. 따라서 해당 URL에 액세스 할 때 핀 프롬프트가 제공되므로 다시 인증해야합니다. 그렇게 할 수있는 합리적인 방법이 있습니까?

추가 정보 : 이것은 CAC 카드를위한 것이며 워크 스테이션에는 활성화와 회전식이 있습니다. 또한 필요한 경우 워크 스테이션에 서비스를 추가 할 수 있습니다. 브라우저는 모두 IE7입니다. 웹 서버는 IIS 6이고 페이지는 ASP.NET (대부분)로 작성됩니다.

도움이 되었습니까?

해결책

여기에는 몇 가지 다른 소프트웨어가 있습니다.

첫 번째는 카드 자체입니다. 디지털 서명을 수행하려면 CAC는 "검증 된"상태에 있어야합니다. 즉, 카드를 삽입 한 후 핀이 입력되었습니다. 그 외에도 카드의 각 키에는 키를 사용할 때마다 핀을 입력 해야하는지 여부를 나타내는 플래그가 있습니다. 나는 확인하지 않았지만 이것이 CAC의 "이메일"키 쌍으로 설정되었다고 생각합니다. 따라서이 "항상 확인"플래그 세트가있는 키를 찾아서 서비스의 경로 유효성 검사기를 구성하여 해당 키만 허용해야합니다. 연장 된 주요 사용법에 특정 OID를 요구하거나 Path Building에서 DoD 중간 인증서를 제외 할 수 있습니다 (아마도 취소 된대로 표시).

기계의 미들웨어는 카드로 말하면 핀을 캐시하고 카드가 작업을 완료하기 전에 핀이 필요하다는 것을 나타내는 경우 카드에 제공 할 수 있습니다. ActiveClient는 버전 6을 통해 핀 캐싱 기능 으로이 작업을 수행하고 있다고 생각하지만 버전 7에서는이 옵션이 누락 된 것 같습니다. Windows 내장 PIV 지원에서 이와 같은 것을 찾지 못했습니다. 이 "기능"은 보안을 손상시킬 수 있으므로 고의적으로 제거되었고 레지스트리 해킹이 없거나 행동을 복원 할 수 없을 것입니다. 사용자의 기계를 관리하지 않는 한 이것은 통제 할 수없는 것입니다. 핀 항목을 시행하는 데 사용할 수있는 HTTP 헤더 또는 TLS 옵션이 없습니다. 그러나 새로운 시스템의 경우 문제가되지 않아야합니다.

서버 측에서 클라이언트가 인증을 수행하기 위해서는 완전한 악수가 발생해야합니다. 유효한 TLS 세션이 있으면 클라이언트 인증이 발생하지 않습니다. 따라서 인증을 요청하기 전에 TLS 세션 (애플리케이션 세션이 아님)을 무효화하는 방법을 찾거나 인증을 요청하기 전에 인증 요청을 세션을 활성화하지 않은 다른 인터페이스로 지시합니다.

다른 팁

웹에서 SmartCard 클라이언트 인증을 수행하는 두 가지 방법이 있습니다 : 표준 TLS/SSL 또는 브라우저 용 사용자 정의 플러그인. 표준 웹 브라우저 (IE/FF/Safari) 및 SSL 인증에 대해 이야기하고 있다고 가정합니다.

핀 프롬프트에 중요한 두 가지가 있습니다.

  • 브라우저의 SSL 세션 및 SSL 세션 캐시
  • 관련 개인 키의 카드 인증 상태
  • 미들웨어가 구현되는 방식.

결국 보안 관점에서 핀을 "요청"시기를 아는 카드입니다. 일부 카드와 키에는 키가있는 모든 작업마다 핀이 필요하며 일부 카드는 핀을 한 번 받고 키를 남겨 두는 것이 좋습니다. 인증 상태에서 독자에서 제거되거나 응용 프로그램에 의해 재설정 될 때까지.

브라우저 캐시의 세션을 재사용 할 수 없거나 연결이 설정 될 때 스마트 카드 미들웨어 (Linux의 PKCS#11, Windows의 CryptoApi/Basecsp 모듈 또는 OSX의 Tokend)가 키와 대화해야합니다. 카드에. 카드의 인증 상태에 PIN을 입력 해야하는 경우 일반적으로 브라우저에서 콜백이 트리거됩니다. 또는 미들웨어가 핀이 필요하다는 것을 알고 있다면 카드와 대화하기 전에 묻습니다.

PIN을 입력하는 것과 실제로 개인 키에 대한 액세스 권한을 다시 인증하는 것과 SSL 세션을 다시 평가하는 것 사이에는 1 : 1 관계가 없습니다.

표준 SSL을 사용하면 SSL이 브라우저에서 구현되는 방식에 따라 달라지며 클라이언트 측에서 100% 신뢰할 수있는 "핀을 입력하여 Re-Authenticate"를 가질 수 없습니다.

Linux를 사용하는 경우 OpenSC를 사용하여 (AFAIK가 CAC 카드를 사용할 수 있음) OpenSc.conf에서 "Transaction_Reset"을 true로 설정할 수 있으므로 모든 트랜잭션 (모든 SSL 세션 협상) 후에 카드가 재설정됩니다. 새 SSL 세션을 열 때마다 사용자가 핀을 다시 입력해야합니다. 그러나 이것은 서버 개시 기능이 아닌 클라이언트 측정입니다.

JavaScript 함수를 사용하여 브라우저가 몇 가지 브라우저에서 기존 SSL 캐시를 잊게 만들 수 있습니다.

function logout() {
    // clear browser authentication cache
    // IE specific
    try
    {
        document.execCommand("ClearAuthenticationCache", "false");
    }
    catch(e)
    {
        // do nothing
    }

    // clear for firefox or any browser that supports window.crypto API
    if (window.crypto && typeof window.crypto.logout === "function") {
        window.crypto.logout();
    }
}

JavaScript Settimeout 메소드를 사용하여 위의 로그 아웃 함수를 호출하고 클라이언트가 새 PIN을 입력하도록 강제로 로그 아웃 기능으로 리디렉션 할 수 있습니다.

그러나 JavaScript를 사용하고 코드는 브라우저 종속이며 모든 브라우저에서 작동하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top