type
EPdfSslError = class(Exception);
TPdfSslCapabilities = record
Available: Boolean;
DetachedVerification: Boolean;
AttachedVerification: Boolean;
SystemTrustStore: Boolean;
CustomTrustAnchors: Boolean;
LocalCrls: Boolean;
ChainCertificateCollection: Boolean;
OnlineRetrieval: Boolean;
RetrievalTimeout: Boolean;
end;
TPdfSslVerifyDiagnostic = (psvdBackendUnavailable, psvdOnlineRetrievalIgnored,
psvdRetrievalTimeoutIgnored, psvdNoCrlsConfigured);
TPdfSslVerifyDiagnostics = set of TPdfSslVerifyDiagnostic;
TPdfSslCmsVerifier = class(TInterfacedObject, IPdfCmsVerifier)
public
function BackendName: string;
function VerifyDetached(const CmsDer: TBytes; Segment1: Pointer; Segment1Length: Cardinal; Segment2: Pointer; Segment2Length: Cardinal; const Options: TPdfCmsVerifyOptions): TPdfCmsVerifyResult;
function VerifyAttached(const CmsDer: TBytes; const Options: TPdfCmsVerifyOptions): TPdfCmsVerifyResult;
end;
procedure ConfigureSslLibraryPath(const APath: string);
function SslAvailable: Boolean;
function SslMissingSymbols: string;
function SslLibraryPath: string;
function SslLibraryVersion: string;
function SslAbiLayout: string;
function SslCapabilities: TPdfSslCapabilities;
function SslVerifyOptionsDiagnostics(const Options: TPdfCmsVerifyOptions): TPdfSslVerifyDiagnostics;
procedure ConfigureSslTrustAnchors(const Anchors: TPadesChainCertArray);
procedure ConfigureSslCrls(const Crls: TPadesChainCertArray);
function ConfigureSslCmsVerifier: IPdfCmsVerifier;
FPdfCryptoSsl je OpenSSL backend overovania CMS spotrebovávaný FPdfCrypto, náprotivok toho, čo FPdfCryptoWin poskytuje na Windows. Overí hodnotu CMS SignedData voči podpísanému obsahu, vyrieši certifikát podpisovníka a vyhodnotí reťazec certifikátov voči systémovému úložisku OpenSSL rozšírenému o kotvy dôvery a CRL, ktoré volajúci nakonfiguroval
libcrypto sa viaže za behu podľa názvu, nie linkuje, čo udržiava závislosť voliteľnou a dovoľuje jednotke sa kompilovať na každom cieli. ConfigureSslLibraryPath prepíše knižnicu, ktorá sa načíta; odovzdanie prázdnej cesty obnoví vstavaný zoznam kandidátov pre platformu
SslAvailable, SslMissingSymbols, SslLibraryPath, SslLibraryVersion a SslAbiLayout hlásia stav toho viazania, takže aplikácia sa môže pri štarte rozhodnúť, či bude na tomto hostiteľovi overovanie CMS možné, a môže zaznamenať, ktorá knižnica odpovedala
SslCapabilities sústreďuje to, čo tento backend implementuje, do jedného záznamu TPdfSslCapabilities a SslVerifyOptionsDiagnostics ešte pred spustením overovania hlási, ktoré nastavenia TPdfCmsVerifyOptions by tu nemali žiadny účinok, ako množinu TPdfSslVerifyDiagnostics, ktorú si volajúci môže zobraziť ako upozornenia
ConfigureSslTrustAnchors a ConfigureSslCrls odovzdajú vyhodnocovaniu všetko, čo sa od neho očakáva nad rámec systémového úložiska, oboje ako DER. ConfigureSslCmsVerifier postaví TPdfSslCmsVerifier a nainštaluje ho ako backend overovania CMS používaný validáciou PAdES a vyvolá EPdfSslError, keď OpenSSL nie je dostupné
TPdfSslCmsVerifier implementuje IPdfCmsVerifier. VerifyDetached spojí dva bajtové rozsahy po oboch stranách diery podpisu do jedného podpísaného obsahového streamu, čo je tvar, ktorý má podpis PDF; VerifyAttached pokrýva hodnotu nesúcu vlastný obsah, ako je token časovej pečiatky
| Function | Description |
|---|---|
ConfigureSslLibraryPath | Prepíše knižnicu libcrypto, ktorú backend načíta; zavolajte ju pred prvým použitím a odovzdajte prázdny APath na obnovenie vstavaného zoznamu kandidátov pre platformu |
SslAvailable | Vráti True, keď sa libcrypto načítal a každý potrebný symbol sa vyriešil |
SslMissingSymbols | Vráti názvy, ktoré sa nepodarilo vyriešiť, oddelené medzerami, alebo prázdny reťazec, keď sa naviazalo všetko; neprázdny výsledok na hostiteľovi, ktorý má libcrypto, znamená, že zostavenie je staršie než API, na ktoré jednotka cieľuje |
SslLibraryPath | Vráti cestu knižnice, ktorá sa načítala, alebo prázdny reťazec |
SslLibraryVersion | Vráti reťazec verzie, ktorý libcrypto hlási, alebo prázdny reťazec |
SslAbiLayout | Hlási šírky C typov, ktoré toto zostavenie predpokladá, ako ulong=<n> long=<n>; C unsigned long má na Windows 4 bajty a na Linuxe a macOS 8 a každý chybový kód a príznak úložiska prechádza hranicou ako jeden |
SslCapabilities | Vráti záznam TPdfSslCapabilities popisujúci operácie, ktoré tento backend implementuje; príznaky popisujú implementované operácie, nie úspešné kontroly |
SslVerifyOptionsDiagnostics | Vráti, ako množinu TPdfSslVerifyDiagnostics, očakávané účinky nastavení v Options v tomto backende pred spustením overovania; dodané CRL sa musia ešte dekódovať, pokrývať reťazec a byť aktuálne, kým revokácia môže byť platná |
ConfigureSslTrustAnchors | Dodá kotvy dôvery, ako DER v Anchors, ktoré vyhodnocovanie reťazca pridá k systémovému úložisku; prázdne pole nechá vyhodnocovanie len so systémovým úložiskom |
ConfigureSslCrls | Dodá CRL, ako DER v Crls, ktoré si vyhodnocovanie reťazca môže pozrieť; revokácia sa hlási ako nepodporovaná, kým nie je dodaná aspoň jedna |
ConfigureSslCmsVerifier | Postaví OpenSSL verifikátor a nainštaluje ho ako backend overovania CMS a vráti ho ako IPdfCmsVerifier |
| Type | Members and purpose |
|---|---|
EPdfSslError | Výnimka vyvolaná ConfigureSslCmsVerifier, keď OpenSSL nie je dostupné; správa nesie nevyriešené názvy hlásené SslMissingSymbols |
TPdfSslCapabilities | Available, DetachedVerification, AttachedVerification, SystemTrustStore, CustomTrustAnchors, LocalCrls, ChainCertificateCollection, OnlineRetrieval a RetrievalTimeout hlásia, ktoré operácie backend implementuje; každý príznak okrem dvoch príznakov sťahovania zodpovedá SslAvailable a OnlineRetrieval a RetrievalTimeout zostávajú False, pretože sa nič nesťahuje online |
TPdfSslVerifyDiagnostic | psvdBackendUnavailable, psvdOnlineRetrievalIgnored, psvdRetrievalTimeoutIgnored alebo psvdNoCrlsConfigured |
TPdfSslVerifyDiagnostics | Množina hodnôt TPdfSslVerifyDiagnostic vrátená SslVerifyOptionsDiagnostics |
TPdfSslCmsVerifier | Overovanie CMS cez OpenSSL implementujúce IPdfCmsVerifier s BackendName, VerifyDetached a VerifyAttached |
| Method | Description |
|---|---|
BackendName | Vráti OpenSSL, názov, pod ktorým sa tento backend identifikuje vo výsledkoch validácie |
VerifyDetached | Overí odpojenú hodnotu CMS v CmsDer voči obsahu popísanému Segment1 / Segment1Length a Segment2 / Segment2Length, rešpektujúc Options, a vráti stav podpisu, dôvery a revokácie v TPdfCmsVerifyResult |
VerifyAttached | Overí pripojenú hodnotu CMS v CmsDer, ktorej podpísaný obsah cestuje vnútri štruktúry, s použitím Options |
ConfigureSslCrls dodala CRL, pretože OpenSSL sám žiadnu nesťahuje a prázdne úložisko so zapnutou kontrolou CRL by zlyhalo každý reťazec namiesto jeho skontrolovania; bez dodanej CRL sa výsledok hlási ako nepodporovaný, nie ako čisté prejdenieTPdfCmsVerifyOptions.OnlineRetrieval tu nemá žiadny účinokSslVerifyOptionsDiagnostics označí psvdOnlineRetrievalIgnored a psvdRetrievalTimeoutIgnored, keď sú nastavené možnosti sťahovania, a psvdNoCrlsConfigured, keď je vyžiadané CheckRevocation, kým ConfigureSslCrls nedodala ničSslAvailable za predpodmienku a použiť SslMissingSymbols na nahlásenie, prečo viazanie zlyhalo