SQL Server 2008의 인증서

SQL Server 2008의 인증서

내 응용 프로그램과 Sql Server 2008 간의 전송을 위해 SSL을 구현해야 합니다.

저는 Windows 7, Sql Server 2008, Sql Server Management Studio를 사용하고 있으며 내 응용 프로그램은 C#으로 작성되었습니다.

인증서 생성에 대한 MSDN 페이지를 따르려고 했습니다.이것'특정 클라이언트에 대한 Encrpyt' 아래에 있지만 절망적으로 혼란스러워졌습니다. 암호화를 성공적으로 구현하려면 몇 가지 작은 단계가 필요합니다.

첫째, 나는 MMC를 이해하지 못한다. 거기에 많은 인증서가 있습니다. 이 인증서는 내 암호화에 사용해야 합니까, 아니면 이미 존재하는 것에 사용되고 있습니까? 또 다른 점은 이러한 인증서가 모두 내 로컬 컴퓨터에 있는 파일이라고 가정하는데 '개인'이라는 폴더가 있는 이유는 무엇입니까?

둘째, 위의 문제를 피하기 위해 자체 서명된 어셈블리를 사용하여 약간의 실험을 수행했습니다. 위의 MSDN 링크에서 볼 수 있듯이 SSMS에서 실행되는 SQL을 사용하여 자체 서명된 인증서를 생성했습니다. 그런 다음 다음 연결 문자열을 사용하여 연결했습니다.

 Data Source=myServer;Initial Catalog=myDatabase;User ID=myUser;Password=myPassword;Encrypt=True;TrustServerCertificate=True

연결되어 작동했습니다. 그런 다음 방금 만든 인증서를 삭제했는데 여전히 작동했습니다. 분명히 아무 일도 하지 않았지만 왜 안 되겠습니까? 실제로 "작동"하는지 어떻게 알 수 있나요? SSMS에서 클라이언트로 파일을 가져오는 중간 단계(어쨌든?)가 누락된 것 같습니다.

저는 제가 무엇을 하고 있는지 조금도 모릅니다. 따라서 제게 주실 수 있는 도움, 조언, 의견, 참고 자료는 정말 감사하게 생각합니다.

미리 감사드립니다. :)

답변1

MSDN 사양을 올바르게 이해했다면 연결 문자열에 지정하기만 하면 됩니다 Encrypt=True;TrustServerCertificate=True. 이는 클라이언트가 암호화를 요청하고서버가 사용할 수 있는 모든 인증서를 기꺼이 수락합니다.. 서버에는 다른 것이 없는 경우 서버 시작 시 항상 자체 서명된 인증서가 생성되어 사용됩니다. 클라이언트가 기꺼이 받아들인다면어느인증서가 있으면 서버의 임시 자체 서명 인증서가 다른 인증서와 마찬가지로 승인됩니다.

그러한 설정이 제공하는 것은 애플리케이션과 서버 사이의 암호화된 통신 채널이며, 쉽게 귀에 쏙쏙 들어올 수 없는 채널입니다. 그러나 채널은 악의적인 중간자 공격에 노출되어 있습니다. 공격자가 클라이언트를 속여 연결하도록 할 수 있는 경우그를서버 대신(예: DNS 레코드를 제어함으로써, 보다 정확하게는 클라이언트가 사용할 DNS 서버 IP, 이는 제어할 간단한 DHCP 설정임) 공격자가 제시할 수 있습니다.어느인증서를 사용하면 클라이언트가 이를 수락하고 클라이언트와 전체 인증 왕복을 수행하여 사용된 SQL 사용자 이름과 비밀번호를 얻은 다음 실제 서버에 연결하고 모든 통신을 앞뒤로 전달할 수 있습니다. 모든 콘텐츠를 무료로 보세요. 클라이언트는 '모니터링'되고 있는지 결코 알 수 없습니다. 이것이 '중간자' 공격이다.

위와 같은 상황을 방지하기 위해 클라이언트는제거해야 함TrustServerCertificate=True연결 문자열에서 . 이 작업이 완료되면 서버에서 사용하는 인증서가가지다고객의 신뢰를 얻으려면 이때 모든 문제가 발생합니다. 암호화된 트래픽이 있는 약한 설정을 사용해도 괜찮지만이해하다당신은5월중간자 공격을 받고 괜찮다면 훨씬 간단한 TrustServerCertificate=True설정을 사용하십시오. 그렇지 않다면 불행하게도 자신이 하고 있는 일을 정말로 이해해야 하며 이는 사소한 일이 아닙니다. 데이터가그래서중요하다면 서버에 대한 VeriSign, Thawte 또는 GlobalSign(모든 Windows 클라이언트가 신뢰하는 3개의 루트) 인증서(연간 ~$500)에 돈을 쓰는 것이 그다지 이상하지 않을 것입니다.

답변2

"개인"은 인증서 저장소에 대한 오해의 소지가 있는 이름입니다. MMC에 있을 때 선택할 수 있는 인증서가 보이면 아마도 괜찮은 것입니다. 실제 인증서를 사용하는 것이 좋습니다. 이는 Microsoft 인증서 서버를 사용하여 사내에서 생성된 인증서이거나 인증서 공급자로부터 구입한 인증서일 수 있습니다. 자체 서명된 인증서를 사용하지 않습니다. 적용하려면 SQL Server 인스턴스 서비스도 다시 시작해야 합니다.

몇 가지 일반적인 팁:

클라이언트에 암호화를 적용하는 경우 클라이언트의 모든 SQL 통신은 전송 수준 암호화를 사용해야 합니다.

서버에 암호화를 적용하는 경우 해당 인스턴스에 대한 모든 SQL 통신은 전송 수준 암호화를 사용해야 합니다.

선택한 구성(선택적 또는 강제)에 관계없이 애플리케이션에는 여전히 다양한 연결 옵션에 대한 지원이 필요합니다. 암호화 연결 키워드와 같은 것입니다.

저는 개인적으로 SQL 네이티브 클라이언트가 내장된 SQL 클라이언트보다 더 자세한 오류 메시지를 제공한다는 사실을 발견했습니다. 그러나 둘 중 하나를 사용하여 암호화를 사용/강제할 수 있습니다.

Microsoft의 문서는 약간 개략적이지만 몇 가지 좋은 기사가 있습니다.

SQL Server에 대한 보안 연결을 선택적으로 사용
링크

Microsoft Management Console을 사용하여 SQL Server 인스턴스에 대해 SSL 암호화를 활성화하는 방법
http://support.microsoft.com/kb/316898

SQL Server Native Client에서 연결 문자열 키워드 사용
http://msdn.microsoft.com/en-us/library/ms130822.aspx

관련 정보