2012-09-17 11 views
5
I가 자체 서명 IIS에 사용되는 인증서를 만들려면 여기를 발견 유사한 코드를 사용하고

: 나는 그것에게 친숙한 이름을주고 싶지 제외 http://blogs.technet.com/b/vishalagarwal/archive/2009/08/22/generating-a-certificate-self-signed-using-powershell-and-certenroll-interfaces.aspx자체 서명 된 인증서

작품의 벌금을 동적으로 생성 된 사이트에 인증서를 할당하고자 할 때 쉽게 찾을 수 있습니다.

누구나 친숙한 이름을 설정하기 위해 위의 내용을 변경하는 방법을 알고 있습니다.

사용자에게 정보를 묻지 않는 PowerShell을 통해 인증서를 만드는 더 좋은 방법이 있습니까?

내가 사용하고 스크립트에 대한 후속 조사는 - 위의 URL을 기반으로하지만 cmdlet에로 전환 : 스콧 Hanselman은이 SDK 도구 Makecert.exe를를 사용하여 좋은 blog post on how to create a self-signed cert을 쓴

function Add-SelfSignedCertificate 
{ 
    [CmdletBinding()] 
    param 
    (
      [Parameter(Mandatory=$True, ValueFromPipelineByPropertyName=$True)] 
      [Alias('cn')] 
      [string]$CommonName 
    ) 

    $name = new-object -com "X509Enrollment.CX500DistinguishedName.1" 
    $name.Encode("CN=$CommonName", 0) 

    $key = new-object -com "X509Enrollment.CX509PrivateKey.1" 
    $key.ProviderName = "Microsoft RSA SChannel Cryptographic Provider" 
    $key.KeySpec = 1 
    $key.Length = 1024 
    $key.SecurityDescriptor = "D:PAI(A;;0xd01f01ff;;;SY)(A;;0xd01f01ff;;;BA)(A;;0x80120089;;;NS)" 
    $key.MachineContext = 1 
    $key.Create() 

    $serverauthoid = new-object -com "X509Enrollment.CObjectId.1" 
    $serverauthoid.InitializeFromValue("1.3.6.1.5.5.7.3.1") 
    $ekuoids = new-object -com "X509Enrollment.CObjectIds.1" 
    $ekuoids.add($serverauthoid) 
    $ekuext = new-object -com "X509Enrollment.CX509ExtensionEnhancedKeyUsage.1" 
    $ekuext.InitializeEncode($ekuoids) 

    $cert = new-object -com "X509Enrollment.CX509CertificateRequestCertificate.1" 
    $cert.InitializeFromPrivateKey(2, $key, "") 
    $cert.Subject = $name 
    $cert.Issuer = $cert.Subject 
    $cert.NotBefore = get-date 
    $cert.NotAfter = $cert.NotBefore.AddDays(90) 
    $cert.X509Extensions.Add($ekuext) 
    $cert.Encode() 

    $enrollment = new-object -com "X509Enrollment.CX509Enrollment.1" 
    $enrollment.InitializeFromRequest($cert) 
    $certdata = $enrollment.CreateRequest(0) 
    $enrollment.InstallResponse(2, $certdata, 0, "") 
} 

답변

0

. 이 도구는 참조하는 게시물의 코드보다 사용하기 쉬운 좋은 방법입니다. makecert.exe를 사용하면 -n 옵션을 사용하여 주체 이름을 지정할 수 있습니다. 그 주제 이름을 사용하여 signtool.exe와 같은 다른 도구의 인증서를 참조했습니다. 비록 주제 이름이 고유 할 필요는 없기 때문에 고유 한 것으로 보이는 지문 값을 사용하는 경향이 있습니다. 또한 Signtool은/sha1 매개 변수를 통해 지문을 사용하여 인증서를 식별합니다.

+0

이것은 InstallShield 스크립트에 포함될 예정이므로 makecert.exe 팝업 대화 상자에 문제가있는 것으로 나타납니다. – roderickprince

+0

selfssl.exe가 작동합니까? http://www.robbagby.com/iis/self-signed-certificates-on-iis-7-the-easy-way-and-the-most-effective-way/ –

3

당신은 당신의 코드에서 직접 CertificateFriendlyName을 설정할 수 있습니다, 당신은 단지 그것을 할 위치를 알고 있어야합니다

$enrollment.InitializeFromRequest($cert) 
$enrollment.CertificateFriendlyName = 'whatever' 
$certdata = $enrollment.CreateRequest(0) 

$key이의 FriendlyName을 가지고 있지만 내가 보여주는 어디서든 내가하지 않는 것이 표시되지 않습니다 그것이 당신을 돕는다고 생각하십시오.

+0

누군가가 완전히 작동하는지보고 싶다면 예를 들어 http://aka.ms/AD2AAD의 스크립트에서이 작업을 수행하는 PowerShell 코드가 있습니다. –

11
그것은 특정 사용을 위해 도움이되지 않을 수도 있습니다

하지만, 사용하기 매우 쉽고 빠르게 윈도우 8.1과 서버 2012에 설치된 새로운 파워 쉘 cmdlet에있다 :

New-SelfSignedCertificate [-CertStoreLocation <String> ] [-CloneCert <Certificate> ] [-DnsName <String> ] [-Confirm] [-WhatIf] [ <CommonParameters>] 

자세한 내용은 여기에서 찾을 수 있습니다은 : http://technet.microsoft.com/en-us/library/hh848633.aspx

제게는 CmdLet에 지정된 첫 번째 DnsName으로 친숙한 이름의 cert가 항상 설정되어 있습니다. 로컬 컴퓨터의 개인 저장소에서 인증서를 배치

예 :

New-SelfSignedCertificate -CertStoreLocation cert:\LocalMachine\My -DnsName www.example.com 

참고 : 파워 쉘이 작동하지 관리자 권한으로 시작해야합니다.

+0

이건'cert : \ LocalMachine \ My'가 아니어야합니까? 내 Windows 10 및 2012 서버 컴퓨터에서 확인 ... 아무도'인증서 : \ LocalComputer' 없습니다. – Lucas

관련 문제