151 lines
3.4 KiB
C++
151 lines
3.4 KiB
C++
|
/*++
|
||
|
|
||
|
|
||
|
Copyright (c) 1997 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
iiscert.hxx
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Definitions and data structures needed to deal with server certificates
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Alex Mallet (amallet) 02-Dec-1997
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#ifndef _IISCERT_HXX_
|
||
|
#define _IISCERT_HXX_
|
||
|
|
||
|
//
|
||
|
// Enums and hash defines
|
||
|
//
|
||
|
|
||
|
//
|
||
|
// Data structure definitions
|
||
|
//
|
||
|
|
||
|
|
||
|
//
|
||
|
// Structure used to hold information to open a cert store - basically, all the parameters
|
||
|
// you need to call CertOpenSystemStore()
|
||
|
//
|
||
|
|
||
|
typedef struct OpenCertStoreInfo
|
||
|
{
|
||
|
//
|
||
|
// Parameters used in call to CryptAcquireContext() to get handle to crypt provider
|
||
|
//
|
||
|
LPTSTR pszContainer;
|
||
|
LPTSTR pszProvider;
|
||
|
DWORD dwProvType;
|
||
|
DWORD dwFlags;
|
||
|
|
||
|
LPTSTR pszStoreName;
|
||
|
HCERTSTORE hCertStore;
|
||
|
} OPEN_CERT_STORE_INFO, *POPEN_CERT_STORE_INFO;
|
||
|
|
||
|
|
||
|
//
|
||
|
// Function prototypes
|
||
|
//
|
||
|
|
||
|
OPEN_CERT_STORE_INFO* AllocateCertStoreInfo();
|
||
|
|
||
|
VOID DeallocateCertStoreInfo( IN OPEN_CERT_STORE_INFO *pInfo );
|
||
|
|
||
|
BOOL DuplicateCertStoreInfo( OUT OPEN_CERT_STORE_INFO **ppDestInfo,
|
||
|
IN OPEN_CERT_STORE_INFO *pSrcInfo );
|
||
|
|
||
|
|
||
|
//
|
||
|
// Class used to encapsulate a server certificate
|
||
|
//
|
||
|
class dllexp IIS_SERVER_CERT {
|
||
|
public:
|
||
|
|
||
|
//
|
||
|
// Constructor used when all info is already in metabase
|
||
|
//
|
||
|
IIS_SERVER_CERT( IN IMDCOM *pMDObject,
|
||
|
IN LPTSTR pszMBPath );
|
||
|
|
||
|
//
|
||
|
// Destructor
|
||
|
//
|
||
|
~IIS_SERVER_CERT ();
|
||
|
|
||
|
//
|
||
|
// Functions used to query state of object
|
||
|
//
|
||
|
DWORD Status() { return m_dwStatus ; }
|
||
|
|
||
|
BOOL IsValid();
|
||
|
|
||
|
BOOL IsFortezzaCert() { return m_fIsFortezzaCert; }
|
||
|
|
||
|
PCCERT_CONTEXT QueryCertContext() { return m_pCertContext;}
|
||
|
|
||
|
PCCERT_CONTEXT *QueryCertContextAddr() { return (&m_pCertContext); }
|
||
|
|
||
|
LPTSTR QueryMBPath() { return m_strMBPath.QueryStr(); }
|
||
|
|
||
|
LPTSTR QueryContainer()
|
||
|
{ return (m_pStoreInfo ? m_pStoreInfo->pszContainer : NULL); }
|
||
|
|
||
|
LPTSTR QueryProviderName()
|
||
|
{ return (m_pStoreInfo ? m_pStoreInfo->pszProvider : NULL ); }
|
||
|
|
||
|
DWORD QueryProviderType()
|
||
|
{ return (m_pStoreInfo ? m_pStoreInfo->dwProvType : 0); }
|
||
|
|
||
|
DWORD QueryOpenFlags()
|
||
|
{ return (m_pStoreInfo ? m_pStoreInfo->dwFlags : 0 ); }
|
||
|
|
||
|
LPTSTR QueryStoreName()
|
||
|
{ return (m_pStoreInfo ? m_pStoreInfo->pszStoreName : NULL) ; }
|
||
|
|
||
|
HCERTSTORE QueryStoreHandle()
|
||
|
{ return (m_pStoreInfo ? m_pStoreInfo->hCertStore : NULL); }
|
||
|
|
||
|
//
|
||
|
// Handle to Fortezza CSP used to verify signatures on Fortezza certs when
|
||
|
// building a chain.
|
||
|
//
|
||
|
static HCRYPTPROV m_hFortezzaCSP;
|
||
|
static HCRYPTDEFAULTCONTEXT m_hFortezzaCtxt;
|
||
|
|
||
|
private:
|
||
|
|
||
|
//
|
||
|
// Private functions
|
||
|
//
|
||
|
BOOL UseProgrammaticPINEntry( IN MB *pMB ) { return m_fIsFortezzaCert; }
|
||
|
|
||
|
BOOL RetrievePINInfo( IN MB *pMB,
|
||
|
OUT LPTSTR *ppszPIN,
|
||
|
OUT LPTSTR *ppszSerialNumber,
|
||
|
OUT LPTSTR *ppszPersonality );
|
||
|
//
|
||
|
// Member variables
|
||
|
//
|
||
|
STR m_strMBPath; //path in metabase, relative to /, where cert info is stored
|
||
|
|
||
|
OPEN_CERT_STORE_INFO *m_pStoreInfo; //information about cert store of this cert
|
||
|
|
||
|
HCRYPTPROV m_hCryptProv; //handle to CSP for this cert
|
||
|
|
||
|
BOOL m_fIsFortezzaCert; //bool indicating whether it's a Fortezza cert
|
||
|
|
||
|
PCCERT_CONTEXT m_pCertContext;
|
||
|
|
||
|
DWORD m_dwStatus;
|
||
|
};
|
||
|
|
||
|
typedef IIS_SERVER_CERT *PIIS_SERVER_CERT;
|
||
|
|
||
|
#endif //_IISCERT_HXX_
|