Sample code for 30+ languages & platforms
SQL Server

Load .crl, Convert to XML, Get Revoked Serial Numbers and Dates

See more Certificates Examples

Load a binary .crl file (Certificate Revocation List), converts to XML, and then gets the revoked certificate serial numbers and revocation dates.

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

Chilkat SQL Server Downloads

SQL Server
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
    DECLARE @hr int
    -- Important: Do not use nvarchar(max).  See the warning about using nvarchar(max).
    DECLARE @sTmp0 nvarchar(4000)
    DECLARE @success int
    SELECT @success = 0

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

    -- Load a binary .crl file.
    DECLARE @bdCrl int
    EXEC @hr = sp_OACreate 'Chilkat.BinData', @bdCrl OUT
    IF @hr <> 0
    BEGIN
        PRINT 'Failed to create ActiveX component'
        RETURN
    END

    EXEC sp_OAMethod @bdCrl, 'LoadFile', @success OUT, 'qa_data/crl/ca1.crl'
    IF @success <> 1
      BEGIN

        PRINT 'Failed to load CRL file.'
        EXEC @hr = sp_OADestroy @bdCrl
        RETURN
      END

    DECLARE @asn int
    EXEC @hr = sp_OACreate 'Chilkat.Asn', @asn OUT

    EXEC sp_OAMethod @asn, 'LoadBd', @success OUT, @bdCrl
    IF @success <> 1
      BEGIN
        EXEC sp_OAGetProperty @asn, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @bdCrl
        EXEC @hr = sp_OADestroy @asn
        RETURN
      END

    -- Convert ASN.1 to XML and load into xml and re-emit for pretty printing..
    DECLARE @xml int
    EXEC @hr = sp_OACreate 'Chilkat.Xml', @xml OUT

    EXEC sp_OAMethod @asn, 'AsnToXml', @sTmp0 OUT
    EXEC sp_OAMethod @xml, 'LoadXml', @success OUT, @sTmp0
    EXEC sp_OAMethod @xml, 'SaveXml', @success OUT, 'qa_output/crl.xml'

    -- Use this online tool to generate parsing code from CRL XML: 
    -- Generate Parsing Code from XML

    -- Here's code to parse the XML.  This code was generated by the above tool,
    -- and then we modified it by removing unneeded code and changing some names
    DECLARE @i int

    DECLARE @count_i int

    DECLARE @tagPath nvarchar(4000)

    DECLARE @j int

    DECLARE @count_j int

    DECLARE @k int

    DECLARE @count_k int

    DECLARE @revokedCertSerialHex nvarchar(4000)

    DECLARE @dateRevoked nvarchar(4000)

    DECLARE @dt int
    EXEC @hr = sp_OACreate 'Chilkat.CkDateTime', @dt OUT

    SELECT @i = 0
    EXEC sp_OAMethod @xml, 'NumChildrenHavingTag', @count_i OUT, 'sequence'
    WHILE @i < @count_i
      BEGIN
        EXEC sp_OASetProperty @xml, 'I', @i

        SELECT @j = 0
        EXEC sp_OAMethod @xml, 'NumChildrenHavingTag', @count_j OUT, 'sequence[i]|sequence'
        WHILE @j < @count_j
          BEGIN
            EXEC sp_OASetProperty @xml, 'J', @j

            SELECT @k = 0
            EXEC sp_OAMethod @xml, 'NumChildrenHavingTag', @count_k OUT, 'sequence[i]|sequence[j]|sequence'
            WHILE @k < @count_k
              BEGIN
                EXEC sp_OASetProperty @xml, 'K', @k

                -- Get the revoked certificate's serial number in uppercase hex.
                EXEC sp_OAMethod @xml, 'GetChildContent', @revokedCertSerialHex OUT, 'sequence[i]|sequence[j]|sequence[k]|int'

                PRINT 'serial number: ' + @revokedCertSerialHex

                -- Get the date/time revoked.  It will be a string formatted as "YYMMDDhhmmssZ", such as "181023093028Z"
                EXEC sp_OAMethod @xml, 'GetChildContent', @dateRevoked OUT, 'sequence[i]|sequence[j]|sequence[k]|utctime'

                -- Starting in Chilkat v9.5.0.77, date/time strings formatted as YYMMDDhhmmssZ can be parsed as follows:
                EXEC sp_OAMethod @dt, 'SetFromTimestamp', @success OUT, @dateRevoked

                EXEC sp_OAMethod @dt, 'GetAsRfc822', @sTmp0 OUT, 0
                PRINT 'date revoked: ' + @sTmp0

                SELECT @k = @k + 1
              END
            SELECT @j = @j + 1
          END
        SELECT @i = @i + 1
      END

    EXEC @hr = sp_OADestroy @bdCrl
    EXEC @hr = sp_OADestroy @asn
    EXEC @hr = sp_OADestroy @xml
    EXEC @hr = sp_OADestroy @dt


END
GO