Share via


다른 사용자가 배포할 수 있는 ClickOnce 응용 프로그램 만들기

ClickOnce 배포를 만드는 모든 개발자가 직접 응용 프로그램을 배포하는 것은 아닙니다. 즉, 대부분의 개발자는 ClickOnce를 사용하여 응용 프로그램을 패키지로 만든 후에 대기업 등의 고객에게 전달합니다. 그러면 고객이 응용 프로그램을 해당 네트워크에서 호스팅합니다. 이 항목에서는 .NET Framework 3.5 이전 버전의 경우 이러한 방식의 배포에서 발생하는 일부 문제에 대해 설명합니다. 또한 .NET Framework 3.5의 "신뢰를 위해 매니페스트 사용"이라는 새 기능을 통해 제공되는 새로운 해결 방법에 대해 설명하며, 마지막으로 이전 버전의 .NET Framework를 사용하는 고객이 ClickOnce 배포를 만드는 데 사용할 수 있는 권장 전략을 제시합니다.

고객을 위한 배포 작성 시 발생하는 문제점

고객에게 배포를 제공하려는 경우 다양한 문제가 발생할 수 있습니다. 그 중 첫 번째 문제는 코드 서명 관련 문제입니다. ClickOnce 배포의 배포 매니페스트 및 응용 프로그램 매니페스트를 네트워크에서 배포하려면 두 항목에 모두 디지털 인증서로 서명해야 합니다. 이 경우 매니페스트에 서명할 때 개발자의 인증서를 사용할지 아니면 고객의 인증서를 사용할지를 선택해야 합니다.

ClickOnce 응용 프로그램의 ID는 배포 매니페스트의 디지털 서명을 기준으로 하므로 사용할 인증서를 선택하는 과정은 매우 중요합니다. 개발자가 배포 매니페스트에 서명하는 경우 고객이 대기업이며 회사의 여러 부서에서 사용자 지정된 응용 프로그램 버전을 배포하면 충돌이 발생할 수 있습니다.

예를 들어 Adventure Works라는 회사에 재무 부서와 인사 부서가 있으며 두 부서에서 모두 SQL 데이터베이스에 저장된 데이터에서 보고서를 생성하는 ClickOnce 응용 프로그램에 대해 Microsoft Corporation으로부터 라이선스를 받은 경우 Microsoft에서는 두 부서에 모두 해당 데이터용으로 사용자 지정되는 응용 프로그램 버전을 제공합니다. 이때 같은 Authenticode 인증서를 사용하여 응용 프로그램에 서명하는 경우 ClickOnce가 두 번째 응용 프로그램을 첫 번째 응용 프로그램과 같은 것으로 인식하기 때문에 사용자가 두 응용 프로그램을 모두 사용하려고 하면 오류가 발생합니다. 이 경우 응용 프로그램이 로컬로 저장하는 데이터가 손실되는 등 고객에게 예기치 않은 결과가 발생할 수 있습니다.

코드 서명과 관련된 또 다른 문제는 ClickOnce에 응용 프로그램 업데이트를 찾을 위치를 알려 주는 deploymentProvider 배포 매니페스트의 요소입니다. 이 요소는 서명 전에 배포 매니페스트에 추가해야 합니다. 이 요소를 서명 후에 추가하는 경우에는 배포 매니페스트에 다시 서명해야 합니다.

고객이 배포 매니페스트에 서명하도록 지정

배포가 고유해지지 않는 이러한 문제를 해결하는 방법 중 하나는 개발자는 응용 프로그램 매니페스트에, 그리고 고객은 배포 매니페스트에 각각 서명하도록 하는 것입니다. 그러나 이 방법을 사용하면 위에서 설명한 문제는 해결되지만 또 다른 문제가 발생합니다. Authenticode 인증서는 보호되는 자산으로 보관해야 하므로 고객은 배포에 서명하도록 개발자에게 인증서를 제공할 수 없습니다. 고객이 .NET Framework SDK에서 무료로 제공되는 도구를 사용하여 직접 배포 매니페스트에 서명할 수는 있지만, 이렇게 하려면 상당한 기술적 지식이 필요할 수 있습니다. 대개 이러한 경우 개발자는 고객이 서명을 위해 응용 프로그램 버전을 제출할 수 있는 응용 프로그램, 웹 사이트 또는 기타 메커니즘을 만듭니다.

고객이 서명하는 경우 ClickOnce 응용 프로그램 보안에 미치는 영향

고객이 응용 프로그램 매니페스트에 서명하도록 개발자와 고객이 합의하더라도, 특히 신뢰할 수 있는 응용 프로그램 배포의 경우에는 응용 프로그램 ID와 관련된 다른 문제가 발생합니다. 이 기능에 대한 자세한 내용은 신뢰할 수 있는 응용 프로그램 배포 개요를 참조하십시오. Adventure Works에서 Microsoft Corporation으로부터 제공받은 응용 프로그램을 완전 신뢰 권한으로 실행할 수 있도록 해당 클라이언트 컴퓨터를 구성하려 하는 경우, Adventure Works가 배포 매니페스트에 서명을 하면 ClickOnce는 Adventure Works의 보안 서명을 사용하여 응용 프로그램의 신뢰 수준을 확인합니다.

신뢰를 위해 응용 프로그램 매니페스트를 사용하여 고객 배포 만들기

.NET Framework 3.5의 ClickOnce에는 개발자 및 고객이 매니페스트 서명 방법과 관련하여 발생하는 문제를 해결할 수 있는 새로운 방식을 제공하는 새 기능이 포함되어 있습니다. ClickOnce 응용 프로그램 매니페스트는 개발자가 신뢰 관련 결정을 내릴 때 응용 프로그램 매니페스트의 디지털 서명을 사용하도록 지정할 수 있는 <useManifestForTrust>라는 새로운 요소를 지원합니다. 개발자는 Mage.exe, MageUI.exe, Visual Studio 같은 ClickOnce 패키징 도구를 사용하여 이 요소를 응용 프로그램 매니페스트에 포함할 수 있을 뿐 아니라 게시자 이름 및 응용 프로그램 이름도 매니페스트에 포함할 수 있습니다.

<useManifestForTrust>를 사용하는 경우에는 인증 기관에서 발급한 Authenticode 인증서를 사용하여 배포 매니페스트에 서명할 필요가 없습니다. 대신 자체 서명 인증서를 사용하여 배포 매니페스트에 서명하면 됩니다. 자체 서명 인증서는 고객이나 개발자가 표준 .NET Framework SDK 도구를 사용하여 생성하며, 표준 ClickOnce 배포 도구를 사용하여 배포 매니페스트에 적용됩니다. 자세한 내용은 Makecert.exe(인증서 작성 도구)를 참조하십시오.

배포 매니페스트에 대해 자체 서명 인증서를 사용하면 다양한 이점이 있습니다. 즉, <useManifestForTrust>를 사용하면 고객이 자체 Authenticode 인증서를 가져오거나 만들 필요가 없으므로 고객의 배포 작업을 단순화할 수 있는 동시에 개발자가 응용 프로그램에 대해 고유한 브랜드 ID를 유지 관리할 수 있습니다. 그 결과 서명된 배포 집합의 보안이 향상되며 고유한 응용 프로그램 ID가 지정됩니다. 이를 통해 같은 응용 프로그램을 여러 고객에게 배포하는 경우 발생할 수 있는 충돌을 방지할 수 있습니다.

<useManifestForTrust>가 사용하도록 설정된 ClickOnce 배포를 만드는 방법에 대한 단계별 정보는 연습: 다시 서명할 필요가 없고 브랜드 정보가 유지되는 ClickOnce 응용 프로그램 수동 배포를 참조하십시오.

런타임에 신뢰를 위해 응용 프로그램 매니페스트를 사용하는 방식

런타임에 신뢰를 위해 응용 프로그램 매니페스트를 사용하는 방법을 보다 확실하게 이해하려면 다음 예제를 살펴보십시오. Microsoft에서 .NET Framework 3.5를 대상으로 하는 ClickOnce 응용 프로그램을 만듭니다. 응용 프로그램 매니페스트는 <useManifestForTrust> 요소를 사용하며 Microsoft에서 매니페스트에 서명을 합니다. Adventure Works가 자체 서명 인증서를 사용하여 배포 매니페스트에 서명합니다. Adventure Works 클라이언트는 Microsoft에서 서명한 응용 프로그램을 신뢰하도록 구성되어 있습니다.

사용자가 배포 매니페스트에 대한 링크를 클릭하면 ClickOnce가 사용자 컴퓨터에 응용 프로그램을 설치합니다. 인증서 및 배포 정보가 클라이언트 컴퓨터에서 ClickOnce에 대해 응용 프로그램을 고유하게 식별합니다. 사용자가 다른 위치에서 같은 프로그램을 다시 설치하려고 하면 ClickOnce에서는 이 ID를 사용하여 해당 응용 프로그램이 이미 클라이언트에 설치되어 있음을 확인할 수 있습니다.

다음으로 ClickOnce에서 응용 프로그램 매니페스트에 서명하는 데 사용되는 Authenticode 인증서를 검사합니다. 이 인증서는 ClickOnce에 부여할 신뢰 수준을 결정합니다. Adventure Works는 Microsoft에서 서명한 응용 프로그램을 신뢰하도록 해당 클라이언트를 구성했으므로 이 ClickOnce 응용 프로그램에는 완전 신뢰가 부여됩니다. 자세한 내용은 신뢰할 수 있는 응용 프로그램 배포 개요를 참조하십시오.

이전 버전을 위한 고객 배포 만들기

개발자가 이전 버전의 .NET Framework를 사용하는 고객에 대해 ClickOnce 응용 프로그램을 배포하는 경우가 있습니다. 다음 단원에서는 이러한 경우 사용할 수 있는 몇 가지 솔루션과 각 솔루션의 장단점에 대해 간단히 설명합니다.

고객을 대신하여 배포에 서명

사용 가능한 배포 전략 중 하나는 개발자가 고객의 개인 키를 사용하여 고객 대신 배포에 서명하도록 하는 메커니즘을 만드는 것입니다. 이렇게 하면 개발자가 개인 키 또는 여러 배포 패키지를 관리하지 않아도 됩니다. 즉, 개발자는 각 고객에 대해 동일한 배포를 제공하면 됩니다. 그리고 고객은 서명 서비스를 사용하여 환경에 맞게 배포를 사용자 지정하면 됩니다.

그러나 이 방법의 한 가지 단점은 구현에 시간과 비용이 많이 소요된다는 것입니다. .NET Framework SDK에서 제공되는 도구를 사용하면 이러한 서비스를 빌드할 수는 있지만, 이렇게 하면 제품 주기에 개발 시간이 더 추가됩니다.

또한 이 항목의 앞부분에서 설명한 것처럼 각 고객의 응용 프로그램 버전에 있는 응용 프로그램 ID가 같아지므로 충돌이 발생할 수 있습니다. 이것이 문제가 되는 경우 개발자는 배포 매니페스트를 생성할 때 사용하는 Name 필드를 변경하여 응용 프로그램에 고유한 이름을 지정할 수 있습니다. 이렇게 하면 각 응용 프로그램 버전에 대해 별도의 ID가 만들어지므로 ID가 충돌할 가능성이 없어집니다. 이 필드는 Mage.exe의 -Name 인수, 그리고 MageUI.exe의 이름 탭에 있는 이름 필드에 해당합니다.

예를 들어 개발자가 Application1이라는 응용 프로그램을 만든 경우 Name 필드가 Application1로 설정된 단일 배포를 만드는 대신 이 이름을 Application1-CustomerA, Application1-CustomerB 등과 같이 고객별로 변경하여 여러 배포를 만들 수 있습니다.

설치 패키지를 사용하여 배포

두 번째로 사용 가능한 배포 전략은 Microsoft 설치 프로젝트를 생성하여 ClickOnce 응용 프로그램의 초기 배포를 수행하는 것입니다. 이 배포 프로젝트는 MSI 배포, 설치 실행 파일(.EXE), 배치 스크립트가 포함된 캐비닛 파일(.cab) 등 다양한 형식 중 하나로 제공할 수 있습니다.

이 기술을 사용하는 경우 개발자는 고객에게 응용 프로그램 파일, 응용 프로그램 매니페스트 및 템플릿 역할을 하는 배포 매니페스트를 포함하는 배포를 제공하게 됩니다. 그러면 고객은 설치 프로그램을 실행하는데, 설치 프로그램에서는 배포 URL(사용자가 ClickOnce 응용 프로그램을 설치할 서버 또는 파일 공유 위치) 및 디지털 인증서를 요구하는 메시지가 표시됩니다. 설치 응용 프로그램에서는 업데이트 확인 간격 등의 추가 ClickOnce 구성 옵션을 선택하라는 메시지가 표시될 수도 있습니다. 이 정보를 수집하고 나면 설치 프로그램은 실제 배포 매니페스트를 생성하고 서명한 다음 ClickOnce 응용 프로그램을 지정된 서버 위치에 게시합니다.

이때 고객은 세 가지 방법으로 배포 매니페스트에 서명할 수 있습니다.

  1. 고객은 CA(인증 기관)에서 발급한 유효한 인증서를 사용할 수 있습니다.

  2. 이 방법을 변형한 방식으로, 고객이 자체 서명된 인증서로 배포 매니페스트에 서명할 수도 있습니다. 그러나 이렇게 하는 경우 사용자에게 응용 프로그램을 설치할 것인지를 묻는 메시지가 표시될 때 응용 프로그램에 "알 수 없는 게시자"가 표시된다는 단점이 있습니다. 그러나 이 방법을 사용하면 소규모 고객이 인증 기관에서 발급한 인증서를 얻는 데 시간과 비용을 들이지 않아도 된다는 장점이 있습니다.

  3. 마지막으로 개발자가 설치 패키지에 자체 서명 인증서를 포함하는 방법이 있습니다. 그러나 이렇게 하는 경우 이 항목 앞부분에서 설명한 응용 프로그램 ID 문제가 발생할 수 있습니다.

그리고 설치 배포 프로젝트 방식을 사용하는 경우에는 사용자 지정 배포 응용 프로그램을 빌드해야 하므로 시간과 비용이 소요됩니다.

고객이 배포 매니페스트를 생성하도록 함

세 번째로 사용 가능한 배포 전략은 고객에게 응용 프로그램 파일 및 응용 프로그램 매니페스트만 전달하는 것입니다. 이 경우 고객은 .NET Framework SDK를 사용하여 배포 매니페스트를 직접 생성하고 서명해야 합니다.

그러나 이 방법을 사용하는 경우 고객이 .NET Framework SDK 도구를 설치해야 하며, 이 도구에 능숙한 개발자나 시스템 관리자가 있어야 한다는 단점이 있습니다. 일부 고객은 직접 수행해야 하는 기술적 작업이 거의 또는 전혀 없는 솔루션을 요구할 수도 있습니다.

참고 항목

작업

연습: ClickOnce 응용 프로그램 수동 배포

연습: 다시 서명할 필요가 없고 브랜드 정보가 유지되는 ClickOnce 응용 프로그램 수동 배포

개념

다시 서명하지 않고 테스트 및 프로덕션 서버용 ClickOnce 응용 프로그램 배포