2017-09-20 28 views
6

自己署名証明書を使用して.ps1に署名しようとしています。実際のCAを で使用するか、またはその代金を支払う必要があります)。しかし、私が読んだ証明書生成とデジタル署名の話題について、どれだけのガイドがあっても、私はそれを働かせることはできません。自己署名証明書を使用してPowerShellスクリプトに署名する(とmakecert.exeを使用しない)

# Create a certificate to use as trusted root of the signing chain 
$root = New-SelfSignedCertificate ` 
    -Subject "CN=PowerShell Trusted Authority" ` 
    -FriendlyName "PowerShell Trusted Authority" ` 
    -KeyUsageProperty Sign ` 
    -KeyUsage CertSign, CRLSign, DigitalSignature ` 
    -CertStoreLocation Cert:\LocalMachine\My\ ` 
    -NotAfter (Get-Date).AddYears(10) 

# Create a certificate to use for signing powershell scripts 
New-SelfSignedCertificate ` 
    -Signer $root ` 
    -Subject "CN=PowerShell Code Signing" ` 
    -KeyAlgorithm RSA ` 
    -KeyLength 2048 ` 
    -Type CodeSigningCert ` 
    -CertStoreLocation Cert:\LocalMachine\My\ 

# Move the root cert into Trusted Root CAs 
Move-Item "Cert:\LocalMachine\My\$($root.Thumbprint)" Cert:\LocalMachine\Root 

行政PowerShellのインスタンスから行う上記のすべてを:ここで

は、私がこれまでに達成したものです。それが完了すると、管理コンソールの両方の証明書が予定された場所に表示され、署名証明書の証明書パスが有効なものとしてチェックアウトされます。

私はその後、通常のPSプロンプトを開き、スクリプトに署名しようとすると:あなたが見ることができるように

# Obtain a reference to the signing certificate 
PS> $cert = Get-ChildItem Cert:\LocalMachine\My\ -CodeSigningCert 

# Attempt at signing 
PS> Set-AuthenticodeSignature .\Microsoft.PowerShell_profile.ps1 $cert 


    Directory: C:\Users\tomas\Documents\WindowsPowerShell 


SignerCertificate   Status    Path 
-----------------   ------    ---- 
          UnknownError   Microsoft.PowerShell_profile.ps1 

を、実際の署名は失敗します。 PowerShellファイルを見ると、スクリプトに署名が追加されていないことがわかります。

私が管理者のプロンプトから署名すると、もう少し手間がかかります。署名ブロックがスクリプトに追加され、Set-AuthenticodeSignatureの出力に署名証明書の拇印が印刷されますが、ステータスはまだUnknownErrorであり、AllSignedポリシーでの実行は依然として許可されていません。

# Output some info about the certificate: 
PS> $cert | Format-List 

Subject  : CN=PowerShell Code Signing 
Issuer  : CN=PowerShell Trusted Authority 
Thumbprint : <omitted> 
FriendlyName : 
NotBefore : 9/20/2017 10:48:59 PM 
NotAfter  : 9/20/2018 11:08:59 PM 
Extensions : {System.Security.Cryptography.Oid, System.Security.Cryptography.Oid, 
       System.Security.Cryptography.Oid, System.Security.Cryptography.Oid} 

私はいつも同じ状態メッセージ(UnknownError)と、特にコード署名の証明書を生成するために、New-SelfSignedCertificate呪文の変異体の多くを試みました。

私の究極の目標は、Set-ExecutionPolicy AllSignedを持つことができ、自分自身で作成したスクリプトを実行できることです。私はこのプロセスで何が欠けているのですか?

+0

興味深い。エラーの詳細は何ですか? –

+0

@Bill_Stewart:残念ながら、いいえ。 '$ Error'変数はこの失敗の後では空白です。なぜなら、なぜ失敗するのかを示すどこの出力も得られません。どのトラブルシューティングの提案も大歓迎です:) –

+0

その出力にはどのようなタイプの 'Status'プロパティがありますか? –

答えて

1

これについて考えると、証明書チェーンの信頼は必要ないため、最初の証明書は必要ありません。 2番目の証明書を使用して信頼できるルートフォルダに移動すると、それが動作します。最初の証明書を使用して別の証明書を作成すると、「root」が自己署名してから別の証明書に署名できないため、失敗したようです。

自己署名証明書方式

# Create a certificate to use for signing powershell scripts 
$selfsigncert = New-SelfSignedCertificate ` 
       -Subject "CN=PowerShell Code Signing" ` 
       -KeyAlgorithm RSA ` 
       -KeyLength 2048 ` 
       -Type CodeSigningCert ` 
       -CertStoreLocation Cert:\LocalMachine\My\ 

# Move the root cert into Trusted Root CAs 
Move-Item "Cert:\LocalMachine\My\$($selfsigncert.Thumbprint)" Cert:\LocalMachine\Root 

# Obtain a reference to the code signing cert in Trusted Root 
$selfsignrootcert = "Cert:\LocalMachine\Root\$($selfsigncert.Thumbprint)" 

# Sign script 
Set-AuthenticodeSignature C:\powershell.ps1 $selfsignrootcert 

あなたはエンタープライズのルートCAへのアクセス権を持っている場合、あなたは、あなたの質問に使用されている方法を使用することができます。

エンタープライズのルートCA方式(あなたがあなたの質問を持っているのと同じ方法) - あなたのルートCA証明書の拇印

# Get Enterprise Root CA thumbprint 
$rootcert = get-childitem Cert:\LocalMachine\Root\XXXXXXXXXXXX 


# Generate certificate 
$fromrootcert = New-SelfSignedCertificate ` 
       -Signer $rootcert ` 
       -Subject "CN=PowerShell Code Signing" ` 
       -KeyAlgorithm RSA ` 
       -KeyLength 2048 ` 
       -Type CodeSigningCert ` 
       -CertStoreLocation Cert:\LocalMachine\My\ 

# Sign script 
Set-AuthenticodeSignature C:\powershell.ps1 $fromrootcert 

おかげで、ティムを知っている必要があります。

+0

こんにちはティム - これは古いものだと分かっていますが、私はあなたの指示に従っています。エラーが出ています。 'エラー:"指定されたパスのフォーマットはサポートされていません。 "'私は証明書を再作成し、あなたの指示に従いましたが、困っています。何か案は? –

+0

こんにちはロス、あなたは自己署名またはエンタープライズルートCAの方法を使用していますか?どのコマンドレットでエラーが発生していますか?ありがとう、ティム。 –

+0

@RossLyonsは、私があなたにタグをつけなかったので、あなたが応答を得ているかどうか確信していません。ごめんなさい。 –

関連する問題