Sample code for 30+ languages & platforms
PureBasic

Load a CSR and Get the SANs (Subject Alternative Names)

See more CSR Examples

Demonstrates how to load a Certificate Signing Request (CSR) and get the Subject Alternative Names (if any).

Note: This example requires Chilkat v9.5.0.91 or greater.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkStringTable.pb"
IncludeFile "CkCsr.pb"
IncludeFile "CkFileAccess.pb"

Procedure ChilkatExample()

    success.i = 0

    ; Note: Requires Chilkat v9.5.0.91 or greater.

    ; This requires the Chilkat API to have been previously unlocked.
    ; See Global Unlock Sample for sample code.

    csr.i = CkCsr::ckCreate()
    If csr.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; Load a CSR PEM file.  The file should contain content that looks like this:
    ; 
    ; -----BEGIN CERTIFICATE REQUEST-----
    ; MIIDnzCCAocCAQAwgZ4xFDASBgNVBAMMC2V4YW1wbGUuY29tMRQwEgYDVQQHDAtM
    ; b3MgQW5nZWxlczETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UECgwLRXhhbXBs
    ; ZSBJbmMxFDASBgNVBAsMC1NTTCBTdXBwb3J0MSIwIAYJKoZIhvcNAQkBFhNleGFt
    ; cGxlQGV4YW1wbGUuY29tMQswCQYDVQQGEwJVUzCCASIwDQYJKoZIhvcNAQEBBQAD
    ; ggEPADCCAQoCggEBALhIT/q7y1xwpYaR0Coplktwn7RGaJpEBCgbJWxOVPTGL540
    ; erlhc6MrSEr6fo/HNtAbn6MNWm5F0MwjEU7H1Jxc7DYav+ps3hyhGaK9jalE99Sm
    ; yFOzKMLDPyWTPpxfT4QBO4rpWxMT2lgixDkZlaNqmC6pUGXArfH+H1F3C0gtH4ZU
    ; XN/Ipyk6r6ozWnJvIefdMe1JmeMD3RSoVcXd9bNWSpiD4uJnV+2pewkkNzhcGzBH
    ; MGi4ZjIbpPiYLlri/79fPb6u7wYkYLzCWRKzq6EaJkqY6OQgE33SC1GQKjC/fFRx
    ; wogub1s9cRjfL6vdqWbTJ5xhOkPeBO3UzHBHIksCAwEAAaCBujCBtwYJKoZIhvcN
    ; AQkOMYGpMIGmMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgWgMB0GA1UdJQQWMBQGCCsG
    ; AQUFBwMBBggrBgEFBQcDAjBtBgNVHREEZjBkggtleGFtcGxlLmNvbYIPd3d3LmV4
    ; YW1wbGUuY29tgg9mdHAuZXhhbXBsZS5jb22CD3N2bi5leGFtcGxlLmNvbYIQc210
    ; cC5leGFtcGxlLmNvbYIQaW1hcC5leGFtcGxlLmNvbTANBgkqhkiG9w0BAQsFAAOC
    ; AQEAsIEDMlZViEVtuQWpfa6vUl5RfqQrop+hh9l4UmEOnERLEzyVO+9Kn7jNxyOR
    ; Gg7O9H4BYTfet6YwfpawbnQ1HBexduRZaUnET8RiYgKch0vWr/HbP7jvc23XUz2P
    ; NOAiet/tyTU6U5xJn0H4q1VFIbHjntpBSL+n+aiv8glIUepG8BwTu+vBe2/kVzKG
    ; ro2tudhbpEJYOwurlHCoubhCah9ryIkDeYEnycsrB6VnaxeGK0/5S2JBQo22/F9s
    ; T+q0Gee936ISvypLwNoIX+YFAjw2KnqucUM3RKHAAheJin5WNIQXdHHKGsImapun
    ; VqmPwLN6Kgm+kFVS0H5eyULSnA==
    ; -----END CERTIFICATE REQUEST-----

    fac.i = CkFileAccess::ckCreate()
    If fac.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    csrPem.s = CkFileAccess::ckReadEntireTextFile(fac,"qa_data/csr/myCsr.pem","utf-8")

    success = CkCsr::ckLoadCsrPem(csr,csrPem)
    If success <> 1
        Debug CkCsr::ckLastErrorText(csr)
        CkCsr::ckDispose(csr)
        CkFileAccess::ckDispose(fac)
        ProcedureReturn
    EndIf

    ; Get the SANs
    st.i = CkStringTable::ckCreate()
    If st.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkCsr::ckGetSans(csr,st)
    If success <> 1
        Debug CkCsr::ckLastErrorText(csr)
        CkCsr::ckDispose(csr)
        CkFileAccess::ckDispose(fac)
        CkStringTable::ckDispose(st)
        ProcedureReturn
    EndIf

    i.i = 0
    numSans.i = CkStringTable::ckCount(st)
    While i < numSans
        Debug CkStringTable::ckStringAt(st,i)
        i = i + 1
    Wend


    CkCsr::ckDispose(csr)
    CkFileAccess::ckDispose(fac)
    CkStringTable::ckDispose(st)


    ProcedureReturn
EndProcedure