인증을 위해 OAuth2를 사용하는 RESTFul Web API가 있습니다. SSL/TLS 암호화에 자체 서명 된 인증서를 사용하는 것이 실용적인가요? 우리는 신뢰할 수있는 CA가 아닌 인증서 유효성 검사 오류가 무시되는 .Net/Java SDK를 제공하므로 고객이 HTTP 요청에서 Api를 직접 호출하지 않으면 오류가 표시되지 않습니다. 이 솔루션은 우리에게 잘 보이지만 위험이나 단점이 있습니까?자체 서명 된 인증서를 사용하여 웹 API 연결을 암호화하는 것이 실용적인가요?
답변
클라이언트의 예상 서버 (예 : 인증)와 통신하고 있는지 확인하기 위해 인증서 유효성 검사가 수행됩니다. 유효성 검사는 중간 공격에서 사람을 방어하는 필수적인 부분입니다. 즉, 공격 경로에서 공격자가 데이터를 스니핑하고 수정하는 것입니다.
따라서 공개적으로 신뢰할 수있는 CA가 서명 한 인증서 대신 자체 서명 된 인증서를 사용할 수는 있지만 유효성 검사를 올바르게 수행해야하며 은 유효성 검사를 단순히 해제하지 않는 것이 좋습니다. 자체 서명 된 인증서의 경우 인증서 또는 해당 공개 키의 지문이 예상과 일치하는지 여부를 확인하여이를 수행 할 수 있습니다. 공격자가 동일한 제목으로 쉽게 인증서를 만들어 공격 내부에서 사용할 수 있기 때문에 인증서의 제목을 확인하는 것만으로는 충분하지 않습니다.
예제 코드를 포함하여 올바르게 수행하는 방법에 대한 자세한 내용은 OWASP: Certificate and Public Key Pinnning을 참조하십시오.
고맙습니다. SDK에서 자체 서명 된 인증서의 공개 키를 확인합니다. 이 질문에서 언급 한 유효성 검사 오류는 신뢰할 수있는 CA가 서버 인증서를 발급 한 것이 아니라는 것을 나타냅니다. 나는 아직 Java에 익숙하지 않지만, 서버로부터의 인증서가 신뢰할 수있는 CA에 의해 발행되지 않으면 .Net/C#에서 유효성 검사 오류가 발생합니다. 자체 서명 된 인증서를 사용하지 않아야하는 다른 이유가 있습니까? –
@LouisYang : 자체 서명 된 인증서는 올바르게 검증 된 경우, 즉 어떤 인증서가 선행을 기대 하는지를 판단하고 공개 키가 예상 한 인증서와 일치 하는지를 확인하면됩니다. 브라우저에서 공개 CA를 신뢰할 수있게하는 주된 이유는 일반적으로 어떤 인증서를 사용해야할지 모르기 때문에 신뢰할 수있는 발급자를 사용하여 신뢰를 이끌어 내야한다는 것입니다. –
언제든지 [letsencrypt] (https://letsencrypt.org/) 프로젝트가 있으며, 무료로 서명 한 인증서를받을 수 있습니다. 내 서버에서 사용합니다. – ray
다른 SE 사이트 중 하나에 더 적합하다고 판단되어이 주제를 오프 토픽으로 종료하도록 투표하고 있습니다. 이것은 실제로 프로그래밍 문제는 아니며 게시 된 코드는 없습니다. – ray
이것이 프로그래밍 문제가 아닌 이유가 확실하지 않은 이유를 잘 모릅니다. 프로그래밍은 코드에 관한 것이 아니며 프로그래머는 코더가 아닙니다. StackOverflow에 대한 많은 논의가 한 줄의 코드없이 컴퓨터 과학의 엔지니어링 방법론에 대해 얘기하고 있으며, 프로그래머에게는 위대하고 매우 유용합니다. –
@ 루이스 양 (LouisYang) : 이와 같은 질문 (예 : 보안 설계)을위한 더 나은 사이트는 security.stackexchange.com 일 수 있습니다. –