소개
이 문서에서는 IP Phone의 기업 디렉터리 기능에서 "호스트를 찾을 수 없음" 문제를 해결하는 방법에 대해 설명합니다.
배경 정보
이 문서와 관련된 중요한 정보는 다음과 같습니다.
- Corporate Directory는 CUCM(Cisco Unified Communications Manager)과 함께 자동으로 설치되는 Cisco에서 제공하는 기본 IP 전화 서비스입니다.
- 다양한 전화 서비스에 대한 전화 가입에 대한 정보는 telecaterservice, telecaterserviceparameter, telecatersubscribedparameter, telecatersubscribedservice 테이블의 데이터베이스에 저장됩니다.
- 전화기에서 Corporate Directory(회사 디렉토리) 옵션을 선택하면 전화기가 CUCM 서버 중 하나에 HTTP 또는 HTTPS 요청을 전송하고 XML 객체로 HTTP(S) 응답으로 반환됩니다. HTTPS인 경우 이 역시 TVS 서비스에 연결하여 HTTPS용 인증서를 확인하는 전화기에 따라 달라집니다. 미드릿을 지원하는 전화기에서 이 기능은 전화기 미드릿에서 구현되고 서비스 프로비저닝 설정의 영향을 받을 수 있습니다.
중요 정보
- 디렉터리 또는 회사 디렉터리에 액세스할 때 문제가 발생하는지 확인합니다.
- Corporate Directory(회사 디렉토리) 서비스 아래에서 Service UR(서비스 UR) 필드를 무엇으로 설정합니까?
- URL이 Application:Cisco/CorporateDirectory로 설정된 경우 전화기의 펌웨어 버전에 따라 전화기는 HTTP 또는 HTTPS 요청을 수행합니다.
- 펌웨어 버전 9.3.3 이상을 사용하는 전화기는 기본적으로 HTTPS를 요청합니다.
- 서비스 URL이 Application:Cisco/CorporateDirectory로 설정된 경우 전화기는 CallManager(CM) 그룹의 첫 번째 서버인 서버에 HTTP(S) 요청을 보냅니다.
- HTTP(S) 요청이 전송되는 전화기와 서버 간의 네트워크 토폴로지를 식별합니다.
- HTTP(S) 트래픽을 삭제/방해할 수 있는 경로의 방화벽, WAN 최적화 프로그램 등에 유의하십시오.
- HTTPS를 사용 중인 경우 전화기와 TVS 서버 간의 연결 및 TVS가 작동하는지 확인합니다.
작업 시나리오
이 시나리오에서 전화 서비스 URL은 Application:Cisco/CorporateDirectory로 설정되며 전화기는 HTTPS를 사용합니다.
이 예에서는 올바른 URL이 있는 전화기의 컨피그레이션 파일을 보여줍니다.
<phoneService type="1" category="0">
<name>Corporate Directory</name>
<url>Application:Cisco/CorporateDirectory</url>
<vendor></vendor>
<version></version>
</phoneService>
전화기 콘솔 로그에서 이 단계를 확인할 수 있습니다.
- 전화기에서 HTTPS URL을 사용합니다.
7949 NOT 11:04:14.765155 CVM-appLaunchRequest: [thread=AWT-EventQueue-0]
[class=cip.app.G4ApplicationManager] Creating application module -
Corporate Directory
7950 ERR 11:04:14.825312 CVM-XsiAppData::getCdUrl:
[thread=appmgr MQThread]
[class=xxx.xxx.xx] Using HTTPS URL
- 디렉터리 서버에서 전화기에 제공된 Tomcat 웹 인증서를 전화기에서 사용할 수 없습니다. 따라서 전화기는 TVS(Trust Verification Service)를 통해 인증서를 인증하려고 시도합니다.
7989 ERR 11:04:15.038637 SECD: -HTTPS cert not in CTL, <10.106.111.100:8443>
7990 NOT 11:04:15.038714 SECD: -TVS service available, can attempt via TVS
- 전화기는 TVS 캐시에서 먼저 찾고, 찾지 못한 경우 TVS 서버에 연결합니다.
7995 NOT 11:04:15.039286 SECD: -TVS Certificate Authentication request
7996 NOT 11:04:15.039394 SECD: -No matching entry found at cache
- TVS와의 연결도 안전하므로 인증서 인증이 완료되며 이 메시지는 성공하면 인쇄됩니다.
8096 NOT 11:04:15.173585 SECD: -Successfully obtained a TLS connection
to the TVS server
- 이제 전화기에서 인증서 인증 요청을 보냅니다.
8159 NOT 11:04:15.219065 SECD: -Successfully sent the certificate Authentication
request to TVS server, bytes written : 962
8160 NOT 11:04:15.219141 SECD: -Done sending Certificate Validation request
8161 NOT 11:04:15.219218 SECD: -Authenticate Certificate : request sent to
TVS server - waiting for response
- TVS의 응답 "0"은(는) 인증이 성공했음을 의미합니다.
8172 NOT 11:04:15.220060 SECD: -Authentication Response received, status : 0
- 이 메시지가 표시되면 응답이 표시됩니다.
8185 NOT 11:04:15.221043 SECD: -Authenticated the HTTPS conn via TVS
8198 NOT 11:04:15.296173 CVM-[truncated] Received
HTTP/1.1 200 OK^M
X-Frame-Options: SAMEORIGIN^M
Set-Cookie: JSESSIONID=660646D3655BB00734D3895606BCE76F;
Path=/ccmcip/; Secure; HttpOnly^M
Content-Type: text/xml;charset=utf-8^M
Content-Length: 966^M
Date: Tue, 30 Sep 2014 11:04:15 GMT^M
Server: ^M
^M
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><CiscoIPPhoneInput>
<Title>Directory Search</Title><Prompt>Enter search criteria</Prompt><SoftKeyItem>
<Name>Search</Name><Position>1</Position><URL>SoftKey:Submit</URL></SoftKeyItem>
<SoftKeyItem><Name><<</Name><Position>2</Position><URL>SoftKey:<<</URL>
</SoftKeyItem><SoftKeyItem><Name>Cancel</Name><Position>3</Position>
<URL>SoftKey:Cancel</URL></SoftKeyItem>
<URL>https://10.106.111.100:8443/ccmcip/xmldirectorylist.jsp</URL>
<InputItem><DisplayName>First Name</DisplayName>
<QueryStringParam>f</QueryStringParam><InputFlags>A</InputFlags>
<DefaultValue></DefaultValue></InputItem><InputItem>
<DisplayName>Last Name</DisplayName><QueryStringParam>l</QueryStringParam>
<InputFlags>A</InputFlags><DefaultValue></DefaultValue></InputItem><InputItem>
<DisplayName>
인증서 인증 프로세스는 알 수 없는 인증서에 대한 전화 연락처 신뢰 확인 서비스에서 설명하는 것과 유사합니다.
폰 엔드에서 수집한 패킷 캡처(PCAP)에서 이 필터 tcp.port==2445를 사용하여 TVS 통신을 확인할 수 있습니다.
동시 TVS 로그에서:
- TLS(Transport Layer Security) 핸드 쉐이크와 관련된 추적을 검토합니다.
- 다음으로, 들어오는 16진수 덤프를 검토합니다.
04:04:15.270 | debug ipAddrStr (Phone) 10.106.111.121
04:04:15.270 |<--debug
04:04:15.270 |-->debug
04:04:15.270 | debug 2:UNKNOWN:Incoming Phone Msg:
.
.
04:04:15.270 | debug
HEX_DUMP: Len = 960:
04:04:15.270 |<--debug
04:04:15.270 |-->debug
04:04:15.270 | debug 57 01 01 00 00 00 03 ea
.
<< o/p omitted >>
.
04:04:15.271 | debug MsgType : TVS_MSG_CERT_VERIFICATION_REQ
- TVS가 발급자 세부사항을 검색합니다.
04:04:15.272 |-->CDefaultCertificateReader::GetIssuerName
04:04:15.272 | CDefaultCertificateReader::GetIssuerName got issuer name
04:04:15.272 |<--CDefaultCertificateReader::GetIssuerName
04:04:15.272 |-->debug
04:04:15.272 | debug tvsGetIssuerNameFromX509 - issuerName :
CN=cucm10;OU=TAC;O=Cisco;L=Blore;ST=KN;C=IN and Length: 43
04:04:15.272 |<--debug
- TVS가 인증서를 확인합니다.
04:04:15.272 | debug tvsGetSerialNumberFromX509 - serialNumber :
6F969D5B784D0448980F7557A90A6344 and Length: 16
04:04:15.272 | debug CertificateDBCache::getCertificateInformation -
Looking up the certificate cache using Unique MAP ID :
6F969D5B784D0448980F7557A90A6344CN=cucm10;OU=TAC;O=Cisco;L=Blore;ST=KN;C=IN
04:04:15.272 | debug CertificateDBCache::getCertificateInformation -
Certificate compare return =0
04:04:15.272 | debug CertificateDBCache::getCertificateInformation -
Certificate found and equal
- TVS가 전화기로 응답을 전송합니다.
04:04:15.272 | debug 2:UNKNOWN:Sending CERT_VERIF_RES msg
04:04:15.272 | debug MsgType : TVS_MSG_CERT_VERIFICATION_RES
전화 서비스 URL이 Application:Cisco/CorporateDirectory로 설정되어 있으며 전화기에서 HTTP를 사용합니다.
참고: 이전 폰 펌웨어 버전을 사용하는 대신 서비스 및 보안 서비스 URL을 HTTP URL로 하드 코딩했습니다. 그러나 기본적으로 HTTP를 사용하는 전화기 펌웨어에 동일한 이벤트 시퀀스가 표시됩니다.
전화기의 구성 파일에 올바른 URL이 있습니다.
<phoneService type="1" category="0">
<name>Corporate Directory</name>
<url>Application:Cisco/CorporateDirectory</url>
<vendor></vendor>
<version></version>
</phoneService>
전화기 콘솔 로그에서 이 단계를 확인할 수 있습니다.
7250 NOT 11:44:49.981390 CVM-appLaunchRequest: [thread=AWT-EventQueue-0]
[class=cip.app.G4ApplicationManager] Creating application module -
Corporate Directory/-838075552
7254 NOT 11:44:50.061552 CVM-_HTTPMakeRequest1: Processing Non-HTTPS URL
7256 NOT 11:44:50.061812 CVM-_HTTPMakeRequest1() theHostname: 10.106.111.100:8080
7265 NOT 11:44:50.233788 CVM-[truncated] Received
HTTP/1.1 200 OK^M
X-Frame-Options: SAMEORIGIN^M
Set-Cookie: JSESSIONID=85078CC96EE59CA822CD607DDAB28C91;
Path=/ccmcip/; HttpOnly^M
Content-Type: text/xml;charset=utf-8^M
Content-Length: 965^M
Date: Tue, 30 Sep 2014 11:44:50 GMT^M
Server: ^M
^M
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><CiscoIPPhoneInput>
<Title>Directory Search</Title><Prompt>Enter search criteria</Prompt><SoftKeyItem>
<Name>Search</Name><Position>1</Position><URL>SoftKey:Submit</URL></SoftKeyItem>
<SoftKeyItem><Name><<</Name><Position>2</Position><URL>SoftKey:<<</URL>
</SoftKeyItem><SoftKeyItem><Name>Cancel</Name><Position>3</Position>
<URL>SoftKey:Cancel</URL></SoftKeyItem>
<URL>http://10.106.111.100:8080/ccmcip/xmldirectorylist.jsp</URL><InputItem>
<DisplayName>First Name</DisplayName><QueryStringParam>f</QueryStringParam>
<InputFlags>A</InputFlags><DefaultValue></DefaultValue></InputItem><InputItem>
<DisplayName>Last Name</DisplayName><QueryStringParam>l</QueryStringParam>
<InputFlags>A</InputFlags><DefaultValue></DefaultValue></InputItem><InputItem>
<DisplayName>Number</D
패킷 캡처에서 HTTP GET 요청 및 성공적인 응답을 볼 수 있습니다. 다음은 CUCM의 PCAP입니다.
![PCAP from CUCM](/c/dam/en/us/support/docs/unified-communications/unified-communications-manager-callmanager/118699-technote-directory-00-00.jpeg)
문제 해결
트러블슈팅을 수행하기 전에 앞서 나열된 문제에 대한 세부 정보를 수집하십시오.
필요한 경우 수집할 로그
문제를 격리하려면 다음 단계를 완료하십시오.
1단계.
다음 세부 정보를 사용하여 테스트 서비스를 만듭니다.
Service Name : <Any Name>
Service URL : http://<CUCM_IP_Address>:8080/ccmcip/xmldirectoryinput.jsp
Secure-Service URL : http://<CUCM_IP_Address>:8080/ccmcip/xmldirectoryinput.jsp
Service Category : XML Service
Service Type : Directories
Enable : CHECK
Enterprise Subscription : DO NOT CHECK
이제 영향을 받는 전화기 중 하나에 이 서비스를 등록합니다.
- 디바이스 컨피그레이션 페이지로 이동합니다.
- Related Links(관련 링크)에서 Subscribe/Unsubscribe Services(서비스 가입/가입 취소)를 선택합니다.
- 생성한 테스트 서비스를 구독합니다.
- 전화기를 저장하고 컨피그레이션을 적용하고 재설정합니다.
- HTTP 또는 HTTPS URL 사용 여부를 결정하는 전화기의 FW 버전에 관계없이 사용자가 수행한 작업은 HTTP URL을 사용하도록 강제하는 것입니다.
- 전화기에서 회사 디렉터리 서비스에 액세스합니다.
- 작동하지 않을 경우 앞에서 설명한 로그를 수집한 다음 [작업 시나리오] 섹션에서 설명한 작업 시나리오와 비교하고 편차가 있는 위치를 식별합니다.
- 이 기능이 작동하면 CUCM IP Phone 서비스 관점에서 문제가 없음을 확인한 것입니다.
- 이 단계에서는 HTTPS URL을 사용하는 전화기에서 문제가 발생할 가능성이 높습니다.
- 이제 작동하지 않는 전화기를 선택하고 다음 단계로 진행합니다.
이 변경과 함께 작동하는 경우 컨피그레이션을 HTTPS 대신 HTTP를 통해 작동하는 회사 디렉토리 요청/응답과 함께 남겨도 되는지 여부를 결정해야 합니다. HTTPS 통신이 작동하지 않는 이유는 다음에 논의되는 이유 중 하나입니다.
2단계.
앞에서 언급한 로그를 수집하여 작업 시나리오 섹션에서 설명한 작업 시나리오와 비교하고 편차가 있는 위치를 확인합니다.
다음 문제 중 하나일 수 있습니다.
- 전화기에서 TVS 서버에 연결할 수 없습니다.
- PCAPS에서 포트 2445의 통신을 확인합니다.
- 경로의 네트워크 장치가 이 포트를 차단하지 않는지 확인합니다.
- 전화기에서 TVS 서버에 연결하지만 TLS 핸드셰이크가 실패합니다.
이러한 라인은 전화기 콘솔 로그에 인쇄할 수 있습니다.
5007: NOT 10:25:10.060663 SECD: clpSetupSsl: Trying to connect to IPV4,
IP: 192.168.136.6, Port : 2445
5008: NOT 10:25:10.062376 SECD: clpSetupSsl: TCP connect() waiting,
<192.168.136.6> c:14 s:15 port: 2445
5009: NOT 10:25:10.063483 SECD: clpSetupSsl: TCP connected,
<192.168.136.6> c:14 s:15
5010: NOT 10:25:10.064376 SECD: clpSetupSsl: start SSL/TLS handshake,
<192.168.136.6> c:14 s:15
5011: ERR 10:25:10.068387 SECD: EROR:clpState: SSL3 alert
read:fatal:handshake failure:<192.168.136.6>
5012: ERR 10:25:10.069449 SECD: EROR:clpState: SSL_connect:failed in SSLv3
read server hello A:<192.168.136.6>
5013: ERR 10:25:10.075656 SECD: EROR:clpSetupSsl: ** SSL handshake failed,
<192.168.136.6> c:14 s:15
5014: ERR 10:25:10.076664 SECD: EROR:clpSetupSsl: SSL/TLS handshake failed,
<192.168.136.6> c:14 s:15
5015: ERR 10:25:10.077808 SECD: EROR:clpSetupSsl: SSL/TLS setup failed,
<192.168.136.6> c:14 s:15
5016: ERR 10:25:10.078771 SECD: EROR:clpSndStatus: SSL CLNT ERR,
srvr<192.168.136.6>
자세한 내용은 Cisco 버그 ID CSCua65618을 참조하십시오.
- 전화기에서 TVS 서버에 연결하고 TLS 핸드셰이크에 성공했지만 TVS에서 전화기가 인증을 요청한 인증서의 서명자를 확인할 수 없습니다.
TVS 로그의 코드 조각은 다음과 같습니다.
전화기에서 TV에 연결합니다.
05:54:47.779 | debug 7:UNKNOWN:Got a new ph conn 10.106.111.121 on 10, Total Acc = 6..
.
.
05:54:47.835 | debug MsgType : TVS_MSG_CERT_VERIFICATION_REQ
TVS는 발급자 이름을 가져옵니다.
05:54:47.836 |-->CDefaultCertificateReader::GetIssuerName
05:54:47.836 | CDefaultCertificateReader::GetIssuerName got issuer name
05:54:47.836 |<--CDefaultCertificateReader::GetIssuerName
05:54:47.836 |-->debug
05:54:47.836 | debug tvsGetIssuerNameFromX509 - issuerName :
CN=cucmpub9;OU=TAC;O=Cisco;L=Bangalore;ST=KN;C=IN and Length: 49
인증서를 조회하지만 찾을 수 없습니다.
05:54:47.836 | debug CertificateCTLCache::getCertificateInformation
- Looking up the certificate cache using Unique MAP ID :
62E09123B09A61D20E77BE5BF5A82CD4CN=cucmpub9;OU=TAC;O=Cisco;L=Bangalore;ST=KN;C=IN
05:54:47.836 |<--debug
05:54:47.836 |-->debug
05:54:47.836 | debug ERROR:CertificateCTLCache::getCertificateInformation
- Cannot find the certificate in the cache
05:54:47.836 |<--debug
05:54:47.836 |-->debug
05:54:47.836 | debug getCertificateInformation(cert) : certificate not found
- HTTPS 트래픽은 네트워크 어딘가에서 차단/삭제됩니다.
통신을 확인하기 위해 전화기와 CUCM 서버에서 동시 PCAP를 가져옵니다.
"Host Not Found(호스트를 찾을 수 없음)" 문제가 발생하는 기타 시나리오
- CUCM 서버는 이름 확인 문제와 함께 호스트 이름으로 정의됩니다.
- TVS 서버 목록이 xmldefault.cnf.xml 파일을 다운로드할 때 전화기에서 비어 있습니다. (버전 8.6.2에서는 Cisco 버그 ID CSCti64589로 인해 기본 컨피그레이션 파일에 TVS 항목이 없습니다.)
- 전화기에서 xmldefault.cnf.xml 파일을 다운로드했으므로 컨피그레이션 파일의 TVS 항목을 사용할 수 없습니다. 기본 컨피그레이션 파일에서 TVS 정보를 구문 분석하려면 Cisco 버그 ID CSCuq33297 - Phone을 참조하십시오.
- CUCM 업그레이드 후에는 회사 디렉토리가 작동하지 않습니다. 전화기 펌웨어가 이후 버전으로 업그레이드되기 때문에 결국 HTTPS 사용 동작이 기본적으로 변경됩니다.