Sample code for 30+ languages & platforms
B4X Requires Chilkat v11.0.0+

Create JWK Set Containing Certificates

See more Certificates Examples

Demonstrates how to create a JWK Set containing N certificates.

Chilkat B4X Downloads

B4X
Dim success As Boolean = False

'  This example creates the following JWK Set from two certificates:

'  {
'    "keys": [
'      {
'        "kty": "RSA",
'        "use": "sig",
'        "kid": "BB8CeFVqyaGrGNuehJIiL4dfjzw",
'        "x5t": "BB8CeFVqyaGrGNuehJIiL4dfjzw",
'        "n": "nYf1jpn7cFdQ...9Iw",
'        "e": "AQAB",
'        "x5c": [
'          "MIIDBTCCAe2...Z+NTZo"
'        ]
'      },
'      {
'        "kty": "RSA",
'        "use": "sig",
'        "kid": "M6pX7RHoraLsprfJeRCjSxuURhc",
'        "x5t": "M6pX7RHoraLsprfJeRCjSxuURhc",
'        "n": "xHScZMPo8F...EO4QQ",
'        "e": "AQAB",
'        "x5c": [
'          "MIIC8TCCAdmgA...Vt5432GA=="
'        ]
'      }
'    ]
'  }

'  First get two certificates from files.
Dim cert1 As ChilkatCert
cert1.Initialize("cert1")
success = cert1.LoadFromFile("qa_data/certs/brasil_cert.pem")
If success = False Then
    Log(cert1.LastErrorText)
    Return
End If


Dim cert2 As ChilkatCert
cert2.Initialize("cert2")
success = cert2.LoadFromFile("qa_data/certs/testCert.cer")
If success = False Then
    Log(cert2.LastErrorText)
    Return
End If


'  We'll need this crypt object re-encode the SHA1 thumbprint from hex to base64.
Dim crypt As ChilkatCrypt2
crypt.Initialize("crypt")

Dim json As ChilkatJsonObject
json.Initialize

'  Let's begin with the 1st cert:
json.I = 0
json.UpdateString("keys[i].kty", "RSA")
json.UpdateString("keys[i].use", "sig")

Dim hexThumbprint As String = cert1.Sha1Thumbprint
Dim base64Thumbprint As String = crypt.ReEncode(hexThumbprint, "hex", "base64")
json.UpdateString("keys[i].kid", base64Thumbprint)
json.UpdateString("keys[i].x5t", base64Thumbprint)

'  (We're assuming these are RSA certificates)
'  To get the modulus (n) and exponent (e), we need to get the cert's public key and then get its JWK.
Dim pubKey As ChilkatPublicKey
pubKey.Initialize
cert1.GetPublicKey(pubKey)

Dim pubKeyJwk As ChilkatJsonObject
pubKeyJwk.Initialize
pubKeyJwk.Load(pubKey.GetJwk)
json.UpdateString("keys[i].n", pubKeyJwk.StringOf("n"))
json.UpdateString("keys[i].e", pubKeyJwk.StringOf("e"))

'  Now add the entire X.509 certificate 
json.UpdateString("keys[i].x5c[0]", cert1.GetEncoded)

'  Now do the same for cert2..
json.I = 1

json.UpdateString("keys[i].kty", "RSA")
json.UpdateString("keys[i].use", "sig")

hexThumbprint = cert2.Sha1Thumbprint
base64Thumbprint = crypt.ReEncode(hexThumbprint, "hex", "base64")
json.UpdateString("keys[i].kid", base64Thumbprint)
json.UpdateString("keys[i].x5t", base64Thumbprint)
cert2.GetPublicKey(pubKey)

pubKeyJwk.Load(pubKey.GetJwk)
json.UpdateString("keys[i].n", pubKeyJwk.StringOf("n"))
json.UpdateString("keys[i].e", pubKeyJwk.StringOf("e"))

'  Now add the entire X.509 certificate 
json.UpdateString("keys[i].x5c[0]", cert2.GetEncoded)

'  Emit the JSON..
json.EmitCompact = False
Log(json.Emit)