Obdržíte chybovou zprávu při pokusu o aktualizaci aplikace Visual Studio 2005 ClickOnce po vypršení platnosti certifikátu, který byl použit k podepsání instalace

Příznaky

Při pokusu o aktualizaci aplikace Microsoft Visual Studio 2005 ClickOnce po vypršení platnosti certifikátu, který jste použili při registraci instalace se zobrazí následující chybová zpráva:
Identita nasazení neodpovídá odběru.

Příčina

K tomuto problému dochází, protože všechna ClickOnce nasazení musí podepsat pomocí digitálního certifikátu. Nelze použít certifikát s vypršenou platností k podepsání aplikace ClickOnce. Chcete-li aktualizaci nasadit do aplikace, která má certifikát s vypršenou platností, musí aplikace přiřadit nový certifikát. Nový certifikát se neshoduje s původní certifikát, obdržíte chybovou zprávu, která je uvedena v části "Příznaky".

Řešení

Chcete-li vyřešit tento problém, použijte jednu z následujících metod.

Metoda 1

Aktualizovat klientský počítač nainstalovanou aplikaci ClickOnce pro Microsoft rozhraní.NET Framework 2.0 Service Pack 1 (SP1) nebo novější.

Systém Windows Vista

Použijte rozhraní.NET Framework 3.5 a rozhraní.NET Framework 3.5 SP 1.

Poznámka: Rozhraní.NET Framework 3.5 obsahuje mnoho nových funkcí, které postupně na rozhraní rozhraní.NET Framework 2.0 a 3.0. Rozhraní.NET Framework 3.5 obsahuje aktualizaci SP1 rozhraní.NET Framework 2.0 a rozhraní.NET Framework 3.0 SP1.

Následující soubor je k dispozici pro stažení z Microsoft Download Center:

Download Stáhněte balíček pro rozhraní.NET Framework 3.5.

Download Stáhněte balíček pro rozhraní.NET Framework 3.5 Service Pack 1.

Pro více informací o tom, jak stahovat soubory podpory společnosti Microsoft, klepněte na následující číslo článku v databázi Microsoft Knowledge Base:
119591 jak získat soubory podpory společnosti Microsoft ze serverů služeb online
Microsoft zkontroloval tento soubor na přítomnost virů. Společnost Microsoft použila aktuální antivirový software, který byl k dispozici k datu, kdy byl soubor vydán. Soubor je uložen na zabezpečených serverech, které pomáhají zabránit neoprávněným změnám v souboru.

Systém Windows XP

Použijte aktualizace rozhraní.NET Framework 2.0 SP1 nebo rozhraní.NET Framework 2.0 Service Pack 2 (SP2).

Následující soubory jsou k dispozici pro stažení z webu Microsoft Download Center:

Download Stáhněte balíček pro rozhraní.NET Framework 2.0 Service Pack 1 (x86).

Download Stáhněte balíček pro rozhraní.NET Framework 2.0 Service Pack 1 (x64).

Download Stáhněte balíček pro rozhraní.NET Framework 2.0 Service Pack 2.

Pro více informací o tom, jak stahovat soubory podpory společnosti Microsoft, klepněte na následující číslo článku v databázi Microsoft Knowledge Base:
119591 jak získat soubory podpory společnosti Microsoft ze serverů služeb online
Microsoft zkontroloval tento soubor na přítomnost virů. Společnost Microsoft použila aktuální antivirový software, který byl k dispozici k datu, kdy byl soubor vydán. Soubor je uložen na zabezpečených serverech, které pomáhají zabránit neoprávněným změnám v souboru.

Metoda 2

Odinstalujte aplikace ClickOnce, která je podepsána pomocí certifikátu vypršela. Potom znovu nainstalujte aktualizace ClickOnce aplikaci, která používá nový certifikát.

Metoda 3

Vytvoření příkazového řádku sestavení, která aktualizuje certifikát. Chcete-li to provést, postupujte takto.

Společnost Microsoft poskytuje ukázky programování pouze pro ilustraci bez žádné záruky výslovně uvedené nebo odvozené. To zahrnuje, ale není omezen pouze na předpokládané záruky obchodovatelnosti nebo vhodnosti pro určitý účel. Tento článek předpokládá, že jste obeznámeni s programovacím jazykem, který je předmětem ukázky a s nástroji, které slouží k vytvoření a ladění skriptu. Pracovníci podpory společnosti Microsoft mohou vysvětlit funkce určitého postupu. Nemohou však následující příklady rozšířit o další funkce nebo konstrukce podle konkrétních požadavků.
  1. V aplikaci Visual Studio 2005 v nabídce soubor klepněte na příkaz Nový a klepněte na příkaz projekt.

  2. Klepněte na položku Visual C++, klikněte na Aplikace konzoly Win32, zadejte do pole název RenewCert a klepněte na tlačítko OK.

  3. V dialogovém okně Průvodce aplikací Win32 klikněte na tlačítko Dokončit.

  4. Nahraďte existující kód v souboru RenewCert.cpp následující kód:
    #include "stdafx.h"
    void ReadPFXFile(LPCWSTR fileName, CRYPT_DATA_BLOB *pPFX)

    {

    HANDLE hCertFile = NULL;

    DWORD cbRead = 0;

    DWORD dwFileSize = 0, dwFileSizeHi = 0;

    hCertFile = CreateFile(fileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);

    dwFileSize = GetFileSize(hCertFile, &dwFileSizeHi);

    pPFX->pbData = (BYTE *) CryptMemAlloc(dwFileSize*sizeof(BYTE));

    pPFX->cbData = dwFileSize;

    ReadFile(hCertFile, pPFX->pbData, pPFX->cbData, &cbRead, NULL);

    CloseHandle(hCertFile);

    }

    void GetPrivateKey(CRYPT_DATA_BLOB pPFX, LPCWSTR szPassword, HCRYPTPROV *hCPContext)

    {

    HCERTSTORE hCertStore = NULL;

    PCCERT_CONTEXT hCertContext = NULL;

    DWORD dwKeySpec = AT_SIGNATURE;

    BOOL bFreeCertKey = TRUE;

    hCertStore = PFXImportCertStore(&pPFX, szPassword, CRYPT_EXPORTABLE);

    hCertContext = CertEnumCertificatesInStore(hCertStore, NULL);

    CryptAcquireCertificatePrivateKey(hCertContext, 0, NULL, hCPContext, &dwKeySpec, &bFreeCertKey);

    CertCloseStore(hCertStore, CERT_CLOSE_STORE_FORCE_FLAG);

    }

    void PrintContainerName(HCRYPTPROV hCPContext)

    {

    DWORD containerNameLen = 0;

    CHAR *szContainerName = NULL;

    CryptGetProvParam(hCPContext, PP_CONTAINER, NULL, &containerNameLen, 0);

    szContainerName = (CHAR *)CryptMemAlloc(sizeof(BYTE)*containerNameLen);

    CryptGetProvParam(hCPContext, PP_CONTAINER, (BYTE *)szContainerName, &containerNameLen, 0);

    printf("This certificate's container name is: %s", szContainerName);

    }

    void MakeNewCert(HCRYPTPROV hCPContext, LPCWSTR szCertName, LPCWSTR szPassword, CRYPT_DATA_BLOB *pPFX)

    {

    CERT_NAME_BLOB certNameBlob = {0,NULL};

    PCCERT_CONTEXT hCertContext = NULL;

    SYSTEMTIME certExpireDate;

    HCERTSTORE hTempStore = NULL;

    CertStrToName(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, szCertName, CERT_OID_NAME_STR, NULL, NULL, &certNameBlob.cbData, NULL);

    certNameBlob.pbData = (BYTE *)CryptMemAlloc(sizeof(BYTE)*certNameBlob.cbData);

    CertStrToName(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, szCertName, CERT_OID_NAME_STR, NULL, certNameBlob.pbData, &certNameBlob.cbData, NULL);

    GetSystemTime(&certExpireDate);

    certExpireDate.wYear += 5;

    hCertContext = CertCreateSelfSignCertificate(hCPContext, &certNameBlob, 0, NULL, NULL, NULL, &certExpireDate, NULL);

    hTempStore = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, NULL, CERT_STORE_CREATE_NEW_FLAG, 0);

    CertAddCertificateContextToStore(hTempStore, hCertContext, CERT_STORE_ADD_NEW, NULL);

    PFXExportCertStoreEx(hTempStore, pPFX, szPassword, NULL, EXPORT_PRIVATE_KEYS);

    pPFX->pbData = (BYTE *)CryptMemAlloc(sizeof(BYTE)*pPFX->cbData);

    PFXExportCertStoreEx(hTempStore, pPFX, szPassword, NULL, EXPORT_PRIVATE_KEYS);

    CryptMemFree(certNameBlob.pbData);

    CertCloseStore(hTempStore, CERT_CLOSE_STORE_FORCE_FLAG);

    CertFreeCertificateContext(hCertContext);

    }

    void WritePFX(CRYPT_DATA_BLOB pPFX, LPCWSTR szOutputFile)

    {

    HANDLE hOutputFile = NULL;

    DWORD cbWritten = 0;

    hOutputFile = CreateFile(szOutputFile, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_FLAG_SEQUENTIAL_SCAN, NULL);

    WriteFile(hOutputFile, pPFX.pbData, pPFX.cbData, &cbWritten, NULL);

    CloseHandle(hOutputFile);

    }

    int _tmain(int argc, _TCHAR* argv[])

    {

    LPCWSTR szCertFileName = NULL;

    CRYPT_DATA_BLOB pPFX;

    LPCWSTR szPassword = NULL;

    HCRYPTPROV hCPContext = NULL;

    LPCWSTR szCertName = L"CN=NewCert";

    CRYPT_DATA_BLOB pPfxOutputBlob = {0,NULL};

    LPCWSTR szOutFile = NULL;

    // Parse the command line.

    if(argc == 1)

    {

    printf("renewcert <PFX File> <new cert filename> <new cert friendly name> [optional]<password>\n");

    printf("Example: renewcert oldcert.pfx newcert.pfx \"CN=MyNewCert\" MySuperSecretPassword");

    return 0;

    }

    if(argc >= 2)

    szCertFileName = argv[1];

    if(argc >= 5)

    szPassword = argv[4];

    // Uncomment this block to add <new cert filename> and <new cert friendly name> as parameters

    // NOTE: <new cert friendly name> must be of format "CN=<name>"

    if(argc >= 3)

    szOutFile = argv[2];

    if(argc >= 4)

    szCertName = argv[3];

    ReadPFXFile(szCertFileName, &pPFX);

    GetPrivateKey(pPFX, szPassword, &hCPContext);

    //PrintContainerName(hCPContext);

    // Uncomment this section to make a new PFX rather than just printing the container name.

    // Make sure you also uncomment the command line parameter section above.

    MakeNewCert(hCPContext, szCertName, szPassword, &pPfxOutputBlob);

    WritePFX(pPfxOutputBlob, szOutFile);

    // Clean up.

    CryptReleaseContext(hCPContext, 0);

    CryptMemFree(pPfxOutputBlob.pbData);

    CryptMemFree(pPFX.pbData);

    return 0;

    }

  5. V souboru stdafx.h nahraďte existující kód následující kód:
    // stdafx.h : include file for standard system include files,
    // or project specific include files that are used frequently, but

    // are changed infrequently.

    //

    #pragma once

    #define WIN32_LEAN_AND_MEAN // Exclude rarely used material from Windows headers.

    #include <stdio.h>

    #include <tchar.h>

    #include <windows.h>

    #include <wincrypt.h>

  6. V nabídce projekt klepněte na tlačítko Vlastnosti pro otevření stránky vlastností pro tento projekt.
  7. Rozbalte uzel Linker a potom klepněte na tlačítko vstup.
  8. Klepněte do prázdného okna vpravo Další závislostia potom klepněte na tlačítko se třemi tečkami (...) k otevření dialogového okna Další závislosti .
  9. V okně prázdné zadejte Crypt32.liba klepněte na tlačítko OK.
  10. Klepněte na tlačítko použíta potom klepněte na tlačítko OK zavřete stránky vlastností.
  11. V nabídce sestavení klepněte na tlačítko Sestavit řešení.

  12. Po řešení, spusťte následující příkaz k aktualizaci certifikátu:
    renewcert <OldCertificate>.pfx <NewCertificate>.pfx \"CN=<NewCertificateName>\" <Password>
    Poznámka: < OldCertificate > je zástupný symbol pro starý certifikát < NewCertificate > je zástupný symbol pro nový certifikát, < NewCertificateName > je zástupný symbol pro název nového certifikátu a < heslo > je zástupný symbol pro heslo.

Další informace

Kroky pro reprodukci tohoto problému

  1. Spusťte aplikaci Visual Studio 2005.
  2. V nabídce souborklepněte na příkaz Novýa klepněte na příkaz projekt.
  3. Klepněte na tlačítko Visual C#, klepněte na tlačítko Aplikace systému Windows, zadejte WindowsApplication1 v
    Název a klepněte na tlačítko OK.
  4. V Průzkumníku řešení klikněte pravým tlačítkem myši WindowsApplication1a potom klepněte na příkaz Vlastnosti.
  5. Klepněte na tlačítko podepisovánía potom přiřadit certifikát, který brzy vyprší.
  6. V Průzkumníku řešení klikněte pravým tlačítkem myši WindowsApplication1a potom klepněte na tlačítko Publikovat. Spustí se Průvodce Publikovat.
  7. Na kde chcete publikovat aplikaci? stránky, zadejte platnou adresu URL a klepněte na tlačítko Další. Použijte následující formát adresy URL:
    http://ServerName/FolderName
  8. Na bude aplikace k dispozici offline? stránky, klepněte na požadovanou možnost.

    Poznámky
    • Pokud chcete, aby uživatel spustí aplikaci, když je uživatel odpojen od sítě, klepněte na tlačítko Ano, tato aplikace bude k dispozici online nebo offline. Průvodce vytvoří zástupce aplikace v nabídce Start .
    • Pokud chcete spustit aplikaci přímo z umístění pro publikování, klepněte na tlačítko Ne, tato aplikace je k dispozici pouze v režimu online. Průvodce nevytvoří zástupce v nabídce Start .
  9. Klepněte na tlačítko Další pokračujte.
  10. Klikněte na Dokončit pro publikování aplikace.
  11. Instalaci aplikace ClickOnce z http://název_serveru/ URL /publish.htmnázev_složky.
  12. Po vypršení platnosti certifikátu, opakujte kroky 6 až 10 znovu publikovat aplikace.
  13. Nainstalujte aktualizaci aplikace ClickOnce z http://název_serveru/ URL /publish.htmnázev_složky.
Vlastnosti

ID článku: 925521 - Poslední kontrola: 14. 1. 2017 - Revize: 1

Váš názor