应用程序使用Delegated Credentials的例子

服务器端代码示例:

#include <openssl/x509.h>

const char *cert_file;
const char *key_file;
const char *dc_file;
const char *dc_key_file;

int main()
{
    SSL *s;
    SSL_CTX *ctx;
    DELEGATED_CREDENTIAL *dc = NULL;

    ctx = SSL_CTX_new(TLS_server_method());
    if (ctx == NULL) {
        // error
    }

    // 设置证书
    if (!SSL_CTX_use_certificate_file(ctx, cert_file, SSL_FILETYPE_PEM)) {
        // error
    }
    // 设置证书的密钥
    if (!SSL_CTX_use_PrivateKey_file(ctx, key_file, SSL_FILETYPE_PEM)) {
        // error
    }

    // 加载DC文件,注意:必须先加载服务端(或客户端)证书,再加载DC
    if (!SSL_CTX_use_dc_file(ctx, cert_file, 0)) {
        // error
    }

    // 加载DC的密钥
    if (!SSL_CTX_use_dc_PrivateKey_file(ctx, key_file, SSL_FILETYPE_PEM)) {
        // error
    }

    //功能:开启dc签名功能,server在开启该功能并收到dc请求时才会选择使用dc进行签名
    SSL_CTX_enable_sign_by_dc(ctx);

    ...

    s = SSL_new(ctx);

    ...

    return 0;
}

客户端代码示例

#include <openssl/x509.h>

const char *cert_file;
const char *key_file;

int main()
{
    SSL *s;
    SSL_CTX *ctx;

    ctx = SSL_CTX_new(TLS_client_method());
    if (ctx == NULL) {
        // error
    }

    // 设置证书
    if (!SSL_CTX_use_certificate_file(ctx, cert_file, SSL_FILETYPE_PEM)) {
        // error
    }
    // 设置证书的密钥
    if (!SSL_CTX_use_PrivateKey_file(ctx, key_file, SSL_FILETYPE_PEM)) {
        // error
    }

    /* 功能:开启dc校验,client在tls握手中会发送dc-request表明自己支持使用dc;
     * 如果服务端支持DC,会在服务器证书扩展中携带DC,使用DC进行后续的身份认证
     */
    SSL_CTX_enable_verify_peer_by_dc(ctx);

    ...

    s = SSL_new(ctx);

    ...

    return 0;
}