SSL에 사용되는 인증서 구성

네이티브 XML 웹 서비스는 사용되지 않습니다. Microsoft SQL Server의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 응용 프로그램은 수정하십시오.

SSL(Secure Sockets Layer) 통신의 경우 HTTP 서버에는 SSL에 사용할 각 소켓(IP 주소/포트 조합)에 대해 등록된 인증서가 있어야 합니다. 인증서에는 서버 인증을 위한 권한을 부여해야 합니다. 이렇게 하려면 Verisign 등의 인증서 발급 기관에서 SSL 인증서를 가져오거나 도구를 사용하여 테스트 용도로 자체 인증서를 발급하고 만듭니다.

인증서 발급 기관의 인증서이든 자체 발급 인증서이든 서버에 해당 인증서를 등록해야 합니다. SSL 인증서를 등록, 쿼리 및 삭제하려면 HTTP 구성 유틸리티(HttpCfg.exe)를 사용하는 것이 좋습니다.

SSL 인증서 등록

인증서를 등록하려면 다음 명령을 사용합니다.

httpcfg set ssl /iIP:Port**/hHash/g**Guid

인수

  • IP:Port
    인증서를 등록할 IP 주소 및 포트 조합입니다.

  • Hash
    인증서 해시입니다.

    [!참고]

    인증서 해시는 인증서 저장소에서 가져올 수 있고 인증서 스냅인 또는 CertUtil 등의 명령줄 도구를 사용하여 볼 수 있습니다.

  • Guid
    인증서를 등록하는 엔터티를 식별하는 GUID 문자열입니다. 각 SQL Server 인스턴스에 대해 하나의 GUID를 만든 다음 해당 인스턴스가 수행하는 모든 인증서 등록에 사용하는 것이 가장 좋습니다.

IP:Port에 대해 SSL 인증서를 등록하면 해당 IP:Port에서 수신하는 모든 응용 프로그램에 영향을 줍니다. 예를 들어 SQL Server 인스턴스와 IIS 등의 응용 프로그램이 모두 동일한 IP:Port(10.0.0.1:80)에서 수신하는 경우 10.0.0.1:80에 대해 SSL 인증서를 등록하는 SQL Server 인스턴스는 IIS에 영향을 줍니다. IIS와 SQL Server 인스턴스는 동일한 공통의 인증서를 공유하여 사용해야 합니다. 이것은 커널 모드 HTTP 드라이버(Http.sys)의 제한 사항입니다. IP:Port 10.0.0.1:80에서 요청을 수신하는 경우 해당 요청이 암호화되어 있기 때문에 Http.sys에서 URL을 검사하여 이 요청이 SQL Server에 속하는지, 아니면 IIS에 속하는지 확인할 수 없습니다. Http.sys는 암호를 해독한 후에만 이 요청을 라우팅할 수 있습니다. 따라서 동일한 IP:Port에서 수신하는 여러 응용 프로그램에 대해 서로 다른 SSL 인증서를 사용할 수 없습니다.

SQL Server가 Windows Vista(또는 이와 동등한 Windows Server 버전)에서 실행되는 경우 SSL을 통해 "locahost" 연결을 사용하려면 로컬 IP 주소(IPv4: 127.0.0.1 또는 IPv6: [::1]) 및 컴퓨터의 외부 IP 주소에 대해 구체적으로 인증서를 등록해야 할 수도 있습니다. 또는 SSL 인증서를 등록할 때 지정되지 않은 주소(IPv4: 0.0.0.0 또는 IPv6: [::])를 지정할 수 있습니다. 이제 Windows Vista에서 httpcfg.exe 도구를 사용하는 대신 SSL 인증서 등록 관리에 유용한 기본 제공 도구도 지원합니다. 새 명령은 다음과 같습니다.

netsh http add sslcert ipport=IP:Port certhash=Hash appid=Guid

예를 들면 다음과 같습니다.

netsh http add sslcert ipport=[::]:443 certhash=<hash> appid=<guid>Examples

다음 예에서는 인증서를 등록합니다.

httpcfg set ssl /i 10.0.0.1:80 /h 2c8bfddf59a4a51a2a5b6186c22473108295624d 
/g "{2bb50d9c-7f6a-4d6f-873d-5aee7fb43290}"

인증서 쿼리

등록된 모든 인증서를 보려면 다음 명령을 사용합니다.

httpcfg query ssl

단일 인증서를 보려면 다음과 같이 /i 옵션을 사용합니다.

httpcfg query ssl /iIP:Port

인수

  • IP:Port
    인증서를 쿼리할 IP 주소 및 포트 조합입니다.

httpcfg query ssl 
httpcfg query ssl /I 10.0.0.1:80

SSL 인증서 삭제

인증서를 삭제하려면 다음과 같이 /i 옵션을 사용합니다.

httpcfg delete ssl /iIP:Port

인수

  • IP:Port
    인증서를 삭제할 IP 주소 및 포트 조합입니다.

httpcfg delete ssl /i 10.0.0.1:80

인증서 가져오기

Verisign 등의 인증 기관에서 SQL Server와 인터넷 기반 클라이언트 간의 SSL 통신에 필요한 인증서를 가져올 수 있습니다.

하지만 테스트 용도로 MakeCert.exe라는 도구를 사용하여 테스트 인증서를 만들 수도 있습니다. MakeCert.exe는 .NET Framework SDK의 일부입니다. MakeCert.exe는 Platform SDK에서도 사용할 수 있습니다. SDK를 다운로드하려면 각각 Microsoft .NET Framework Developer CenterMicrosoft 다운로드 센터로 이동하십시오. MakeCert.exe는 X.509 인증서를 만듭니다. 이 도구는 디지털 서명을 위한 공개 키 및 개인 키 쌍을 만들어 인증서 파일에 저장합니다. 또한 키 쌍을 지정된 게시자와 연결하고 사용자가 지정한 이름을 키 쌍의 공개 부분에 바인딩하는 X.509 인증서를 만듭니다.

다음 옵션을 사용하여 MakeCert를 실행하면 호스트 이름(MySQLServer)에 응답하는 서버에 대해 SSL 인증서를 만들 수 있습니다.

makecert -r -pe -nCN="MySQLServer**"-eku1.3.6.1.5.5.7.3.1-ssmy-srlocalmachine**

-skyexchange-sp"Microsoft RSA SChannel Cryptographic Provider"-sy12

명령줄 스위치

  • -r
    자체 서명된 인증서를 만듭니다. 자체 서명된 인증서는 인증 기관에서 서명하지 않은 인증서입니다. SSL에서 필요한 암호화에는 사용할 수 있지만 인증 기관의 서명이 없기 때문에 서버 인증에는 사용할 수 없습니다.

  • -n
    서버 이름을 지정합니다. 이 이름은 X.500 표준을 따라야 합니다. 가장 간단한 방법은 CN= 뒤에 큰따옴표로 묶어 이름을 지정하는 것입니다.

  • -eku
    인증서에 향상된 키 용도 OID(개체 식별자)의 쉼표로 구분된 목록을 지정합니다. SQL Server에서는 OID가 1.3.6.1.5.5.7.3.1(szOID_PKIX_KP_SERVER_AUTH)인 서버 인증에 유효한 SSL 인증서가 필요합니다.

  • -ss
    생성된 인증서가 저장되는 인증서 저장소를 지정합니다. 인증서 저장소 내 어느 곳에도 저장할 수 있지만 my 저장소에 저장하는 것이 좋습니다.

  • -sr
    인증서가 있는 인증서 저장소를 지정합니다. 위치는 currentuser(기본값) 또는 localmachine이 될 수 있습니다. 이 인증서는 서비스용으로 생성되기 때문에 로컬 컴퓨터에 두어야 합니다.

  • -sky
    인증서 키 유형을 지정합니다. signature, exchange 또는 4 등의 정수로 지정해야 합니다. RSA 공개 키 교환 알고리즘의 경우에는 여기에 exchange가 필요합니다. 이 키 유형은 세션 키를 암호화하고 해독하는 데 사용됩니다.

  • -sp
    CryptoAPI 공급자 이름을 지정합니다. SQL Server용으로 생성되는 인증서는 Microsoft RSA SChannel Cryptographic Provider로 설정할 수 있습니다.

  • -sy
    CryptoAPI 공급자 유형을 지정합니다. 공급자가 Microsoft RSA SChannel Cryptographic Provider인 경우에는 12입니다.

추가 명령줄 스위치

  • -b
    인증서 유효 기간의 시작을 지정하는 값(mm/dd/yyyy)입니다. 기본값은 인증서를 만든 날짜입니다.

  • -e
    인증서 유효 기간의 끝을 지정하는 값(mm/dd/yyyy)입니다. 값을 설정하지 않은 경우 기본값은 12/31/2039 11:59:59 GMT입니다.

다음 예에서는 MakeCert에 추가 옵션을 사용하여 인증서를 만드는 방법을 보여 줍니다.

makecert -r -pe -n "CN= MySQLServerName" -b 01/01/2000 -e 01/01/2036 
    -eku 1.3.6.1.5.5.7.3.1 -ss my -sr localMachine -sky exchange 
    -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12

인증서가 생성되면 인증서의 MMC에서 또는 CertUtil 등의 도구를 사용하여 해시를 가져올 수 있습니다. CertUtil을 사용하여 방금 만든 인증서를 표시할 수 있습니다.

C:\>certutil -store "my" "MySQLServerName"

================ Certificate 2 ================
Serial Number: e302d3a7a831c9884c0dd736f24825e6
Issuer: CN=MySQLServerName
Subject: CN=MySQLServerName
Signature matches Public Key
Root Certificate: Subject matches Issuer
Cert Hash(sha1): d2 2f 9a 7f 18 cb ed 13 a1 3e be e5 32 69 6c 4b ad ba b9 30
  Key Container = 956cbc46-f005-4aeb-b521-7c313f2ccd10
  Provider = Microsoft RSA SChannel Cryptographic Provider
Encryption test passed
CertUtil: -store command completed successfully.

CertUtil을 실행한 결과에서 가져온 해시를 Httpcfg.exe 도구에 전달하여 자체 서명된 인증서를 등록할 수 있습니다.

MakeCert를 사용하여 자체 서명된 SSL 인증서를 만들고 Http.sys에 등록하기 전에 먼저 IIS가 컴퓨터에 설치되어 있는지 확인합니다. IIS에서 제공하는 마법사를 사용하여 SSL 인증서를 쉽게 등록할 수 있습니다. 따라서 IIS가 이미 컴퓨터에 설치되어 있으면 SSL 인증서가 이미 Http.sys에 등록되어 있을 수 있습니다. 그렇지 않은 경우에는 IIS 마법사를 사용하여 인증서를 만들고 등록할 수 있습니다.

SSL 인증서는 컴퓨터 차원에서 적용되기 때문에 SQL Server에서 사용할 인증서를 등록하는 데 IIS를 사용하는 것은 중요하지 않습니다.

고려 사항

  • SQL Server 인스턴스를 제거할 때 수동으로 삭제하지 않으면 Httpcfg.exe를 사용하여 만든 SSL 인증서 바인딩이 그대로 남게 됩니다. 이 설정은 SQL Server 설치 프로그램을 통해 만든 것이 아니므로 SQL Server 설치 프로그램으로는 제거할 수 없습니다. 따라서 SQL Server 인스턴스를 제거하는 경우에는 이러한 바인딩도 제거해야 합니다.

  • IIS 없이도 SQL Server에서 HTTP를 통해 SSL을 사용할 수 있지만 SQL Server 인스턴스와 함께 IIS를 설치한 경우 HTTP SSL 서비스는 IIS 용도로 연결됩니다. 예를 들어 명령 프롬프트에서 net stop iisadmin을 사용하는 등의 방법으로 IIS를 중지하면 HTTP SSL 서비스도 중지됩니다. 또한 Windows에서 IIS를 설치한 경우에는 IIS(Inetinfo.exe)를 시작해야만 HTTP SSL 서비스를 시작할 수 있습니다.