A real world extensions sequence (taken from Google's GAI2).

#-----BEGIN EXTENSIONS-----
SEQUENCE {
  SEQUENCE {
    # authorityKeyIdentifier
    OBJECT_IDENTIFIER { 2.5.29.35 }
    OCTET_STRING {
      SEQUENCE {
        [0 PRIMITIVE] { `c07a98688d89fbab05640c117daa7d65b8cacc4e` }
      }
    }
  }
  SEQUENCE {
    # subjectKeyIdentifier
    OBJECT_IDENTIFIER { 2.5.29.14 }
    OCTET_STRING {
      OCTET_STRING { `4add06161bbcf668b576f581b6bb621aba5a812f` }
    }
  }
  SEQUENCE {
    # keyUsage
    OBJECT_IDENTIFIER { 2.5.29.15 }
    BOOLEAN { `ff` }
    OCTET_STRING {
      BIT_STRING { `0106` }
    }
  }
  SEQUENCE {
    # authorityInfoAccess
    OBJECT_IDENTIFIER { 1.3.6.1.5.5.7.1.1 }
    OCTET_STRING {
      SEQUENCE {
        SEQUENCE {
          # ocsp
          OBJECT_IDENTIFIER { 1.3.6.1.5.5.7.48.1 }
          [6 PRIMITIVE] { "http://g.symcd.com" }
        }
      }
    }
  }
  SEQUENCE {
    # basicConstraints
    OBJECT_IDENTIFIER { 2.5.29.19 }
    BOOLEAN { `ff` }
    OCTET_STRING {
      SEQUENCE {
        BOOLEAN { `ff` }
        INTEGER { 0 }
      }
    }
  }
  SEQUENCE {
    # cRLDistributionPoints
    OBJECT_IDENTIFIER { 2.5.29.31 }
    OCTET_STRING {
      SEQUENCE {
        SEQUENCE {
          [0] {
            [0] {
              [6 PRIMITIVE] { "http://g.symcb.com/crls/gtglobal.crl" }
            }
          }
        }
      }
    }
  }
  SEQUENCE {
    # certificatePolicies
    OBJECT_IDENTIFIER { 2.5.29.32 }
    OCTET_STRING {
      SEQUENCE {
        SEQUENCE {
          OBJECT_IDENTIFIER { 1.3.6.1.4.1.11129.2.5.1 }
        }
      }
    }
  }
}
#-----END EXTENSIONS-----


-----BEGIN CERTIFICATE-----
MIIC8DCCAlmgAwIBAgIJAPuwTC6rEJsMMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMTQwNDIzMjA1MDQwWhcNMTcwNDIyMjA1MDQwWjBFMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYK8imMuRi/03z0K1Zi0WnvfFHvwlYeyK9Na6XJYaUoIDAtB92kWdGMdAQhLciHnAjkXLI6W15OoV3gA/ElRZ1xUpxTMhjP6PyY5wqT5r6y8FxbiiFKKAnHmUcrgfVW28tQ+0rkLGMryRtrukXOgXBv7gcrmU7G1jC2a7WqmeI8QIDAQABo4HnMIHkMB8GA1UdIwQYMBaAFMB6mGiNifurBWQMEX2qfWW4ysxOMB0GA1UdDgQWBBRK3QYWG7z2aLV29YG2u2IaulqBLzAOBgNVHQ8BAf8EBAMCAQYwLgYIKwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJodHRwOi8vZy5zeW1jZC5jb20wEgYDVR0TAQH/BAgwBgEB/wIBADA1BgNVHR8ELjAsMCqgKKAmhiRodHRwOi8vZy5zeW1jYi5jb20vY3Jscy9ndGdsb2JhbC5jcmwwFwYDVR0gBBAwDjAMBgorBgEEAdZ5AgUBMA0GCSqGSIb3DQEBBQUAA4GBADvoeG2V1j1q9xMZLBvCiK4iq/SNMvV8cWfPLdEcwsOH4um+iVzkNKtIkcI/la4rR54leGtPmhCkcv3P9wIMsAoIpFri5XR+ER05YGrJH2nzLmMm3J7va3oK4VRXmKpykXgEfh+PZU0fCxKsnCQPhBQaVS0fu/CdCbIIXFkyZYAm
-----END CERTIFICATE-----
