Ver Mensaje Individual
  #2  
Antiguo 21-11-2025
chenech chenech is offline
Miembro
 
Registrado: dic 2013
Posts: 138
Reputación: 13
chenech Va por buen camino
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);
Responder Con Cita