본문 바로가기

IT/Dot Net

[펌]Clickonce 인증서 만료시 해결책 - 기존 인증서 만료기간 수정

- renewcert 소스 참조 -
renewcert 소스에 만료기간을 5년만 더 연장하게 되어있음
MakeNewCert 메서드의
certExpireDate.wYear += 5; 부분을 수정해서 사용하자




출처 : http://www.ensimple.net/enSimple/show.aspx?cnum=289&b_id=study_smart&page=1
툴(RenewCert) : http://www.may.be/renewcert/
부가정보 : SelfCert 툴도 있음 

80% 부족한 ClickOnce 정보2 - ClickOnce Permission & Authenticode

80% 부족한 ClickOnce 정보이다. 즉 대부분의 내용은 언급되지 않는다. 단 창스가 궁금해 하는 내용만 담도록 한다.
MSDN에서 읽은 내용을 토대로, 그 중에서 주관적인 기준을 가지고 선별하여 옮겨 놓았음을 밝힌다.

MSDN : http://msdn2.microsoft.com/en-us/library/ms172240(VS.80).aspx

[2008-02-04 추가]

이미 만료된 인증서로 ClickOnce 업데이트를 게시하는 것은 문제가 있음. 새로운 인증서를 가지고 다시 업데이트를 작성하게 되면
"The deployment identity does not match the subscription. " 에러 발생함.

따라서 동일한 인증서를 가지고 만료기간만 증가시켜주어야 함. 아래에 솔루션이 존재함.

http://www.may.be/renewcert/


ClickOnce의 기본적인 사용권한은 첫 버전의(original version)의 어플리케이션이 배포되어진 위치를 기준으로 하고 있다.; 업데이트는 이 사용권한을 상속받게 된다.
ClickOnce 사용자가 설치 시 권한 경고 팝업을 보지 않도록 하려면, 시스템 관리자는 ClickOnce 배포 정책을 통해 특정 어플리케이션 게시자을 신뢰된 제공자 목록에 등록하게 하여(클라이언트 머신 상에서) 이를 방지할 수 있다.

어플리케이션의 사용권한은 어플리케이션 manifest의 <trustInfo> 요소에 의해 결정된다. Visual Studio는 프로젝트의 보안 속성 페이지를 통해 이 정보를 자동으로 생성해 준다.

AuthentiCode는 어플리케이션의 게시자(제공자)의 신원을 검증하기 위해 디지털 인증서를 통해 어플리케이션 코드를 서명하는 산업 표준의 암호화 방식을 사용하는 마이크로소프트의 기술이다.
코드 사이닝을 위한 인증서는 아래의 세가지 방법 중 하나를 통해 얻을 수 있다.

□ 인증서 벤더를 통해 구매
□ 디지털 인증서 발행을 책임 전담하는 조직의 기관을 통해 수령.
□ MakeCert.exe를 통해 자신만의 인증서를 생성, 이 툴은 .NET Framework SDK에 포함됨.


MakeCert를 통해 생성된 인증서는 일반적으로 "self-cert" 또는 "test cert", 즉 테스트 인증서라고 불린다. 이러한 종류의 인증서는 .NET Framework 상의 .snk 파일과 매우 유사한 방식으로 작동한다. : 이는 독립적으로 public/private 암호화 키 쌍을 포함하고, 제공자에 대한 어떠한 검증 데이터도 포함하지 않는다.
우리는 인트라넷과 같은 높은 신뢰를 가진 환경에서 테스트 인증서를 사용할 수 있다.; 하지만, 이러한 어플리케이션이 클라이언트 컴퓨터 상에서 구동될 때, ClickOnce는 "Unknown Pulisher"로 부터 제공된 어플리케이션 임을 표시하게 된다. 기본적으로 테스트 인증서로 서명되고 인터넷을 통해 배포된 ClickOnce 어플리케이션은 신로된 어플리케이션 배포(Trusted Application Deployment)을 이용할 수 없다.

대조적으로, 인증서 벤더 또는 기업 내 특정 부서- CA 를 통해 인증서를 발급받았다면, 그 인증서는 사용자에 보다 강력한 보안을 제공한다. 이는 제공자를 식별할 뿐 아니라 인증서를 서명한 CA의 신원을 확인하는 검증단계를 거치게 된다.
만일 CA가 루트 CA가 아니라면, AuthentiCode 는 Root CA까지 인증서를 발급한 CA를 검증하기 위해 확인하는 절차를 거치게 된다.
보다 강력한 보안을 위해 가능하다면, CA로 부터 발급된 인증서를 사용하도록 한다.

■ 테스트 인증서와 그 만료기간

인증서가 유효한(만료되지 않은 시점에) 배포(manifest)가 한 번 서명되었다면, 인증서가 이후에 만료되더라도 ClickOnce를 통한 어플리케이션 설치와 실행은 정상적으로 이루어진다.
(self-cert/test-cert 를 사용해 배포를 서명했더라도, 이후 설치와 실행은 해당 인증서 만료기간에 상관없이 유효함.)


인증서 저장
인증서는 파일 시스템 내에 .pfx 파일로 저장할 수 있다. 또는 키 컨테이너 내에 저장할 수 도 있다. 도메인 상의 사용자는 여러 개의 키 컨테이너를 가진다. 기본적으로 MakeCert.exe 는 우리가 따로 pfx로 저장하도록 명시하지 않는 이상, 인증서를 개인적인(personal) 키 컨테이너에 저장할 것이다.
.NET Framework SDK 에 포함된 Mage.exe와 MageUI.exe는 ClickOnce 배포를 생성하기 위한 툴이며 파일(pfx) 또는 키 컨테이너에 저장된 인증서를 사용할 수 있게 지원한다.

신뢰된 어플리케이션 배포를 할 때, 조직은 Authenticode 인증서에 명시된 제공자가 클라이언트 컴퓨터의 신뢰된 제공자 목록으로 등록되도록 구성할 수 있다.
이후부터 해당 신뢰된 제공자에 의해 사인된 모든 ClickOnce 어플리케이션은 클라이언트 컴퓨터 상에서 높은 레벨의 신뢰를 부여받게 된다.

■ 권한 상승(Permission Elevation)


신뢰된 어플리케이션 배포는 사용자 컴퓨터에 대한 한번의 구성을 요구한다. AD에 의해 관리되는 데스크탑 환경인 경우, 이 구성은 Global Policy(그룹정책)을 이용해 수행될 수 있다. 만일 그렇지 않은 환경이라면, 권한 상승(permission elevation)을 대신 사용해야 한다.

만일 현재의 제공자가 신뢰된 제공자로 등록되지 않은 경우(클라이언트 머신 상에서), Trust Manager(보안을 관리하는 하나의 시스템)는 구동할 어플리케이션에게 상승된 권한을 허락할 것인지를 사용자에게 물어보는 권한 상승(Permission Elevation) 과정을 거치게 된다.
만일 권한 상승이관리자에 의해 비활성화 되면, 어플리케이션은 구동할 권한을 얻을 수 없다. 그래서 어플리케이션은 그저 작동하지 않을 것이며, 이 사실에 대한 어떠한 통지(notification)나 알림도 사용자에게 전달(표시)되지 않을 것이다.





권한 상승 과정을 수용할 수 없는 환경이라면, 아래의 명령을 클라이언트 상에서 먼저 수행케 하도록 하는 것을 검토할 수 도 있다.
작업 셋업 프로그램을 만들어서 웹으로 배포하든지, SMS(System Management Service)와 같은 인프라가 존재한다면, 자동 배포할 수도 있을 것이다.
아래는 클라이언트 컴퓨터 상에서 신뢰된 (인증서) 제공자(Truest Publisher)로 good.cer라는 파일에 명시된 제공자를 등록시키는 명령이다.
Good.cer는 makecert를 통해 생성할 수 있으며, 배포하고자 하는 어플리케이션의 인증서 제공자 정보가 포함되면 될 것이다.

certmgr.exe -add good.cer -c -s -r localMachine Root
ertmgr.exe -add good.cer -c -s -r localMachine TrustedPublisher