web-dev-qa-db-ja.com

Visual Studio 2019、2017、2015を使用して、Windows 10 UWPアプリケーション用に動作する信頼できる証明書または自己署名証明書を作成する方法

このドキュメントごとに:

https://docs.Microsoft.com/en-us/windows-hardware/drivers/devtest/makecert

次のコマンドは、Windows cerファイル(つまり、信頼できるプロバイダーからの証明書)の作成について説明しています

これに関する問題は、Visual Studio 2017でアプリケーションを構築するときに、package.windows10.appxmanifestを介してのみ、pfxファイルを許可することです。このコマンドラインリファレンスを更新するとき、pvkファイルを生成しないため、追加する必要があります

MakeCert -r -pe -ss PrivateCertStore -n "CN=Contoso.com(Test)" testcert.cer

結果のpvkファイルを生成する/ sv SubjectKeyFileなどの追加のコマンドラインオプション。

ただし、このコマンドラインリファレンスを使用しても:

MakeCert -r -pe -ss PrivateCertStore -n "CN=Contoso.com(Test)" -sv testcert.pvk testcert.cer

結果として、Visual Studioに証明書ファイルを埋め込むと、次のエラーが生成されます。

マニフェストデザイナーは証明書をインポートできませんでした。

選択した証明書は有効期限が切れているか、別の問題があるため、署名に有効ではありません。詳細については、 http://go.Microsoft.com/fwlink/?LinkID=241478 を参照してください

私はリンクに行き、何が起こっているのかを本当に説明するものは何もありません。ある人はコメントして、機能する一時的なものを作成しますが、それは1年しか続かない非特定のテスト証明書です。

Makecertでスクリプトを作成するより良い方法はありますか?証明書が最終的に正しくビルドされているかどうかを知るにはどうすればよいですか?追加のドキュメントが役立つと思いますが、私は他に何も見つけていません。

14

@nicoが提供する答えには正しい記述がありますが、最初に説明した以上の問題があることに気づきました。そこで、より良い質問とそれに続く回答を提供するために、質問のタイトルと質問を整理しました。

Webをスカウリングすることで、これらの回答の多くを非常に多くの異なる場所、すなわち質問、コメントの回答、youtubeなどで見つけました。誰もがリソースを得て学習できるように、ここですべてをニースのニートの場所に置くことにしました。

最初に、アプリケーションを何のために使用しているのかを自問する必要がありますか?アプリケーションをMicrosoft Storeにアップロードするのか、それとも内部でのみ使用するのか。

いずれにせよ、アプリケーションのデバッグと開発を行います。デバッグでは証明書をインストールする必要がないため、その意味で安全です。

組織の内部でアプリケーションを使用している場合、または単にローカルマシンでアプリケーションを使用している場合は、信頼できる証明書が必要になります。

この証明書は、いくつかの異なるシナリオで存在できます。

  1. 自己署名証明書が必要ですか?
  2. CAの認証局、つまり企業または組織から発行された証明書が必要ですか?

両方のシナリオを検討します。どちらの場合でも、makecertプロトコルは非推奨です makecert deprecation notes

シナリオ1:自己署名証明書が必要な場合は、この方法で進めます

  1. Powershellに移動し、New-SelfSignedCertificate pkiclientコマンドレットを使用します...これにより、.cerと対応する秘密キー+公開証明書の組み合わせ= .pfxの作成が提供されます。また、アプリケーションをVisual Studioにバンドルしてパッケージ化し、ローカルのWindowsアプリケーションストアにインストールするためには、プライベートキー(.pfx)が必要です(Microsoftストアと混同しないでください)。

以下のリンクをご覧ください***証明書を作成する前に、必ず1Aをお読みください。

証明書パッケージ署名の作成
New-SelfSignedCertificate

1A。 *** New-SelfSignedCertificateを作成する場合、非常に具体的な方法で証明書を作成する必要があることを理解する必要があります。これは、自己署名証明書またはCAが発行した証明書用です。

具体的には、証明書は2つのプロパティを提示する必要があります

a)。 Subject Type = End Entityに設定されたBasic Constraints拡張が必要です。これは簡単な言葉で言っていることです...この証明書が発行されると、証明書をさらに証明書を発行することができる後続の認証局にすることはできません。言い換えれば...これは行末証明書です。

制約の詳細については、こちらをご覧ください: https://blogs.technet.Microsoft.com/pki/2014/03/05/constraints-what-they-are-and-how-theyre-used/ =

b)。拡張キー使用法(EKU)拡張の値は、コード署名に設定されます。これにより、証明書が本来の目的以外に使用されるのを防ぐことができます。これにより、ソフトウェアがソフトウェア発行元から提供され、ソフトウェアが発行後の変更から保護されます。
証明書の詳細では、情報は次のようになります。

コード署名(1.3.6..1.5.5.7.3.3)<<<<これは拡張キー使用法ですOID 1.3.6 ...番号にコード署名する場合

この情報は、非常にランダムに見つかり、特定の順序のフロードキュメントではありません。

Windowsストアアプリの証明書の生成

1B。そのため、最後にpowershell経由でNew-SelfSignedCertifcateコマンドレットを使用するには、次のようなコマンドを実行します。

New-SelfSignedCertificate -Type CodeSigningCert -Subject "CN=YourCompany CA, 0=Your Corporation, C=US" -TextExtension @("2.5.29.19={text}false") -KeyUsage DigitalSignature -KeyLength 2048 -NotAfter (Get-Date).AddMonths(33) -FriendlyName friendlyName2

上記のコマンドは、コード署名証明書の両方の基準を満たしています(-typeプロパティを使用する代わりに、対応するコード署名タイプ、つまりCode Signing oid = 1.3.6.1.5.5.7.3のKey Usage Extention oidを選択することもできます) 3)

PowerShellで上記のコマンドを実行すると、エクスポートできる2つのものが作成されます...

A.)公開証明書B.).pfxファイル形式に含まれる秘密キー+公開証明書。

.pfxをエクスポートできるようになったので、これでパスワードを作成し、秘密キー+ certifcate .pfxファイルをエクスポートできます。

  1. コマンドを使用して、powershell Export-PfxCertificateでコマンドレットを実行します。

Exporting pfx documentationは次のとおりです。

https://docs.Microsoft.com/en-us/powershell/module/pkiclient/export-pfxcertificate?view=win10-ps

    $pwd = ConvertTo-SecureString -String <Your Password> -Force -AsPlainText 
    Export-PfxCertificate -cert "Cert:\LocalMachine\My\<Certificate Thumbprint>" -FilePath <FilePath>.pfx -Password $pwd
  1. この時点で、Visual Studioで動作するキーがあり、アプリケーションをパッケージ化して、ローカルマシンのWindowsストアにデプロイできる.appxファイルまたはappxbundleファイルを作成できるようになりました。

詳細な手順はここにあります:

https://docs.Microsoft.com/en-us/windows/uwp/packaging/packaging-uwp-apps

シナリオ2:組織の認証局からの信頼できる証明書が必要な場合

ここで留意しなければならないのは、上記のセクションは関連しているが、自己署名証明書と信頼されたルート証明書CAまたは後続のCAとの違いを理解する必要があるということです。

さて、ここでそれを理解する一つの方法があります。最初のルート証明書は、自己署名証明書でした。ただし、さまざまな目的で他の人に証明書を発行することができます。つまり、サーバー認証またはコード署名...基本的な制約は無制限だと思います。また、さまざまな理由で他の証明書を発行できる他の認証局も発行できます。

これは、証明書チェーンと呼ばれます。上記から思い出してください、私たちの目的のために必要な証明書はこのチェーンの終わりです... Basic Constraints = 0またはfalseにLIMTED、つまり、End-endtityまたはCertificate Authroity = false ...として署名する必要があること発行されたこの証明書から何らかの理由でそれ以上証明書を発行することはできません。

これは、単にインストールして使用する必要があるアプリケーション用です。意味あり。

再度、このリンクを読んでください: https://blogs.technet.Microsoft.com/pki/2014/03/05/constraints-what-they-are-and-how-theyre-used/

したがって、この次のセグメントでは、証明書要求を介して認証局に証明書を要求する手順を説明します。 Linuxの世界ではopensslを介してこれは.csrと呼ばれます。powershellの世界ではこれは.reqと呼ばれます

パラメーターを適切に配置すると...最終結果は、.sslまたは.csrの交換可能な拡張子を持つopensslまたは証明書検証Webサイトで読み取り可能なファイルです。

Powershellには、CertReqというコマンドレットを使用してこれを作成する機能があります

  1. このコマンドと、.req証明書要求を作成する.infファイルを渡すだけで使用できます。

certreq -new TestReqConfig.inf MyRequest.req

  1. .infファイルには、上記の情報から新しい自己署名証明書を作成するときのように、キーと証明書情報のパラメーターが含まれます。

.infファイルは次のようになります。

[NewRequest] 
Subject = "C=US,ST=Florida,L=City,O=Your Company Information,OU=City 
Information,CN=certname.com" 
Requesttype = PKCS10
Exportable = TRUE
HashAlgorithm = md5
KeyAlgorithm = RSA
KeyLength = 2048 
KeyUsage = CERT_DIGITAL_SIGNATURE_KEY_USAGE 
FriendlyName = "FriendlyName CERT"
[Extensions] 
2.5.29.19 = "{text}false"
2.5.29.37 = "{text}1.3.6.1.5.5.7.3.3"

requesttype = PKCS10は、これがopenssl csrデコーダーで動作することを許可します...そして、他のすべてはこれらのサイトを介して説明されます:

デコーダーは、作成ファイルを開き、その間に作成されている情報を取得することで機能します

-----BEGIN NEW CERTIFICATE REQUEST-----
-----END NEW CERTIFICATE REQUEST-----

CertReqドキュメント

req/csrデコーダー

この情報が、Windowsストアアプリケーションのパッケージ化と作成で証明書がどのように使用されているかを学ぶのに役立つことを願っています。

19

このドキュメントごと: https://docs.Microsoft.com/en-us/windows-hardware/drivers/devtest/makecert

上記のリンクは、ドライバーのWindows証明書を作成するために使用されます。 UWPパッケージの証明書を作成する場合は、次の手順を参照できます。

ステップ1:パッケージの発行者名を決定する

手順2:MakeCert.exeを使用して秘密キーを作成する

ステップ3:Pvk2Pfx.exeを使用して個人情報交換(.pfx)ファイルを作成する

詳細については、 アプリパッケージ署名証明書の作成方法 を参照してください。

また、以下のコマンドを使用して、証明書を直接作成することもできます。 CNパラメーターをパラメーターに置き換えるだけです。

Mv Pvk

"<C:\Program Files (x86)\Windows Kits\10\bin\x64\MakeCert.exe>" /n "CN=Company, O=My Company, C=US" /r /pe /h 0 /eku "1.3.6.1.5.5.7.3.3,1.3.6.1.4.1.311.10.3.13" /e 01/01/2018 /sv C:\Development\certificates\Company.pvk C:\Development\certificates\Company.cer

Cerを作る

"<C:\Program Files (x86)\Windows Kits\10\bin\x64\Pvk2Pfx.exe>" /pvk C:\Development\certificates\Company.pvk /pi pvkPassword /spc C:\Development\certificates\Company.cer /pfx C:\Development\certificates\Company.pfx /po password! /pi password! 
1
Nico Zhu - MSFT