Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(PureBasic) Convert Let's Encrypt PEM Files to a PFXDemonstrates how to convert the .pem files provided by Let's Encrypt to a single PFX.
IncludeFile "CkStringBuilder.pb" IncludeFile "CkPfx.pb" Procedure ChilkatExample() ; This example assumes the Chilkat API to have been previously unlocked. ; See Global Unlock Sample for sample code. ; Let's Encrypt provides four .pem files ; 1. fullchain.pem ; 2. privkey.pem ; 3. cert.pem ; 4. chain.pem ; The cert.pem and chain.pem are redundant. ; The fullchain.pem is composed of the cert.pem and chain.pem. ; To convert the PEM's to a single .pfx, we don't need the redundant data. ; The privkey.pem and fullchain.pem provide the required data. ; We can ignore cert.pem and chain.pem (because those certs are already found in fullchain.pem). ; We need a single .pem file that contains both the private key, the cert, ; and the certs in the chain of authentication. ; Let's combine priveky.pem and fullchain.pem into a single .pem sbPem.i = CkStringBuilder::ckCreate() If sbPem.i = 0 Debug "Failed to create object." ProcedureReturn EndIf success.i = CkStringBuilder::ckLoadFile(sbPem,"qa_data/pem/lets_encrypt/privkey.pem","utf-8") If success = 0 Debug "Failed to load privkey.pem" CkStringBuilder::ckDispose(sbPem) ProcedureReturn EndIf ; To be safe, append a blank line.. CkStringBuilder::ckAppendLine(sbPem,"",0) sbFullChainPem.i = CkStringBuilder::ckCreate() If sbFullChainPem.i = 0 Debug "Failed to create object." ProcedureReturn EndIf success = CkStringBuilder::ckLoadFile(sbFullChainPem,"qa_data/pem/lets_encrypt/fullchain.pem","utf-8") If success = 0 Debug "Failed to load fullchain.pem" CkStringBuilder::ckDispose(sbPem) CkStringBuilder::ckDispose(sbFullChainPem) ProcedureReturn EndIf ; Append the full cert chain PEM to the private key PEM. CkStringBuilder::ckAppendSb(sbPem,sbFullChainPem) ; Load the combined PEM into a Chilkat PFX object. pfx.i = CkPfx::ckCreate() If pfx.i = 0 Debug "Failed to create object." ProcedureReturn EndIf success = CkPfx::ckLoadPem(pfx,CkStringBuilder::ckGetAsString(sbPem),"no password required") If success = 0 Debug CkPfx::ckLastErrorText(pfx) CkStringBuilder::ckDispose(sbPem) CkStringBuilder::ckDispose(sbFullChainPem) CkPfx::ckDispose(pfx) ProcedureReturn EndIf ; Write the PFX w/ a password. pfxPassword.s = "secret" success = CkPfx::ckToFile(pfx,pfxPassword,"qa_output/sample.pfx") If success = 0 Debug CkPfx::ckLastErrorText(pfx) CkStringBuilder::ckDispose(sbPem) CkStringBuilder::ckDispose(sbFullChainPem) CkPfx::ckDispose(pfx) ProcedureReturn EndIf Debug "Success!" CkStringBuilder::ckDispose(sbPem) CkStringBuilder::ckDispose(sbFullChainPem) CkPfx::ckDispose(pfx) ProcedureReturn EndProcedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.