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
(Visual FoxPro) Renew a DigiCert Certificate from an EST-enabled profileDemonstrates how to renew a certificate from an EST-enabled profile in DigiCert® Trust Lifecycle Manager. (The certificate must be within the renewal window configured in the certificate profile. The CSR must have same Subject DN values as the original certificate.)
LOCAL loFortuna LOCAL lcEntropy LOCAL lnSuccess LOCAL loEc LOCAL loPrivKey LOCAL loCsr LOCAL loBdCsr LOCAL loHttp LOCAL loTlsClientCert LOCAL loBdTlsClientCertPrivKey LOCAL loTlsClientCertPrivKey LOCAL loResp LOCAL loMyNewCert * This example requires the Chilkat API to have been previously unlocked. * See Global Unlock Sample for sample code. * The example below duplicates the following OpenSSL commands: * * # Name of certificate as argument 1 * * # Make new key * openssl ecparam -name prime256v1 -genkey -noout -out ${1}.key.pem * * # Make csr * openssl req -new -sha256 -key ${1}.key.pem -out ${1}.p10.csr -subj "/CN=${1}" * * # Request new cert * curl -v --cacert data/ca.pem --cert data/${1}.pem --key data/${1}.key.pem * --data-binary @${1}.p10.csr -o ${1}.p7.b64 -H "Content-Type: application/pkcs10" https://clientauth.demo.one.digicert.com/.well-known/est/IOT/simplereenroll * * # Convert to PEM * openssl base64 -d -in ${1}.p7.b64 | openssl pkcs7 -inform DER -outform PEM -print_certs -out ${1}.pem * ------------------------------------------------------------------------------------------------------------------ * Create a Fortuna PRNG and seed it with system entropy. * This will be our source of random data for generating the ECC private key. * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.Prng') loFortuna = CreateObject('Chilkat.Prng') lcEntropy = loFortuna.GetEntropy(32,"base64") lnSuccess = loFortuna.AddEntropy(lcEntropy,"base64") * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.Ecc') loEc = CreateObject('Chilkat.Ecc') * Generate a random EC private key on the prime256v1 curve. loPrivKey = loEc.GenEccKey("prime256v1",loFortuna) IF (loEc.LastMethodSuccess <> 1) THEN ? loEc.LastErrorText RELEASE loFortuna RELEASE loEc CANCEL ENDIF * Create the CSR object and set properties. * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.Csr') loCsr = CreateObject('Chilkat.Csr') * Specify your CN loCsr.CommonName = "mysubdomain.mydomain.com" * Create the CSR using the private key. * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.BinData') loBdCsr = CreateObject('Chilkat.BinData') lnSuccess = loCsr.GenCsrBd(loPrivKey,loBdCsr) IF (lnSuccess = 0) THEN ? loCsr.LastErrorText RELEASE loPrivKey RELEASE loFortuna RELEASE loEc RELEASE loCsr RELEASE loBdCsr CANCEL ENDIF * Save the private key and CSR to files. loPrivKey.SavePkcs8EncryptedPemFile("password","c:/temp/qa_output/ec_privkey.pem") RELEASE loPrivKey loBdCsr.WriteFile("c:/temp/qa_output/csr.pem") * ---------------------------------------------------------------------- * Now do the CURL request to POST the CSR and get the new certificate. * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.Http') loHttp = CreateObject('Chilkat.Http') * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.Cert') loTlsClientCert = CreateObject('Chilkat.Cert') lnSuccess = loTlsClientCert.LoadFromFile("data/myTlsClientCert.pem") IF (lnSuccess = 0) THEN ? loTlsClientCert.LastErrorText RELEASE loFortuna RELEASE loEc RELEASE loCsr RELEASE loBdCsr RELEASE loHttp RELEASE loTlsClientCert CANCEL ENDIF * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.BinData') loBdTlsClientCertPrivKey = CreateObject('Chilkat.BinData') lnSuccess = loBdTlsClientCertPrivKey.LoadFile("data/myTlsClientCert.key.pem") IF (lnSuccess = 0) THEN ? "Failed to load data/myTlsClientCert.key.pem" RELEASE loFortuna RELEASE loEc RELEASE loCsr RELEASE loBdCsr RELEASE loHttp RELEASE loTlsClientCert RELEASE loBdTlsClientCertPrivKey CANCEL ENDIF * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.PrivateKey') loTlsClientCertPrivKey = CreateObject('Chilkat.PrivateKey') lnSuccess = loTlsClientCertPrivKey.LoadAnyFormat(loBdTlsClientCertPrivKey,"") IF (lnSuccess = 0) THEN ? loTlsClientCertPrivKey.LastErrorText RELEASE loFortuna RELEASE loEc RELEASE loCsr RELEASE loBdCsr RELEASE loHttp RELEASE loTlsClientCert RELEASE loBdTlsClientCertPrivKey RELEASE loTlsClientCertPrivKey CANCEL ENDIF lnSuccess = loTlsClientCert.SetPrivateKey(loTlsClientCertPrivKey) IF (lnSuccess = 0) THEN ? loTlsClientCert.LastErrorText RELEASE loFortuna RELEASE loEc RELEASE loCsr RELEASE loBdCsr RELEASE loHttp RELEASE loTlsClientCert RELEASE loBdTlsClientCertPrivKey RELEASE loTlsClientCertPrivKey CANCEL ENDIF loHttp.SetSslClientCert(loTlsClientCert) loHttp.RequireSslCertVerify = 1 * The body of the HTTP request contains the binary CSR. loResp = loHttp.PBinaryBd("POST","https://clientauth.demo.one.digicert.com/.well-known/est/IOT/simplereenroll",loBdCsr,"application/pkcs10",0,0) IF (loHttp.LastMethodSuccess = 0) THEN ? loHttp.LastErrorText RELEASE loFortuna RELEASE loEc RELEASE loCsr RELEASE loBdCsr RELEASE loHttp RELEASE loTlsClientCert RELEASE loBdTlsClientCertPrivKey RELEASE loTlsClientCertPrivKey CANCEL ENDIF IF (loResp.StatusCode <> 200) THEN ? "response status code = " + STR(loResp.StatusCode) ? loResp.BodyStr ? "Failed" RELEASE loResp RELEASE loFortuna RELEASE loEc RELEASE loCsr RELEASE loBdCsr RELEASE loHttp RELEASE loTlsClientCert RELEASE loBdTlsClientCertPrivKey RELEASE loTlsClientCertPrivKey CANCEL ENDIF * The response is the Base64 DER of the new certificate. * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.Cert') loMyNewCert = CreateObject('Chilkat.Cert') lnSuccess = loMyNewCert.LoadFromBase64(loResp.BodyStr) IF (lnSuccess = 0) THEN ? loMyNewCert.LastErrorText ? "Cert data = " + loResp.BodyStr ? "Failed." RELEASE loResp RELEASE loFortuna RELEASE loEc RELEASE loCsr RELEASE loBdCsr RELEASE loHttp RELEASE loTlsClientCert RELEASE loBdTlsClientCertPrivKey RELEASE loTlsClientCertPrivKey RELEASE loMyNewCert CANCEL ENDIF RELEASE loResp lnSuccess = loMyNewCert.SaveToFile("c:/temp/qa_output/myNewCert.cer") IF (lnSuccess = 0) THEN ? loMyNewCert.LastErrorText ? "Failed." RELEASE loFortuna RELEASE loEc RELEASE loCsr RELEASE loBdCsr RELEASE loHttp RELEASE loTlsClientCert RELEASE loBdTlsClientCertPrivKey RELEASE loTlsClientCertPrivKey RELEASE loMyNewCert CANCEL ENDIF ? "Success." RELEASE loFortuna RELEASE loEc RELEASE loCsr RELEASE loBdCsr RELEASE loHttp RELEASE loTlsClientCert RELEASE loBdTlsClientCertPrivKey RELEASE loTlsClientCertPrivKey RELEASE loMyNewCert |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.