Class Pem
- All Implemented Interfaces:
AutoCloseable
Load, inspect, assemble, export, and convert PEM certificate and key material.
Chilkat.Pem is the Chilkat class for handling PEM-formatted
certificate and key material. It can load PEM and PKCS#7 data, add
certificates, private keys, public keys, CSRs, and certificate chains,
retrieve individual items, remove content, control PKCS#1 vs. PKCS#8 private
key output, export PEM with optional encryption and extended attributes, and
convert PEM material to PFX or Java KeyStore objects.
Load PEM and PKCS#7
Load PEM-encoded certificates, keys, CSRs, and PKCS#7 certificate data from files, strings, or memory.
Collect certs and keys
Add certificates, private keys, public keys, CSRs, and certificate chains into a single PEM container.
Retrieve individual items
Extract selected certificates, keys, CSRs, or chains for use with
Cert, PrivateKey, PublicKey, or
related Chilkat classes.
Private-key format control
Choose PKCS#1 or PKCS#8 private-key output depending on the format required by the target system.
Encrypted PEM output
Export private-key material with password-based encryption when PEM data must be stored or transferred securely.
Convert to PFX or JKS
Convert PEM certificates and keys into PFX/P12 or Java KeyStore objects when another platform or API requires those container formats.
Common pattern:
Use Pem when certificate and key material is packaged as one or
more PEM blocks. Load the PEM, inspect or retrieve the needed items, add or
remove entries as needed, then export the result as PEM, PFX/P12, or Java
KeyStore data. Use Chilkat.Cert, PrivateKey, and
PublicKey when working directly with individual objects.
For an extended overview, see Pem Class Overview.
</section>
Instances hold a native Chilkat object: close them with ChilkatObject.close() (try-with-resources) when
done; an unclosed instance is freed when it becomes unreachable.
- See Also:
- Online reference
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidAdds a certificate, and potentially the certs in its chain of authentication to the PEM.voidAdds a certificate, private key, public key, or csr to the PEM.voidLoads the PEM from the contents of an PKCS7 container (.p7b) contained inbd.voidaddPrivateKey(PrivateKey privateKey)Adds a private key to the PEM object.voidaddPrivateKey2(PrivateKey privKey, CertChain certChain)Adds a private key and it's associated certificate chain to the PEM object.voidaddPublicKey(PublicKey pubkey)Adds a public key to the PEM object.voidReturns incertthe Nth certificate from the PEM.voidclear()Removes all content from this PEM object.booleanWhen set totrue, each of the Load* methods appends to the current contents of this PEM object.getEncodedItem(String itemType, String itemSubType, String encoding, int index)Returns the encoded contents of the Nth item of a particular type (0-basedindex).intThe interval in milliseconds between eachevent callback, which enables an application to abort certain method calls before they complete.AbortCheckintThe number of certificates in the loaded PEM.intThe number of certificate revocation lists (CRLs) in the loaded PEM.intThe number of certificate signing requests (CSRs) in the loaded PEM.intThe number of private keys in the loaded PEM.intThe number of public keys in the loaded PEM.Controls the format to be used for unencrypted private keys when writing a PEM.Controls the format to be used for public keys when writing a PEM.voidloadP7bFile(String path)Loads the contents of a PKCS7 container (.p7b file).voidLoads the PEM from a PEM string.voidloadPemFile(String path, String password)Loads the PEM from a PEM file.voidprivateKeyAt(int index, PrivateKey privKey)Returns inprivKeythe Nth private key from the PEM.voidpublicKeyAt(int index, PublicKey pubKey)Returns inpubKeythe Nth public key from the PEM.voidremoveCert(int index)Removes the Nth certificate from the PEM.voidremovePrivateKey(int index)Removes the Nth private key from the PEM.voidsetAppendMode(boolean value)Sets theAppendModeproperty; seegetAppendMode().voidsetHeartbeatMs(int value)Sets theHeartbeatMsproperty; seegetHeartbeatMs().voidsetPrivateKeyFormat(String value)Sets thePrivateKeyFormatproperty; seegetPrivateKeyFormat().voidsetPublicKeyFormat(String value)Sets thePublicKeyFormatproperty; seegetPublicKeyFormat().voidtoJksObj(String aliasName, String password, JavaKeyStore jksObj)This function converts this PEM to a Java KeyStore (JKS) object and stores it injksObj.toPem()Write the PFX to a PEM formatted string.toPemEx(boolean extendedAttrs, boolean noKeys, boolean noCerts, boolean noCaCerts, String encryptAlg, String password)Write the PFX to a PEM formatted string.voidConverts this PEM object, which must contain at least one private key, to PKCS12 and returns the PFX inpfxObj.Methods inherited from class com.chilkatsoft.chilkat2.ChilkatObject
close, getDebugLogFilePath, getLastErrorHtml, getLastErrorText, getLastErrorXml, getLastMethodSuccess, getVerboseLogging, getVersion, isClosed, setDebugLogFilePath, setLastMethodSuccess, setVerboseLogging, toString
-
Constructor Details
-
Pem
public Pem()Creates a newPemobject.
-
-
Method Details
-
getAppendMode
public boolean getAppendMode()When set totrue, each of the Load* methods appends to the current contents of this PEM object. When set tofalse, a Load* method replaces the contents of this PEM object. The default isfalse.- Returns:
- the value of the
AppendModeproperty
-
setAppendMode
public void setAppendMode(boolean value)Sets theAppendModeproperty; seegetAppendMode().- Parameters:
value- the new value
-
getHeartbeatMs
public int getHeartbeatMs()The interval in milliseconds between eachevent callback, which enables an application to abort certain method calls before they complete. By default, HeartbeatMs is set toAbortCheck0, meaning no AbortCheck event callbacks will trigger.- Returns:
- the value of the
HeartbeatMsproperty
-
setHeartbeatMs
public void setHeartbeatMs(int value)Sets theHeartbeatMsproperty; seegetHeartbeatMs().- Parameters:
value- the new value
-
getNumCerts
public int getNumCerts()The number of certificates in the loaded PEM. To get the 1st certificate, call GetCert(0).- Returns:
- the value of the
NumCertsproperty (read-only)
-
getNumCrls
public int getNumCrls()The number of certificate revocation lists (CRLs) in the loaded PEM.- Returns:
- the value of the
NumCrlsproperty (read-only)
-
getNumCsrs
public int getNumCsrs()The number of certificate signing requests (CSRs) in the loaded PEM.- Returns:
- the value of the
NumCsrsproperty (read-only)
-
getNumPrivateKeys
public int getNumPrivateKeys()The number of private keys in the loaded PEM. To get the 1st private key, call GetPrivateKey(0).- Returns:
- the value of the
NumPrivateKeysproperty (read-only)
-
getNumPublicKeys
public int getNumPublicKeys()The number of public keys in the loaded PEM. To get the 1st public key, call GetPublicKey(0).- Returns:
- the value of the
NumPublicKeysproperty (read-only)
-
getPrivateKeyFormat
Controls the format to be used for unencrypted private keys when writing a PEM. Possible values arepkcs1andpkcs8. (OpenSSL typically uses thepkcs8format.) When writing encrypted private keys to PEM, the format is always PKCS8, and the PEM header isBEGIN ENCRYPTED PRIVATE KEY. The default ispkcs8.The PKCS1 format uses the PEM header: BEGIN RSA PRIVATE KEY.
The PKCS8 format uses the PEM header: BEGIN PRIVATE KEY.- Returns:
- the value of the
PrivateKeyFormatproperty
-
setPrivateKeyFormat
Sets thePrivateKeyFormatproperty; seegetPrivateKeyFormat().- Parameters:
value- the new value (notnull)
-
getPublicKeyFormat
Controls the format to be used for public keys when writing a PEM. Possible values arepkcs1andpkcs8. (OpenSSL typically uses thepkcs8format.) The default ispkcs8.The PKCS1 format uses the PEM header: BEGIN RSA PUBLIC KEY.
The PKCS8 format uses the PEM header: BEGIN PUBLIC KEY.- Returns:
- the value of the
PublicKeyFormatproperty
-
setPublicKeyFormat
Sets thePublicKeyFormatproperty; seegetPublicKeyFormat().- Parameters:
value- the new value (notnull)
-
addCert
Adds a certificate, and potentially the certs in its chain of authentication to the PEM. IfincludeChainistrue, then certificates in thecert's chain of authentication up to and including the root are automatically added.- Parameters:
cert- thecertargument (notnull)includeChain- theincludeChainargument- Throws:
ChilkatException- if the operation fails;ChilkatException.getLastErrorText()says why
-
addItem
Adds a certificate, private key, public key, or csr to the PEM. The possible values foritemTypearecertificate(orcert),privateKey,publicKey, orcsr. Theencodingcan beBase64,modBase64,Base32,QP(for quoted-printable),URL(for url-encoding),Hex,url_oauth,url_rfc1738,url_rfc2396, andurl_rfc3986. TheitemDatacontains the ASN.1 data in string format according to the encoding specified inencoding.- Parameters:
itemType- theitemTypeargument (notnull)encoding- theencodingargument (notnull)itemData- theitemDataargument (notnull)- Throws:
ChilkatException- if the operation fails;ChilkatException.getLastErrorText()says why
-
addP7b
Loads the PEM from the contents of an PKCS7 container (.p7b) contained inbd.A .p7b (or .p7c) file contains a PKCS#7 container, which may include:
-
One or more X.509 certificates (a certificate chain)
-
Optionally, CRLs (Certificate Revocation Lists)
-
No private key
Common Use: Used to bundle intermediate and root certificates for things like SSL certificate chains.
- Parameters:
bd- thebdargument (notnull)- Throws:
ChilkatException- if the operation fails;ChilkatException.getLastErrorText()says why
-
-
addPrivateKey
Adds a private key to the PEM object.- Parameters:
privateKey- theprivateKeyargument (notnull)- Throws:
ChilkatException- if the operation fails;ChilkatException.getLastErrorText()says why
-
addPrivateKey2
Adds a private key and it's associated certificate chain to the PEM object.- Parameters:
privKey- theprivKeyargument (notnull)certChain- thecertChainargument (notnull)- Throws:
ChilkatException- if the operation fails;ChilkatException.getLastErrorText()says why
-
addPublicKey
Adds a public key to the PEM object.- Parameters:
pubkey- thepubkeyargument (notnull)- Throws:
ChilkatException- if the operation fails;ChilkatException.getLastErrorText()says why
-
certAt
Returns incertthe Nth certificate from the PEM. The first certificate is at index 0.- Parameters:
index- theindexargumentcert- thecertargument (notnull)- Throws:
ChilkatException- if the operation fails;ChilkatException.getLastErrorText()says why
-
clear
public void clear()Removes all content from this PEM object.- Throws:
ChilkatException- if the operation fails;ChilkatException.getLastErrorText()says why
-
getEncodedItem
Returns the encoded contents of the Nth item of a particular type (0-basedindex). The possible values foritemTypearecertificate(orcert),privateKey,publicKey, orcsr. Input string args are case-insensitive. If theitemTypeisprivateKey, theitemSubTypemay bederorpkcs8. If theitemTypeispublicKey, theitemSubTypemay bederorpkcs1. TheitemSubTypeis ignored for other values ofitemType. The validencodingmodes areBase64,modBase64,Base32,Base58,QP(for quoted-printable),URL(for url-encoding),Hex,url_oauth,url_rfc1738,url_rfc2396, andurl_rfc3986.- Parameters:
itemType- theitemTypeargument (notnull)itemSubType- theitemSubTypeargument (notnull)encoding- theencodingargument (notnull)index- theindexargument- Returns:
- the result (never
null) - Throws:
ChilkatException- if the operation fails;ChilkatException.getLastErrorText()says why
-
loadP7bFile
Loads the contents of a PKCS7 container (.p7b file).- Parameters:
path- thepathargument (notnull)- Throws:
ChilkatException- if the operation fails;ChilkatException.getLastErrorText()says why
-
loadPem
Loads the PEM from a PEM string. If encrypted, then thepasswordis required for decryption. Otherwise, an empty string (or any string) may be passed for thepassword.- Parameters:
pemContent- thepemContentargument (notnull)password- thepasswordargument (notnull)- Throws:
ChilkatException- if the operation fails;ChilkatException.getLastErrorText()says why
-
loadPemFile
Loads the PEM from a PEM file. If encrypted, then thepasswordis required for decryption. Otherwise, an empty string (or any string) may be passed for thepassword.- Parameters:
path- thepathargument (notnull)password- thepasswordargument (notnull)- Throws:
ChilkatException- if the operation fails;ChilkatException.getLastErrorText()says why
-
privateKeyAt
Returns inprivKeythe Nth private key from the PEM. The first private key is at index 0.- Parameters:
index- theindexargumentprivKey- theprivKeyargument (notnull)- Throws:
ChilkatException- if the operation fails;ChilkatException.getLastErrorText()says why
-
publicKeyAt
Returns inpubKeythe Nth public key from the PEM. The first public key is at index 0.- Parameters:
index- theindexargumentpubKey- thepubKeyargument (notnull)- Throws:
ChilkatException- if the operation fails;ChilkatException.getLastErrorText()says why
-
removeCert
public void removeCert(int index)Removes the Nth certificate from the PEM. The first certificate is at index 0.- Parameters:
index- theindexargument- Throws:
ChilkatException- if the operation fails;ChilkatException.getLastErrorText()says why
-
removePrivateKey
public void removePrivateKey(int index)Removes the Nth private key from the PEM. The first private key is at index 0.- Parameters:
index- theindexargument- Throws:
ChilkatException- if the operation fails;ChilkatException.getLastErrorText()says why
-
toJksObj
This function converts this PEM to a Java KeyStore (JKS) object and stores it injksObj. IfaliasNameis provided, it will be used as the alias for the first object in the PEM (either a private key or certificate), while subsequent objects will receive autogenerated aliases. The resulting JKS will be encrypted withpassword, unless the PEM contains only certificates, in which casepasswordis not used.- Parameters:
aliasName- thealiasNameargument (notnull)password- thepasswordargument (notnull)jksObj- thejksObjargument (notnull)- Throws:
ChilkatException- if the operation fails;ChilkatException.getLastErrorText()says why
-
toPem
Write the PFX to a PEM formatted string. The resultant PEM will contain the private key, as well as the certs in the chain of authentication (or whatever certs are available in the PFX). For example:-----BEGIN RSA PRIVATE KEY----- ... ... the private key associated with the main certificate. ... -----END RSA PRIVATE KEY----- -----BEGIN CERTIFICATE----- ... ... the main certificate ... -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- ... ... an intermediate CA certificate (if present) ... -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- ... ... the root CA certificate ... -----END CERTIFICATE-----
- Returns:
- the result (never
null) - Throws:
ChilkatException- if the operation fails;ChilkatException.getLastErrorText()says why
-
toPemEx
public String toPemEx(boolean extendedAttrs, boolean noKeys, boolean noCerts, boolean noCaCerts, String encryptAlg, String password)Write the PFX to a PEM formatted string. IfextendedAttrsistrue, then extended properties (Bag Attributes and Key Attributes) are output. IfnoKeysistrue, then no private keys are output. IfnoCertsistrue, then no certificates are output. IfnoCaCertsistrue, then no CA certs or intermediate CA certs are output. IfencryptAlgis not empty, it indicates the encryption algorithm to be used for encrypting the private keys (otherwise the private keys are output unencrypted). The possible choices for theencryptAlgaredes3,aes128,aes192, andaes256. (All encryption algorithm choices use CBC mode.) If the private keys are to be encrypted, thenpasswordis the password to be used. Otherwise,passwordmay be left empty.For example:
Bag Attributes Microsoft Local Key set: <No Values> localKeyID: 01 00 00 00 friendlyName: le-2b09a3d2-9037-4a05-95cc-4d44518e8607 Microsoft CSP Name: Microsoft RSA SChannel Cryptographic Provider Key Attributes X509v3 Key Usage: 10 -----BEGIN RSA PRIVATE KEY----- ... ... the private key associated with the main certificate. ... -----END RSA PRIVATE KEY----- Bag Attributes localKeyID: 01 00 00 00 1.3.6.1.4.1.311.17.3.92: 00 08 00 00 1.3.6.1.4.1.311.17.3.20: C2 53 54 F3 ... 1.3.6.1.4.1.311.17.3.71: 49 00 43 00 ... 1.3.6.1.4.1.311.17.3.75: 31 00 42 00 ... subject=/OU=Domain Control Validated/OU=PositiveSSL/CN=something.com issuer=/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Domain Validation Secure Server CA -----BEGIN CERTIFICATE----- ... ... the main certificate ... -----END CERTIFICATE----- ... -----BEGIN CERTIFICATE----- ... ... an intermediate CA certificate (if present) ... -----END CERTIFICATE----- ... -----BEGIN CERTIFICATE----- ... ... the root CA certificate ... -----END CERTIFICATE------ Parameters:
extendedAttrs- theextendedAttrsargumentnoKeys- thenoKeysargumentnoCerts- thenoCertsargumentnoCaCerts- thenoCaCertsargumentencryptAlg- theencryptAlgargument (notnull)password- thepasswordargument (notnull)- Returns:
- the result (never
null) - Throws:
ChilkatException- if the operation fails;ChilkatException.getLastErrorText()says why
-
toPfxObj
Converts this PEM object, which must contain at least one private key, to PKCS12 and returns the PFX inpfxObj. Typically, a PKCS12 file includes one private key, its associated certificate, and the certificate chain.- Parameters:
pfxObj- thepfxObjargument (notnull)- Throws:
ChilkatException- if the operation fails;ChilkatException.getLastErrorText()says why
-