개인 키 / 공개 키와 같은 개념적인 관점, 즉 인증서에 서명하는 데 해시 및 암호화 사용, 거래 또는 문서의 디지털 서명 등 PKI를 개념적 관점에서 합리적으로 잘 이해합니다. 또한 openssl이있는 프로젝트에서 작업했습니다. C 라이브러리는 통신 및 인증 보안을 위해 인증서와 함께 사용되었습니다. 또한 openssl 명령 줄 도구에 매우 익숙합니다.
그러나 웹 기반 PKI 지원 프로젝트에 대한 경험이 거의 없으므로이를 더 잘 이해하기 위해 개인 프로젝트를 디자인하고 코딩하려고합니다.
요구 사항
이것은 은행을위한 웹 사이트입니다. 모든 인터넷 뱅킹 사용자는 알려진 CA (verisign, Thawte, entrust 등)에서 발급 한 모든 인증서를 사용할 수 있습니다. 은행은 사용자의 인증서를 조달 할 책임이 없습니다. 이 인증서는 은행 웹 사이트 인증에 사용됩니다. 플랫폼 / OS 등은 여전히 고정되어 있지 않습니다.
디자인
인증을 수행하는 가장 좋은 방법이 궁금합니다.
Apache에 양방향 ssl을 사용하는 방법이 있다는 것을 알았습니다.이 경우 웹 사이트를 탐색하면 자동으로 사용자에게 인증서를 요청합니다. 그러나 신뢰할 수있는 CA가 인증서에 서명했는지 여부와 인증서의 제목 줄 목록에 속하는지 여부 만 확인하기 때문에 이것이 충분한 지 확실하지 않습니다. 그러나 이것은 충분하지 않습니다. 은행 사용자 ID를 인증서와 연관시킬 수 있어야하기 때문에 은행 사건의 경우.
IIS는 Active Directory의 각 사용자에 대해 인증서를 저장할 수있는 방법을 가지고 있습니다. 이것이 MSDN 기사를 거의 읽지 않아서 이해 한 것입니다. IIS에서 양방향 SSL을 켜고 사용자가 웹 사이트를 탐색하려고하면 IIS는 승인 된 CA 목록과 함께 브라우저에 요청을 보내고 브라우저는 사용자가 자신의 인증서 저장소에서 적절한 인증서를 선택하여 보내도록합니다. 백엔드. IIS가 두 가지 작업을 수행한다고 가정합니다.
- 사용자에게 인증서에 해당하는 개인 키가 있는지 확인하십시오 (커버 협상에 따라).
- AD 사용자 인증서 매핑을 기반으로 IIS는 사용자 이름을 응용 프로그램에보고합니다.
웹 서버에 따라 암호화 기능을 호출하여 인증을 명시 적으로 수행하십시오.
- 인증서를 업로드하는 사용자 화면을 표시하면 응용 프로그램은 사용자에게 인증서에 해당하는 개인 키가 있는지 확인합니다 (인증서를 사용하여 일부 문자열에 서명하도록 프런트 엔드에 요청).
- 응용 프로그램에는 각 사용자를 자신의 사용자 ID에 매핑 할 수있는 일부 데이터가 저장되어있는 데이터베이스가 있습니다. 이것은 아마도
- 각 사용자 ID에 해당하는 전체 인증서
- 각 사용자 ID에 해당하는 CA 및 인증서 일련 번호
나는 일반적으로 사용되는 방법이 궁금합니다. 모범 사례는 무엇입니까? # 3으로 가야한다면 가장 좋은 방법은 무엇입니까?
스마트 폰 앱에서도 쉽게 작동 할 수있는 것이 추가 보너스가 될 것입니다.
최신 정보
답변 중 일부가 잘못 이해되어 있음을 나타내는 것처럼 보이기 때문에 "인증 부분을 직접 코딩하십시오"라는 내용을 명확하게 설명하겠습니다.
이것은 내가 암호화 물건을 직접 쓰는 것을 의미하지는 않습니다. IIS 또는 다른 웹 서버에 의존하지 않고 암묵적으로 암호화 루틴을 실제로 호출한다는 것을 의미합니다.