일대일 클라이언트 인증서 매핑 구성
작성자 : Robert Lucero
배경
IIS 6에는 인증을 위해 하나의 인증서를 구성하고 하나의 인증서에 매핑하는 사용자 인터페이스가 있었습니다. 이를 통해 사용자는 유효성 검사 클라이언트 인증서를 선택하고 권한 있는 사용자 자격 증명을 할당할 수 있습니다. IIS 7 이상에는 유사한 UI가 없습니다. 이 연습은 사용자에게 관리 팩의 구성 편집기를 사용하여 1대 1 클라이언트 인증서를 구성하도록 지시하도록 설계되었습니다. 이 추가 기능이 없는 사용자는 AppCmd 인수 및 C# 코드 예제에 대한 부록 섹션을 보고 이 연습을 수행할 수 있습니다.
IIS 7 이상 스키마
IIS 7 이상의 IIS 클라이언트 인증서 매핑 인증 기능에 대한 스키마입니다.
<sectionSchema name="system.webServer/security/authentication/iisClientCertificateMappingAuthentication">
<attribute name="enabled" type="bool" defaultValue="false" />
<attribute name="oneToOneCertificateMappingsEnabled" type="bool" defaultValue="true" />
<element name="oneToOneMappings">
<collection addElement="add" clearElement="clear">
<attribute name="enabled" type="bool" defaultValue="true" />
<attribute name="userName" type="string" />
<attribute name="password" type="string" encrypted="true" />
<attribute name="certificate" type="string" required="true" isUniqueKey="true" />
</collection>
</element>
</sectionSchema>
사전 요구 사항
다음은 이 연습에 필요한 필수 구성 요소입니다. 나는 이러한 일을 만들거나 수행하는 방법을 다루지 않을 것이다.
- 설치된 IIS 클라이언트 인증서 매핑 모듈
- 제대로 구성된 HTTPS 바인딩이 있는 웹 사이트
- Base-64 인증서(.cer 파일). [참고: 유효한 64비트 인증서일 수 있지만 파일 형식이어야 합니다.]
- 클라이언트에 클라이언트 인증서 설치
- IIS 7 관리 팩 Technical Preview 2 설치
1단계: 인증서 Blob 가져오기
oneToOneMappings 컬렉션 항목에는 인증서라는 특성이 있습니다. 이 특성에 필요한 값은 인증서가 아니라 실제 인증서 Blob입니다. 추출 방법은 다음과 같습니다.
.cer 파일을 마우스 오른쪽 단추로 클릭합니다.
상황에 맞는 메뉴에서 다음으로 열기... 를 선택합니다.
기타 프로그램 목록에서 메모장을 선택하고 확인을 클릭합니다. [참고: Vista/Windows 2008 목록 보기의 드롭다운 아래에 메모장을 숨길 수 있습니다.]
다음은 메모장에 표시해야 하는 내용입니다.
-----BEGIN CERTIFICATE----- MIIEfjCCA2agAwIBAgIKFW1IXAAAAAAAAjANBgkqhkiG9w0BAQUFADAbMRkwFwYD VQQDExBJSVNSZW1vdGVNZ3JUZXN0MB4XDTA4MDIxMTIxNTk1NloXDTA5MDIxMTIy MDk1NlowaDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV BAcTB1JlZG1vbmQxDTALBgNVBAoTBE1TRlQxDDAKBgNVBAsTA0lJUzEVMBMGA1UE AxMMUkxVQ0VSTzItSUlTMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3611j 34q2qQgHa7ao11TcQMDYlJMrqET05MWFY1/Vso+leujLoIGTfdHOuz4IBVoeUE+y mlL8r53s2BQeVFROnDtg4Jko1zJsz7AUAnQNBk/GYA1AHYmhY79Z0p1KXW/wSTJB tdUn732GQOqYf4wY8jOD2zUJDUG4HXm6ib8ajwIDAQABo4IB+TCCAfUwDgYDVR0P AQH/BAQDAgTwMBMGA1UdJQQMMAoGCCsGAQUFBwMBMHgGCSqGSIb3DQEJDwRrMGkw DgYIKoZIhvcNAwICAgCAMA4GCCqGSIb3DQMEAgIAgDALBglghkgBZQMEASowCwYJ YIZIAWUDBAEtMAsGCWCGSAFlAwQBAjALBglghkgBZQMEAQUwBwYFKw4DAgcwCgYI KoZIhvcNAwcwHQYDVR0OBBYEFHbHA+HwZcIrslklj1W3O23UFrBgMB8GA1UdIwQY MBaAFMxzlGbmkp2+phhDg7TPfi83d7UVMHMGA1UdHwRsMGowaKBmoGSGL2h0dHA6 Ly9paXNzYjMwNS9DZXJ0RW5yb2xsL0lJU1JlbW90ZU1nclRlc3QuY3JshjFmaWxl Oi8vXFxpaXNzYjMwNVxDZXJ0RW5yb2xsXElJU1JlbW90ZU1nclRlc3QuY3JsMIGe BggrBgEFBQcBAQSBkTCBjjBEBggrBgEFBQcwAoY4aHR0cDovL2lpc3NiMzA1L0Nl cnRFbnJvbGwvaWlzc2IzMDVfSUlTUmVtb3RlTWdyVGVzdC5jcnQwRgYIKwYBBQUH MAKGOmZpbGU6Ly9cXGlpc3NiMzA1XENlcnRFbnJvbGxcaWlzc2IzMDVfSUlTUmVt b3RlTWdyVGVzdC5jcnQwDQYJKoZIhvcNAQEFBQADggEBAEsSkcx0re36IL80UphJ w/srR3LBsy8sfwqxBMzMTdF7k6jYtUVpn3D2Dd4JXXVOaEVud9YNn9pr6xJL4t79 Zh+hJzIPA5pQLbccx4vjWB4cWEYxzcoKYCuUdZrfPFXO1a5kQAj8IZ0/6bhMceyR Z7dRDoaIuAGQLFAlC/KjIBCemDi54MlWtvATQ8bmiRuEOWeneK2Vd2e0fxyezk05 dRqa8DEC74CQN4rQuz395ECm+M/hQnN+dHOygV8n9swd0bdNq8qypwfVUes5HIpj LFmKTuGyFSVj7jv+64oTxvxtYX2QFp9q6Bi+qj0uyrX8Xjxy5rPSVPEfnxPCBg58 RCI= -----END CERTIFICATE-----
-----BEGIN CERTIFICATE----- 및 -----END CERTIFICATE----를 제거합니다.
인증서 Blob의 서식을 한 줄로 지정합니다.
이 파일을 clientCertBlob.txt 저장
2단계: 웹 사이트에 대해 IIS 클라이언트 인증서 매핑 인증 및 일대일 인증서 매핑 사용
다음 단계에서는 클라이언트 인증서 매핑 인증 기능인 일대일 인증서 매핑을 사용하도록 설정하고 매핑 항목을 추가하는 방법을 설명합니다.
- IIS 관리자 UI인 Inetmgr 시작
- 구성 중인 SSL 웹 사이트를 선택하고 구성 편집기를 엽니다.
- 섹션 드롭다운 상자에 "system.webServer/security/authentication/iisClientCertificateMappingAuthentication"을 입력합니다.
- 사용 필드를 선택하고 값을 true로 변경합니다.
- oneToOneCertificateMappingsEnabled 속성 그리드 항목을 선택하고 값을 true로 변경합니다.
- oneToOneMappings 속성 표 항목을 선택하고 작업 작업창에서 항목 편집...을 클릭합니다.
- 컬렉션 편집기 작업 목록에서 추가를 클릭합니다.
- 위에서 단일 문자열 인증서 Blob을 복사하여 인증서 필드에 붙여넣습니다.
- 클라이언트가 인증될 userName 및 암호를 설정합니다.
- 사용 필드를true로 설정
- 컬렉션 편집기 닫기
- 작업 작업창에서 적용을 클릭합니다.[참고:적용을 클릭하여 이 프로세스에 대한 스크립트를 가져오기 전에 스크립트 생성 클릭]
이 작업이 완료되면 서버는 1대 1 인증서 매핑 항목으로 IIS 클라이언트 인증서 매핑 인증을 처리하도록 구성됩니다.
3단계: SSL을 사용하여 웹 사이트에 클라이언트 인증서 인증 사용
매핑이 만들어지고 기능이 사용하도록 설정되면 클라이언트 인증서를 사용하도록 사이트를 구성해야 합니다.
- Inetmgr 내에서 IIS 관리자 UI에서 클라이언트 인증서를 사용하려는 SSL 웹 사이트를 선택합니다.
- SSL UI 모듈 선택
- 클라이언트 인증서: 라디오 수락 단추를 선택합니다.
- 작업 작업창에서 적용 을 클릭합니다.
이제 웹 사이트는 클라이언트 인증서를 기반으로 클라이언트를 수락하고 인증하도록 구성됩니다.
4단계: 모두 작동하는지 확인
SSL 웹 페이지에 액세스하려는 클라이언트에는 클라이언트 인증서가 제대로 설치되어 있어야 합니다. 클라이언트가 인증서 없이 페이지를 요청하려고 하면 401이 제공됩니다. 클라이언트 인증서가 올바르게 설치되면 페이지가 정상적으로 제공됩니다.
요구 사항에 맞게 다양한 권한 부여 규칙을 조합하여 플레이합니다.
요약
이제 IIS 클라이언트 인증서 매핑 및 단일 인증서 매핑을 구성했습니다.
부록
다음은 연습 2단계와 3단계를 수행하는 코드 조각입니다. 이 모든 작업은 구성 편집기의 스크립트 생성을 사용하여 생성되었습니다.
AppCmd 특정 지침
appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/iisClientCertificateMappingAuthentication
/enabled:"True" /oneToOneCertificateMappingsEnabled:"True" /commit:apphost
appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/iisClientCertificateMappingAuthentication
/+"oneToOneMappings.[userName='testUser',password='securePassWord!1',certificate='CERTIFICATE_BLOB']" /commit:apphost
appcmd.exe set config "Default Web Site" -section:system.webServer/security/access /sslFlags:"Ssl, SslNegotiateCert, Ssl128" /commit:apphost
C# 코드:
using System;
using System.Text;
using Microsoft.Web.Administration;
internal static class Sample {
private static void Main() {
using(ServerManager serverManager = new ServerManager()) {
Configuration config = serverManager.GetApplicationHostConfiguration();
ConfigurationSection iisClientCertificateMappingAuthenticationSection =
config.GetSection("system.webServer/security/authentication/iisClientCertificateMappingAuthentication", "Default Web Site");
iisClientCertificateMappingAuthenticationSection["enabled"] = true;
iisClientCertificateMappingAuthenticationSection["oneToOneCertificateMappingsEnabled"] = true;
ConfigurationElementCollection oneToOneMappingsCollection =
iisClientCertificateMappingAuthenticationSection.GetCollection("oneToOneMappings");
ConfigurationElement addElement = oneToOneMappingsCollection.CreateElement("add");
addElement["userName"] = @"testUser";
addElement["password"] = @"securePassWord!1";
addElement["certificate"] = @"CERTIFICATE_BLOB";
oneToOneMappingsCollection.Add(addElement);
serverManager.CommitChanges();
}
}
}
using System;
using System.Text;
using Microsoft.Web.Administration;
internal static class Sample {
private static void Main() {
using(ServerManager serverManager = new ServerManager()) {
Configuration config = serverManager.GetApplicationHostConfiguration();
ConfigurationSection accessSection = config.GetSection("system.webServer/security/access", "Default Web Site");
accessSection["sslFlags"] = @"Ssl, SslNegotiateCert, Ssl128";
serverManager.CommitChanges();
}
}
}