it-swarm-ko.tech

Windows에서 코드 서명을 위해 자체 서명 된 인증서를 작성하는 방법

Windows SDK의 도구를 사용하여 코드 서명을위한 자체 서명 인증서를 작성하는 방법

204
Roger Lipscombe

업데이트 된 답변

Windows Server 2012, Windows Server 2012 R2 또는 Windows 8.1과 같은 Windows 버전 이상을 사용하는 경우 MakeCert는 더 이상 사용되지 않음 이며 Microsoft는 PowerShell Cmdlet New-SelfSignedCertificate .

Windows 7과 같은 이전 버전을 사용하는 경우 MakeCert 또는 다른 솔루션을 사용해야합니다. 일부 사람들 추천PSPKI (Public Key Infrastructure Powershell) 모듈 .

원래 답변

한 번에 자체 서명 된 코드 서명 인증서 (SPC- Software Publisher Certificate )를 만들 수 있지만 다음을 수행하는 것이 좋습니다.

자체 서명 인증 기관 (CA) 작성

makecert -r -pe -n "CN=My CA" -ss CA -sr CurrentUser ^
         -a sha256 -cy authority -sky signature -sv MyCA.pvk MyCA.cer

(^ = 배치 명령 줄을 줄 바꿈 허용)

내보낼 수있는 개인 키 (-pe)와 함께 자체 서명 된 (-r) 인증서를 만듭니다. 이름은 "My CA"이며 현재 사용자의 CA 저장소에 있어야합니다. 우리는 SHA-256 알고리즘을 사용하고 있습니다. 키는 서명 (-sky)을위한 것입니다.

개인 키는 MyCA.pvk 파일에 저장되고 인증서는 MyCA.cer 파일에 저장해야합니다.

CA 인증서 가져 오기

신뢰하지 않으면 CA 인증서를 가질 필요가 없으므로 Windows 인증서 저장소로 가져와야합니다. 인증서 MMC 스냅인을 can 사용할 수 있지만 명령 행에서

certutil -user -addstore Root MyCA.cer

코드 서명 인증서 (SPC) 생성

makecert -pe -n "CN=My SPC" -a sha256 -cy end ^
         -sky signature ^
         -ic MyCA.cer -iv MyCA.pvk ^
         -sv MySPC.pvk MySPC.cer

위와 거의 동일하지만 발급자 키와 인증서 (-ic 및 -iv 스위치)를 제공하고 있습니다.

또한 인증서와 키를 PFX 파일로 변환하려고합니다.

pvk2pfx -pvk MySPC.pvk -spc MySPC.cer -pfx MySPC.pfx

PFX 파일을 보호하려면 -po 스위치를 추가하십시오. 그렇지 않으면 PVK2PFX는 암호없이 PFX 파일을 작성합니다.

서명 코드에 인증서 사용

signtool sign /v /f MySPC.pfx ^
              /t http://timestamp.url MyExecutable.exe

( 타임 스탬프가 중요한 이유보기 )

PFX 파일을 인증서 저장소로 가져 오는 경우 (PKIKIMPRT 또는 MMC 스냅인을 사용할 수 있음) 다음과 같이 코드에 서명 할 수 있습니다.

signtool sign /v /n "Me" /s SPC ^
              /t http://timestamp.url MyExecutable.exe

signtool /t에 사용할 수있는 타임 스탬프 URL은 다음과 같습니다.

  • http://timestamp.verisign.com/scripts/timstamp.dll
  • http://timestamp.globalsign.com/scripts/timstamp.dll
  • http://timestamp.comodoca.com/authenticode

전체 Microsoft 설명서

다운로드

.NET 개발자가 아닌 경우 Windows SDK 및 .NET 프레임 워크의 사본이 필요합니다. 현재 링크는 여기에 있습니다 : SDK & .NET (C:\Program Files\Microsoft SDKs\Windows\v7.1에 makecert를 설치합니다). 귀하의 마일리지가 다를 수 있습니다.

MakeCert는 Visual Studio 명령 프롬프트에서 사용할 수 있습니다. Visual Studio 2015에는 Windows 7의 시작 메뉴에서 "VS 2015 용 개발자 명령 프롬프트"또는 "VS2015 x64 기본 도구 명령 프롬프트"(아마도 모두 동일한 폴더에 있음)에서 시작할 수 있습니다.

344
Roger Lipscombe

로저의 대답은 매우 도움이되었습니다.

그래도 사용하는 데 약간의 어려움이 있었고 "Windows에서이 드라이버 소프트웨어의 게시자를 확인할 수 없습니다"오류 대화 상자가 계속 나타납니다. 열쇠는 테스트 루트 인증서를 설치하는 것이 었습니다.

certutil -addstore Root Demo_CA.cer

로저의 대답은 그다지 다루지 않았습니다.

다음은 나를 위해 일한 배치 파일입니다 (포함되지 않은 .inf 파일). GUI 도구를 전혀 사용하지 않고 처음부터 끝까지 모든 작업을 수행하는 방법을 보여줍니다 (몇 가지 암호 프롬프트 제외).

REM Demo of signing a printer driver with a self-signed test certificate.
REM Run as administrator (else devcon won't be able to try installing the driver)
REM Use a single 'x' as the password for all certificates for simplicity.

PATH %PATH%;"c:\Program Files\Microsoft SDKs\Windows\v7.1\Bin";"c:\Program Files\Microsoft SDKs\Windows\v7.0\Bin";c:\WinDDK\7600.16385.1\bin\selfsign;c:\WinDDK\7600.16385.1\Tools\devcon\AMD64

makecert -r -pe -n "CN=Demo_CA" -ss CA -sr CurrentUser ^
   -a sha256 -cy authority -sky signature ^
   -sv Demo_CA.pvk Demo_CA.cer

makecert -pe -n "CN=Demo_SPC" -a sha256 -cy end ^
   -sky signature ^
   -ic Demo_CA.cer -iv Demo_CA.pvk ^
   -sv Demo_SPC.pvk Demo_SPC.cer

pvk2pfx -pvk Demo_SPC.pvk -spc Demo_SPC.cer ^
   -pfx Demo_SPC.pfx ^
   -po x

inf2cat /drv:driver /os:XP_X86,Vista_X64,Vista_X86,7_X64,7_X86 /v

signtool sign /d "description" /du "www.yoyodyne.com" ^
   /f Demo_SPC.pfx ^
   /p x ^
   /v driver\demoprinter.cat

certutil -addstore Root Demo_CA.cer

rem Needs administrator. If this command works, the driver is properly signed.
devcon install driver\demoprinter.inf LPTENUM\Yoyodyne_IndustriesDemoPrinter_F84F

rem Now uninstall the test driver and certificate.
devcon remove driver\demoprinter.inf LPTENUM\Yoyodyne_IndustriesDemoPrinter_F84F

certutil -delstore Root Demo_CA
19
Dan Kegel

답변에서 언급했듯이 더 이상 사용되지 않는 방법으로 자신의 스크립트에 서명하려면 New-SelfSignedCertificate 를 사용해야합니다.

  1. 키를 생성하십시오.
    New-SelfSignedCertificate -DnsName [email protected] -Type CodeSigning -CertStoreLocation cert:\CurrentUser\My

  2. 개인 키없이 인증서를 내 보냅니다.
    Export-Certificate -Cert (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)[0] -FilePath code_signing.crt [0]은 (는) 둘 이상의 인증서가있는 경우에이 작업을 수행합니다. 인덱스를 사용하려는 인증서와 일치하게 만들거나 ... 발급자).

  3. 신뢰할 수있는 게시자로 가져 오기
    Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\TrustedPublisher

  4. 루트 인증 기관으로 가져 오십시오.
    Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\Root

  5. 스크립트에 서명하십시오.
    Set-AuthenticodeSignature .\script.ps1 -Certificate (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)

분명히 키를 설정 한 후에는 다른 스크립트로 서명 할 수 있습니다.
이 기사 에서 자세한 정보와 문제 해결 도움말을 얻을 수 있습니다.

14
chaami

PowerShell 4.0 (Windows 8.1/ Server 2012 R2)부터 makecert.exe 없이 Windows에서 인증서를 만들 수 있습니다.

필요한 명령은 New-SelfSignedCertificateExport-PfxCertificate 입니다.

지침은 PowerShell을 사용하여 자체 서명 된 인증서 생성에 있습니다.

12
Yishai

Powershell에서 New-SelfSignedCertificate 명령을 사용하면 상당히 쉽습니다. powershell을 열고이 3 가지 명령을 실행하십시오.

1) 인증서 생성 :
$ cert = New-SelfSignedCertificate -DnsName www.yourwebsite.com-유형 코드 서명 -CertStoreLocation 인증서 :\CurrentUser\My

2) 비밀번호를 설정하십시오 :
$ CertPassword = ConvertTo-SecureString-문자열 "my_passowrd"-Force –AsPlainText

3) 내보내기 :
Export-PfxCertificate-인증서 "cert :\CurrentUser\My\$ ($ cert.Thumbprint)"-FilePath "d :\selfsigncert.pfx"-암호 $ CertPassword

인증서 selfsigncert.pfx 는 @ D:/에 있습니다.


선택 단계 : 또한 시스템 환경 변수에 인증서 비밀번호를 추가해야합니다. cmd에 아래를 입력하면됩니다 : setx CSC_KEY_PASSWORD "my_password"

12
JerryGoyal