2016-09-21 19 views
2

OpenSSL 라이브러리에서 Client Certificate URLs from RFC 4366이 지원되는지 확인하려고합니다. OpenSSL 설명서에서 정보를 찾을 수 없습니다.클라이언트 인증서 URL에 대한 OpenSSL 지원

파일 tls.h에서 나는 다음과 같은 볼 수있는 정의는 :

/* ExtensionType values from RFC3546/RFC4366/RFC6066 */ 
# define TLSEXT_TYPE_server_name     0 
# define TLSEXT_TYPE_max_fragment_length   1 
# define TLSEXT_TYPE_client_certificate_url  2 
# define TLSEXT_TYPE_trusted_ca_keys    3 
# define TLSEXT_TYPE_truncated_hmac    4 
# define TLSEXT_TYPE_status_request    5 

또한 클라이언트 확장 사용하는 방법이있다 :

int SSL_CTX_add_client_custom_ext(SSL_CTX *ctx, unsigned int ext_type, 
            custom_ext_add_cb add_cb, 
            custom_ext_free_cb free_cb, 
            void *add_arg, 
            custom_ext_parse_cb parse_cb, 
            void *parse_arg); 

I에는 OpenSSL 소스에서 검토 한 결과를하고 TLSEXT_TYPE_client_certificate_url입니다 파일 에서 콜백 지원으로 만 사용 :

void MS_CALLBACK tlsext_cb(SSL *s, int client_server, int type, 
        unsigned char *data, int len, 
        void *arg) 
{ 
    BIO *bio = arg; 
    char *extname; 

    switch(type) 
    { 
    case TLSEXT_TYPE_server_name: 
    extname = "server name"; 
    break; 

    case TLSEXT_TYPE_client_certificate_url: 
    extname = "client certificate URL"; 
    break; 

    (...) 

    default: 
    extname = "unknown"; 
    break; 

    } 

    BIO_printf(bio, "TLS %s extension \"%s\" (id=%d), len=%d\n", 
     client_server ? "server": "client", 
     extname, type, len); 
    BIO_dump(bio, (char *)data, len); 
    (void)BIO_flush(bio); 
} 
,210

내가 TLSEXT_TYPE_server_name를 검색 할 때 나는 TLSEXT_TYPE_server_name 확장이 지원되는 시점에 저를 가져다 파일 t1_lib.c

unsigned char ssl_add_serverhello_tlsext(SSL s, unsigned char *buf, 
              unsigned char *limit) 
{ 
    int extdatalen = 0; 
    unsigned char *orig = buf; 
    unsigned char *ret = buf; 
# ifndef OPENSSL_NO_NEXTPROTONEG 
    int next_proto_neg_seen; 
# endif 

    /* 
    * don't add extensions for SSLv3, unless doing secure renegotiation 
    */ 
    if (s->version == SSL3_VERSION && !s->s3->send_connection_binding) 
     return orig; 

    ret += 2; 
    if (ret >= limit) 
     return NULL;   /this really never occurs, but .../

    if (!s->hit && s->servername_done == 1 
     && s->session->tlsext_hostname != NULL) { 
     if ((long)(limit - ret - 4) < 0) 
      return NULL; 

     s2n(TLSEXT_TYPE_server_name, ret); 
     s2n(0, ret); 

에서이 플래그 예의 사용이 있지만 명확한 정보에 대한 TLSEXT_TYPE_client_certificate_url가없는 볼 수 있습니다.

답변

1

아니요,이 확장 프로그램은 모든 OpenSSL 버전에서 지원되지 않습니다.