Yo lo verifico desde el programa y si tiene menos de 30 días para caducar aviso al iniciar el programa cada vez.
Te adjunto el código pero está en C++, en Delphi no soy capaz de hacerlo, si alguien puede convertirlo.
Lo tengo en una función a la que llamo pasándole el archivo en ASCert, la contraseña en ASPass y me devuelve la fecha, luego ya calculo yo el tiempo que le queda para caducar,.
En caso de error o que no exista devuelve una cadena vacía.
Código:
HANDLE hFile = CreateFileW(ASCert.c_str(), GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(hFile == INVALID_HANDLE_VALUE)
return "";
DWORD size = GetFileSize(hFile, NULL);
BYTE* buffer = new BYTE[size];
DWORD bytesRead;
ReadFile(hFile, buffer, size, &bytesRead, NULL);
CloseHandle(hFile);
CRYPT_DATA_BLOB blob;
blob.cbData = size;
blob.pbData = buffer;
HCERTSTORE hStore = PFXImportCertStore(&blob, ASPass.c_str(), PKCS12_NO_PERSIST_KEY);
delete[] buffer;
if(!hStore)
return "";
PCCERT_CONTEXT pCert = CertEnumCertificatesInStore(hStore, NULL);
if(!pCert)
{
CertCloseStore(hStore, 0);
return "";
}
SYSTEMTIME st;
FileTimeToSystemTime(&pCert->pCertInfo->NotAfter, &st);
CertFreeCertificateContext(pCert);
CertCloseStore(hStore, 0);
wchar_t fecha[11];
swprintf(fecha, 11, L"%02d/%02d/%04d", st.wDay, st.wMonth, st.wYear);
return String(fecha);