서버가 SSL을 사용하도록 구성된 경우 SQL Server 시작하지 못함

이 문서에서는 서버가 SSL을 사용하도록 구성될 때 발생하는 오류 17182(오류 0xd, 상태 코드 0x38 함께 TDSSNIClient 초기화 실패)에 대한 해결 방법을 제공합니다.

적용 대상: SQL Server
원래 KB 번호: 2023869

증상

다음과 같은 경우를 생각해볼 수 있습니다.

  • Windows Server 2008 이상 버전의 운영 체제를 실행하는 시스템에서 호스트되는 SQL Server 2005 이상 버전의 instance 있습니다.

  • 다음 레지스트리 키 아래에 인증서의 지문을 인증서 값에 수동으로 입력하여 SQL Server 대한 SSL 암호화를 구성했습니다.

    HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\<instance>\MSSQLServer\SuperSocketNetLib

이 시나리오에서는 SQL Server 시작되지 않을 수 있으며 다음 메시지가 SQL Server Errorlog에 기록됩니다.

<Datetime> 서버 오류: 17182, 심각도: 16, 상태: 1.
<Datetime> Server TDSSNIClient 초기화가 오류 0xd 코드 0x38 상태 실패했습니다.
<Datetime> 서버 오류: 17182, 심각도: 16, 상태: 1. <오류 0xd 코드 0x1 상태 Datetime> Server TDSSNIClient 초기화에 실패했습니다.
<Datetime> 서버 오류: 17826, 심각도: 18, 상태: 3.
<Datetime> Server 네트워크 라이브러리의 내부 오류로 인해 네트워크 라이브러리를 시작할 수 없습니다. 원인을 확인하려면 오류 로그에서 이 오류 바로 앞에 있는 오류를 검토합니다.
<Datetime> 서버 오류: 17120, 심각도: 16, 상태: 1.
<Datetime> Server SQL Server FRunCM 스레드를 생성할 수 없습니다. 가능한 관련 문제에 대한 정보는 SQL Server 오류 로그 및 Windows 이벤트 로그를 확인합니다.

원인

이러한 증상의 일반적인 근본 원인은 MMC에서 인증서 스냅인의 풍부한 편집 컨트롤에서 복사될 때 실수로 인증서의 지문 값에 추가되었을 수 있는 보이지 않는 문자입니다.

해결 방법

다음 해결 방법 중 하나를 사용할 수 있습니다.

  • 인증서의 지문 값을 복사할 때 MMC의 인증서 스냅인에서 선행 문자를 복사하지 마세요.

  • MMC에서 인증서 스냅인 대신 Certutil 도구를 사용하여 인증서를 텍스트 파일로 내보낸 다음 텍스트 파일에서 필요한 인증서의 지문 값을 복사합니다. 사용법은 다음과 같습니다.

    컴퓨터의 현재 사용자 인증서 저장소 콘텐츠를 보려면 명령 프롬프트에서 다음을 입력합니다.

    certutil -store -user my

    컴퓨터의 로컬 컴퓨터 인증서 저장소의 콘텐츠를 보려면 명령 프롬프트에서 다음을 입력합니다.

    certutil -store my

Vista 기반 운영 체제의 관리 명령 프롬프트에서 다음을 사용하여 위의 명령의 출력을 텍스트 파일로 전송할 수 있습니다.

certutil -store my > cert.txt

지문은 Cert Hash(sha1)로 시작하는 줄에 있을 수 있습니다.

예: Cert Hash(sha1): e7 02 4b 42 c4 04 fd 44 8c ec 21 f1 91 76 5c b7 c3 ad 1d 55

그런 다음, 공백 없이 이 값을 복사할 수 있습니다(위 예제의 경우 e7024b42c404fd448cec21f191765cb7c3ad1d55)를 다음 레지스트리 키 아래의 인증서 값으로 복사할 수 있습니다.

HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\<instance>\MSSQLServer\SuperSocketNetLib

추가 정보

오류 메시지 17182에 0x38 상태 코드는 SSL을 초기화하는 동안 SQL Server 오류가 발생한다는 것을 의미합니다. 자세한 내용은 SQL 프로토콜을 참조하세요.

반환 코드 0xd "데이터가 잘못되었습니다"로 변환되는 OS 오류 0xd(13)를 나타냅니다. 위의 오류 17182 "오류 0xd TDSSNIClient 초기화에 실패했습니다. 상태 코드 0x38"는 인증서 값 아래의 문자열을 인증서의 유효한 지문으로 제대로 다시 변환할 수 없기 때문에 특히 발생합니다.

인증서 스냅인의 이 GUI 문제는 인증서 스냅인에서 다양한 편집 컨트롤을 사용하지 않으므로 이전 버전의 Windows(예: Windows XP, Windows Server 2003)에서 발생하지 않습니다.

이 문서에 설명된 문제가 있는지 여부를 검사 하려면 다음 절차를 사용할 수 있습니다.

  1. regedit를 열고 다음 레지스트리 키로 이동하고 키를 SSLKey.reg 파일로 내보냅니다.

    HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\<instance>\MSSQLServer\SuperSocketNetLib

  2. 메모장을 사용하여 1단계에서 SSLKey.reg 파일을 열고 파일 메뉴의 다른 이름으로 저장 대화 상자를 사용하여 인코딩 목록에서 ANSI를 클릭한 다음 저장을 클릭합니다.

  3. 아래 경고가 표시되면 확인을 클릭하여 3단계로 진행합니다.

    경고

    이 파일에는 이 파일을 ANSI로 인코딩된 텍스트 파일로 저장하면 손실되는 유니코드 형식의 문자가 포함되어 있습니다. 유니코드 정보를 유지하려면 아래 의 취소 를 클릭한 다음 인코딩 드롭다운 목록에서 유니코드 옵션 중 하나를 선택합니다. 계속?

  4. SSLKey.reg 파일을 닫고 메모장을 사용하여 다시 엽니다.

  5. 이제 인증서 지문에 질문 표시 또는 다른 잘못된 문자가 표시되는 경우 이 문서에 설명된 문제가 발생할 수 있음을 나타냅니다.

    예제 항목은 다음과 유사할 수 있습니다.

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\MSSQLServer\SuperSocketNetLib]
    "Certificate"="?b009d02038431da332f095b4ea6a126f4f5c7d18"