2012-09-17 32 views
5

を作成するためのPowerShellを使用した:私はそれをフレンドリ名を与えたい除い http://blogs.technet.com/b/vishalagarwal/archive/2009/08/22/generating-a-certificate-self-signed-using-powershell-and-certenroll-interfaces.aspx私はIISで使用する自己署名証明書を作成するためにここに見られるのと同様のコードを使用しています自己署名証明書

は細かい作品動的に作成されたサイトに証明書を割り当てたい場合には、その場所を簡単に見つけることができます。

誰もがフレンドリーな名前を設定するために上記を変更する方法を知っています(私は役に立たないと思われたものを試しました)。

ユーザーに情報を要求しないPowerShell経由で証明書を作成するより良い方法がありますか?私が使っているスクリプトの

フォロー - 上記URLに基​​づいていますが、コマンドレットになっ:

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

スコットHanselman氏は、SDKツールmakecert.exeを使って素敵なblog post on how to create a self-signed certを書きました。このツールは、あなたが参照している投稿のコードよりも、簡単に使うことができます。 makecert.exeを使用すると、-nオプションを使用してサブジェクト名を指定できます。私はそのサブジェクト名を使ってsigntool.exeのような他のツールの証明書を参照しています。しかし、私はサブジェクト名がユニークである必要はないので、私は一意であると思われるThumbprint値を使用する傾向があることを発見しました。また、Signtoolは証明書を識別するために(/ sha1パラメータを介して)拇印を受け取ります。

+0

これはInstallShieldスクリプトに含まれるため、makecert.exeのポップアップダイアログに問題があります。 – roderickprince

+0

selfssl.exeは動作しますか? http://www.robbagby.com/iis/self-signed-certificates-on-iis-7-theee-way-and-the-most-effective-way/ –

3

あなたはあなたのコード内で直接CertificateFriendlyNameを設定することができ、あなただけのどこにそれを行うために知っておく必要があります。

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

$keyがフレンドリを持っていますが、私はどこにも表示するので、私がいないことを確認していませんそれがあなたを助けると思う。

+0

もし誰かが完全に働くのを見たいならたとえば、http://aka.ms/AD2AADのスクリプトでこれを行うPowerShellコードがあります。 –

11

それはあなたの特定の使用のために役に立たないかもしれないが、かなり迅速かつ使いやすいのWindows 8.1およびServer 2012の中に設置し、新たなPowerShellのコマンドレットがあります:

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

詳細はここで見つけることができます: http://technet.microsoft.com/en-us/library/hh848633.aspx

私の用法では、CmdLetで指定された最初のDnsNameとして、証明書のフレンドリ名が常に設定されています。ローカルコンピュータの個人ストアに証明書を配置

例:

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

注:PowerShellには、これが機能するためには管理者権限で起動する必要があります。

+0

それは 'cert:\ LocalMachine \ My'ではないでしょうか?私は私のWindows 10および2012サーバマシンをチェックしました...誰も 'cert:\ LocalComputer'を持っていません。 – Lucas

関連する問題