Partager via


ICertAdmin ::ImportCertificate, méthode (certadm.h)

La méthode ImportCertificate prend un certificat émis précédemment et l’importe dans la base de données de l’autorité de certification . Cette méthode a d’abord été définie dans l’interface ICertAdmin .

Pour connaître les conditions requises pour que le certificat soit correctement importé, consultez Remarques.

Syntaxe

HRESULT ImportCertificate(
  [in]  const BSTR strConfig,
  [in]  const BSTR strCertificate,
  [in]  LONG       Flags,
  [out] LONG       *pRequestId
);

Paramètres

[in] strConfig

Représente une chaîne de configuration valide pour l’autorité de certification sous la forme COMPUTERNAME\CANAME, où COMPUTERNAME est le nom réseau du serveur des services de certificats et CANAME est le nom commun de l’autorité de certification, tel qu’entré lors de l’installation des services de certificats. Pour plus d’informations sur le nom de la chaîne de configuration, consultez ICertConfig.

ImportantImportCertificate n’efface pas le cache interne lorsque la chaîne de configuration est modifiée. Lorsque vous modifiez la chaîne de configuration de l’autorité de certification, vous devez instancier un nouvel objet ICertAdmin et appeler à nouveau cette méthode avec la nouvelle chaîne de configuration.
 

[in] strCertificate

Représentation binaire du certificat importé.

[in] Flags

Spécifie le format du certificat. Ce paramètre peut prendre les valeurs suivantes.

Valeur Signification
CR_IN_BASE64HEADER
Format BASE64 avec début/fin.
CR_IN_BASE64
Format BASE64 sans début/fin.
CR_IN_BINARY
Format binaire.

[out] pRequestId

Pointeur vers une valeur LONG qui reçoit l’ID de requête attribué à la base de données pour le certificat importé.

Valeur retournée

C++

Si la méthode réussit et que le paramètre pRequestID est défini sur la valeur de l’ID de requête attribué à la base de données pour le certificat importé, la méthode retourne S_OK.

Si la méthode échoue, elle retourne une valeur HRESULT qui indique l’erreur. Pour obtenir la liste des codes d’erreur courants, consultez Valeurs HRESULT courantes.

VB

La valeur de retour est l’ID de requête attribué à la base de données pour le certificat importé.

Remarques

La méthode ImportCertificate est utile dans le cas d’une autorité de certification qui a été partiellement restaurée à partir d’une sauvegarde : si un certificat ne se trouve pas sur les bandes de sauvegarde utilisées pour restaurer l’autorité de certification, mais existe dans un fichier, le certificat peut être importé au moyen de cette méthode.

Pour que cette méthode réussisse, le certificat importé doit avoir été émis précédemment par l’autorité de certification spécifiée dans strConfig. L’autorité de certification restaurée valide la signature du certificat et, si la signature n’est pas valide, l’appel de méthode échoue.

En outre, vous ne pouvez pas importer un certificat s’il existe déjà dans la base de données. Chaque certificat de la base de données doit être unique. La base de données garantit l’unicité en vérifiant le numéro de série du certificat.

Exemples

// This code imports a binary certificate file.
BSTR   bstrCert = NULL;  // Variable for certificate.
HANDLE hFile;  
DWORD  cchFile, cbRead;
LONG   nID;  // Variable for request ID.

// Open the file that contains the certificate.
hFile = CreateFile((LPCSTR) "d:\\cert1.cer",
                  GENERIC_READ,
                  FILE_SHARE_READ,
                  NULL,
                  OPEN_EXISTING,
                  0,
                  NULL);
if (INVALID_HANDLE_VALUE == hFile)
{
    printf("Unable to open file\n");
    // Take error action as needed.
}
// Determine the file size.
cchFile = GetFileSize(hFile, NULL);
if ( (DWORD)-1 == cchFile )
{
    printf("Failed GetFileSize\n");
    CloseHandle(hFile);
    // Take error action as needed.
}
// Allocate the memory for the certificate.
bstrCert = SysAllocStringByteLen(NULL, cchFile);
if (NULL == bstrCert)
{
    printf("Failed SysAllocStringByteLen\n");
    CloseHandle(hFile);
    // Take error action as needed.
}
// Read in the certificate.
if (!ReadFile(hFile,
             (char *)bstrCert,
             cchFile,
             &cbRead,
             NULL) || (cbRead != cchFile))
{
    printf("Failed to successfully read file\n");
    CloseHandle(hFile);
    SysFreeString(bstrCert);
    // Take error action as needed.
}
// Close the file.
CloseHandle(hFile);

// Import the certificate.
bstrCA = SysAllocString(L"<COMPUTERNAMEHERE>\\<CANAMEHERE>");
if (FAILED(hr))
{
    printf("Failed to allocate memory for bstrCA\n");
    SysFreeString(bstrCert);
    // Take error action as needed.
}

hr = pCertAdmin->ImportCertificate(bstrCA,
                                   bstrCert,
                                   CR_IN_BINARY,
                                   &nID);
if (FAILED(hr))
    printf("Failed ImportCertificate [%x]\n", hr);
else
    printf("Imported certificated has Request ID: %d\n", nID);

SysFreeString(bstrCert);
SysFreeString(bstrCA);

Configuration requise

Condition requise Valeur
Client minimal pris en charge Aucun pris en charge
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
Plateforme cible Windows
En-tête certadm.h (include Certsrv.h)
Bibliothèque Certidl.lib
DLL Certadm.dll

Voir aussi

CCertAdmin

ICertAdmin

ICertAdmin2

ICertConfig