Search code examples
opensslcertificateca

Create certificate with QCStatements using OpenSSL


I want to create mock CA and set QCStatements extension, but I can't find any information about setting it using OpenSSL. I was looking about I found some old topics where people looking for this information, but no one answer. Is this possible to set QCStatements using openSSL?


Solution

  • It is possible with pure openssl. You have to create configuration for the signing request with all required qcStatements information and then sing the certificate copying the requested extension.

    Sample configuration file

    [req]
    distinguished_name = req_distinguished_name
    req_extensions = qcStatements
    
    [req_distinguished_name]
    
    [qcStatements]
    1.3.6.1.5.5.7.1.3=ASN1:SEQUENCE:qcStatement
    
    [qcStatement]
    etsiQcsCompliance=SEQUENCE:etsiQcsCompliance
    qcs-QcPDS=SEQUENCE:qcs-QcPDS
    id-qc-statement=SEQUENCE:id-qc-statement
    qcs-QcType=SEQUENCE:qcs-QcType
    [etsiQcsCompliance]
    statementId=OID:0.4.0.1862.1.1
    [qcs-QcPDS]
    statementId=OID:0.4.0.1862.1.5
    QcPDS-List=SEQUENCE:QcPDS-List
    [QcPDS-List]
    QcPDS1=SEQUENCE:QcPDS1
    [QcPDS1]
    url=IA5STRING:https://example.org/pkidisclosure
    description=PRINTABLESTRING:example
    
    [id-qc-statement]
    statementId=OID:0.4.0.19495.2
    statementInfo=SEQUENCE:id-qc-statement-Info
    [id-qc-statement-Info]
    rolesOfPSP=SEQUENCE:rolesOfPSP
    nCAName=UTF8String:Dummy Financial Supervision Authority
    nCAId=UTF8String:XX-DFSA
    [rolesOfPSP]
    PSP_AI=SEQUENCE:PSP_AI
    PSP_AS=SEQUENCE:PSP_AS
    PSP_PI=SEQUENCE:PSP_PI
    PSP_IC=SEQUENCE:PSP_IC
    [PSP_AI]
    roleOfPspOid=OID:0.4.0.19495.1.3
    roleOfPspName=UTF8String:PSP_AI
    [PSP_AS]
    roleOfPspOid=OID:0.4.0.19495.1.1
    roleOfPspName=UTF8String:PSP_AS
    [PSP_PI]
    roleOfPspOid=OID:0.4.0.19495.1.2
    roleOfPspName=UTF8String:PSP_PI
    [PSP_IC]
    roleOfPspOid=OID:0.4.0.19495.1.4
    roleOfPspName=UTF8String:PSP_IC
    [qcs-QcType]
    statementId=OID:0.4.0.1862.1.6
    statementInfo=SEQUENCE:qcs-QcType-Info
    [qcs-QcType-Info]
    qct-esign=OID:0.4.0.1862.1.6.1
    qct-eseal=OID:0.4.0.1862.1.6.2
    qct-web=OID:0.4.0.1862.1.6.3
    
    

    You have to apply configuration to signing request

    openssl req -new -key dummy.key -out dummy.csr -subj /C=XX/CN=dummy -config qcstatements.conf
    

    And then sign with option to copy extensions from request inside CA configuration file.

    copy_extensions = copy