2016-05-12 19 views
4

これまでは、すべての機能が正常に動作する1つのコード署名証明書があります。最近、certが期限切れになったため、Comodoから新しい証明書を取得し、その証明書で新しいビルドをリリースしました。パッケージ名が新しいコード署名証明書で変更されました

パッケージのファミリ名この新しい証明書で変更されたため、新しい証明書でパッケージ化されたこの新しいビルドで古いインストール済みのアプリケーションをアップグレードできません。

パッケージファミリ名を定数として維持したり、新しい証明書を維持するためのソリューションが必要な場合は、古いアプリケーションのアップグレードも提供する必要があります。

これをどのように達成できますか?

エラーMSGのPowerShellからパッケージをアップグレード中:

Add-AppxPackage : Deployment failed with HRESULT: 0x80073CF3, Package failed 
updates, dependency or conflict validation. 
Windows cannot install package df70dbc9-455c-4c32-b052-7ac2943630b7_1.0.193.1_x64__qbsrcgy0j364g 
because a different package df70dbc9-455c-4c32-b052-7ac2943630b7_1.0.0.191_x64__hs446qhh7vdt4 
with the same name is already installed. Remove package 
df70dbc9-455c-4c32-b052-7ac2943630b7_1.0.0.191_x64__hs446qhh7vdt4 before 
installing. 
NOTE: For additional information, look for [ActivityId] 
b0deec37-ac10-0001-81fd-deb010acd101 in the Event Log or use the command line 
Get-AppxLog -ActivityID b0deec37-ac10-0001-81fd-deb010acd101 
At C:\Users\\Desktop\\myappName_1.0.193.1_x64_Test\Add-AppDevPackage.ps1:388 char:13 
+    Add-AppxPackage -Path $DeveloperPackagePath.FullName -DependencyPath ... 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : WriteError: (C:\Users\myuser....193.1_x64.appx:String) [Add-AppxPackage], IOException 
    + FullyQualifiedErrorId : DeploymentError,Microsoft.Windows.Appx.PackageManager.Commands.AddAppxPackageCommand 
Error: Could not install the app.
+0

例外はそれをすべて言います。同じ名前の新しいパッケージをインストールする前に古いパッケージをアンインストールしますか? –

+0

私たちの意図は、保存されたデータを失うことなく、アプリケーションをアップグレードする必要があります –

答えて

4

(あなたのケースhs446qhh7vdt4で)パッケージファミリー名(PFN)サフィックスが、証明書の対象(AKA サブジェクト名)のハッシュです。

certutil -dump foo.pfx 
Enter PFX password: 
================ Certificate 0 ================ 
================ Begin Nesting Level 1 ================ 
Element 0: 
Serial Number: xxxxxxxxxxxxxxxxx 
Issuer: CN=Microsoft, O=Contoso, L=Redmond, S=Washington, C=US 
NotBefore: 11/1/2016 12:00 AM 
NotAfter: 11/1/2017 12:00 AM 
Subject: CN=Microsoft, O=Contoso, L=Redmond, S=Washington, C=US <== THIS IS HASHED 

生成する新しい証明書に同じ件名が含まれていることを確認すると、同じPFNが取得されます。 Visual Studio内でストア証明書を生成できない場合があります(執筆時点では、上記のような複雑な対象はCN=XO=Yなどの複数のパーツで解析できません)。その場合は自分で作成する必要がありますが、store validationsに準拠している必要があります。

幸いにも、必要な正確な証明書を生成する簡単なコマンドがあります。有効日(!ノー年以上離れている)だけでなく、(certutil -dumpを使用して、以前の証明書から取られた)対象を置き換えてください

makecert -sv foo.pvk -n "CN=Contoso, O=Contoso, L=Redmond, S=Washington, C=US" 
    foo.cer -b 11/01/2016 -e 11/01/2017 -r -cy end -a sha256 -eku 1.3.6.1.5.5.7.3.3 

:Visual Studioの開発・プロンプトを実行します(1行)を開き。出力証明書(cer)と秘密鍵(pvk)の名​​前は無意味です。そのコマンドは、あなたがそのようにのようなPFXに組み合わせることができるようになりますこれは、foo.pvkfoo.cerを生成します。

PVK2PFX -pvk foo.pvk -spc foo.cer -pfx foo.pfx 

高度な世代のための別のオプション

あなたは、より高度な証明書の要件を持っている場合は、あなたをcertreqを使用できるはずです(ただし、テストしていません)。次の内容のcert.infという名前のファイルを作成します。

[Version] 
Signature = "$Windows NT$" 

[Strings] 
szOID_ENHANCED_KEY_USAGE = "2.5.29.37" 
szOID_CODE_SIGNING = "1.3.6.1.5.5.7.3.3" 
szOID_BASIC_CONSTRAINTS2 = "2.5.29.19" 

[NewRequest] 
Subject = "CN=Contoso, O=Contoso, L=Redmond, S=Washington, C=US" 
Exportable = true 
HashAlgorithm = Sha256 
KeyLength = 2048 
RequestType = Cert 
ValidityPeriod = "Years" 
ValidityPeriodUnits = "1" 

[Extensions] 
%szOID_ENHANCED_KEY_USAGE% = "{text}%szOID_CODE_SIGNING%" 
%szOID_BASIC_CONSTRAINTS2% = "{text}" 

は対象と有効期限を交換し、そしてあなたがドキュメントごとに必要な(または可能性が高いウェブ上で発見)任意の高度な設定を調整します。そして、次の操作を行います。

  1. certreq -new cert.inf cert.cer
  2. 結果cert.cerをダブルクリックして、信頼されたルート証明機関ストア(ユーザーまたはマシンのいずれか)にそれをインストールします。
  3. certreq -accept -user cert.cer OR certreq -accept -machine cert.cer(前の手順で選択した店舗によって異なります)。
  4. 証明書マネージャー(上記で選択した内容に応じて、ユーザーまたはマシンのスコープに格納)に保存し、インストールしたばかりの証明書を探します。それをダブルクリックして詳細情報タブからシリアル番号をコピーしてください(長時間経過しても証明書が表示されない場合や、別の証明書をインストールした後に別のサブジェクト名を使用した場合)。あなたは今、有効な店舗PFXを持つべき

(パスワードとその実際の値とシリアル番号を交換してください)。

をさらに別のオプションにもより高度な世代のための

使用OpenSSL。確かにそれ以上のことをすることはできますが、私は個人的に試していないので、あなたはそれを理解しなければなりません。

+1

パーフェクト!期限切れの証明書が見つかったら、別の発行元名を持つ新しい証明書が作成されました。これにより同じアップデートの問題が発生しました –

関連する問題