Sample code for 30+ languages & platforms
DataFlex

Subject Alternative Name for ICP Brasil Certs

See more Certificates Examples

Demonstrates how to access the multiple names contained in the Subject Alternative Name of a certificate. This example is for an ICP Brasil certificate.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoCert
    String sSubjectAltNameXml
    Handle hoXml
    String sOid
    String sName
    Integer i
    Integer iCount_i
    String sTemp1

    Move False To iSuccess

    Get Create (RefClass(cComChilkatCert)) To hoCert
    If (Not(IsComObjectCreated(hoCert))) Begin
        Send CreateComObject of hoCert
    End

    Get ComLoadFromFile Of hoCert "qa_data/certs/testIcpBrasil.cer" To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoCert To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // If the cert's Subject Alternative Name contains multiple values, each specified by an OID,
    // then the Rfc822Name property returns XML.
    Get ComRfc822Name Of hoCert To sSubjectAltNameXml

    Showln sSubjectAltNameXml

    // Here's a sample of the subjectAltNameXml:

    // <SubjectAltName>
    //     <name type="oid" oid="2.16.76.1.3.4">290999653223955019700000000000000000000150424SRJUXPTS</name>
    //     <name type="oid" oid="2.16.76.1.3.2">JOAO SILVA</name>
    //     <name type="oid" oid="2.16.76.1.3.3">02408939000115</name>
    //     <name type="oid" oid="2.16.76.1.3.7">000000000000</name>
    // </SubjectAltName>

    // The XML can be parsed like this:

    Get Create (RefClass(cComChilkatXml)) To hoXml
    If (Not(IsComObjectCreated(hoXml))) Begin
        Send CreateComObject of hoXml
    End
    Get ComLoadXml Of hoXml sSubjectAltNameXml To iSuccess

    Move 0 To i
    Get ComNumChildrenHavingTag Of hoXml "name" To iCount_i
    While (i < iCount_i)
        Set ComI Of hoXml To i
        Get ComChilkatPath Of hoXml "name[i]|(oid)" To sOid
        Get ComGetChildContent Of hoXml "name[i]" To sName
        Showln sOid ": " sName
        Move (i + 1) To i
    Loop



End_Procedure