Ignore:
Timestamp:
Jan 16, 2012 5:05:47 AM (13 years ago)
Author:
nanang
Message:

Close #1014:

  • Added configurable ciphers setting in SIP TLS transport and pjsua app.
  • Added API pj_ssl_cipher_is_supported().
File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/branches/1.x/pjsip-apps/src/pjsua/pjsua_app.c

    r3830 r3942  
    252252    puts  ("  --stun-srv=FORMAT   Set STUN server host or domain. This option may be"); 
    253253    puts  ("                      specified more than once. FORMAT is hostdom[:PORT]"); 
     254 
     255#if defined(PJSIP_HAS_TLS_TRANSPORT) && (PJSIP_HAS_TLS_TRANSPORT != 0) 
    254256    puts  (""); 
    255257    puts  ("TLS Options:"); 
     
    263265    puts  ("  --tls-neg-timeout   Specify TLS negotiation timeout (default=no)"); 
    264266    puts  ("  --tls-srv-name      Specify TLS server name for multihosting server"); 
     267    puts  ("  --tls-cipher        Specify prefered TLS cipher (optional)."); 
     268    puts  ("                      May be specified multiple times"); 
     269#endif 
    265270 
    266271    puts  (""); 
     
    530535           OPT_USE_TLS, OPT_TLS_CA_FILE, OPT_TLS_CERT_FILE, OPT_TLS_PRIV_FILE, 
    531536           OPT_TLS_PASSWORD, OPT_TLS_VERIFY_SERVER, OPT_TLS_VERIFY_CLIENT, 
    532            OPT_TLS_NEG_TIMEOUT, OPT_TLS_SRV_NAME, 
     537           OPT_TLS_NEG_TIMEOUT, OPT_TLS_SRV_NAME, OPT_TLS_CIPHER, 
    533538           OPT_CAPTURE_DEV, OPT_PLAYBACK_DEV, 
    534539           OPT_CAPTURE_LAT, OPT_PLAYBACK_LAT, OPT_NO_TONES, OPT_JB_MAX_SIZE, 
     
    629634        { "duration",   1, 0, OPT_DURATION}, 
    630635        { "thread-cnt", 1, 0, OPT_THREAD_CNT}, 
     636#if defined(PJSIP_HAS_TLS_TRANSPORT) && (PJSIP_HAS_TLS_TRANSPORT != 0) 
    631637        { "use-tls",    0, 0, OPT_USE_TLS},  
    632638        { "tls-ca-file",1, 0, OPT_TLS_CA_FILE}, 
     
    638644        { "tls-neg-timeout", 1, 0, OPT_TLS_NEG_TIMEOUT}, 
    639645        { "tls-srv-name", 1, 0, OPT_TLS_SRV_NAME}, 
     646        { "tls-cipher", 1, 0, OPT_TLS_CIPHER}, 
     647#endif 
    640648        { "capture-dev",    1, 0, OPT_CAPTURE_DEV}, 
    641649        { "playback-dev",   1, 0, OPT_PLAYBACK_DEV}, 
     
    13041312            break; 
    13051313 
     1314#if defined(PJSIP_HAS_TLS_TRANSPORT) && (PJSIP_HAS_TLS_TRANSPORT != 0) 
    13061315        case OPT_USE_TLS: 
    13071316            cfg->use_tls = PJ_TRUE; 
    1308 #if !defined(PJSIP_HAS_TLS_TRANSPORT) || PJSIP_HAS_TLS_TRANSPORT==0 
    1309             PJ_LOG(1,(THIS_FILE, "Error: TLS support is not configured")); 
    1310             return -1; 
    1311 #endif 
    13121317            break; 
    13131318             
    13141319        case OPT_TLS_CA_FILE: 
    13151320            cfg->udp_cfg.tls_setting.ca_list_file = pj_str(pj_optarg); 
    1316 #if !defined(PJSIP_HAS_TLS_TRANSPORT) || PJSIP_HAS_TLS_TRANSPORT==0 
    1317             PJ_LOG(1,(THIS_FILE, "Error: TLS support is not configured")); 
    1318             return -1; 
    1319 #endif 
    13201321            break; 
    13211322             
    13221323        case OPT_TLS_CERT_FILE: 
    13231324            cfg->udp_cfg.tls_setting.cert_file = pj_str(pj_optarg); 
    1324 #if !defined(PJSIP_HAS_TLS_TRANSPORT) || PJSIP_HAS_TLS_TRANSPORT==0 
    1325             PJ_LOG(1,(THIS_FILE, "Error: TLS support is not configured")); 
    1326             return -1; 
    1327 #endif 
    13281325            break; 
    13291326             
     
    13341331        case OPT_TLS_PASSWORD: 
    13351332            cfg->udp_cfg.tls_setting.password = pj_str(pj_optarg); 
    1336 #if !defined(PJSIP_HAS_TLS_TRANSPORT) || PJSIP_HAS_TLS_TRANSPORT==0 
    1337             PJ_LOG(1,(THIS_FILE, "Error: TLS support is not configured")); 
    1338             return -1; 
    1339 #endif 
    13401333            break; 
    13411334 
     
    13561349            cfg->udp_cfg.tls_setting.server_name = pj_str(pj_optarg); 
    13571350            break; 
     1351        case OPT_TLS_CIPHER: 
     1352            { 
     1353                pj_ssl_cipher cipher; 
     1354 
     1355                if (pj_ansi_strnicmp(pj_optarg, "0x", 2) == 0) { 
     1356                    pj_str_t cipher_st = pj_str(pj_optarg + 2); 
     1357                    cipher = pj_strtoul2(&cipher_st, NULL, 16); 
     1358                } else { 
     1359                    cipher = atoi(pj_optarg); 
     1360                } 
     1361 
     1362                if (pj_ssl_cipher_is_supported(cipher)) { 
     1363                    static pj_ssl_cipher tls_ciphers[128]; 
     1364 
     1365                    tls_ciphers[cfg->udp_cfg.tls_setting.ciphers_num++] = cipher; 
     1366                    cfg->udp_cfg.tls_setting.ciphers = tls_ciphers; 
     1367                } else { 
     1368                    pj_ssl_cipher ciphers[128]; 
     1369                    unsigned j, ciphers_cnt; 
     1370 
     1371                    ciphers_cnt = PJ_ARRAY_SIZE(ciphers); 
     1372                    pj_ssl_cipher_get_availables(ciphers, &ciphers_cnt); 
     1373                     
     1374                    PJ_LOG(1,(THIS_FILE, "Cipher \"%s\" is not supported by " 
     1375                                         "TLS/SSL backend.", pj_optarg)); 
     1376                    printf("Available TLS/SSL ciphers (%d):\n", ciphers_cnt); 
     1377                    for (j=0; j<ciphers_cnt; ++j) 
     1378                        printf("- 0x%06X: %s\n", ciphers[j], pj_ssl_cipher_name(ciphers[j])); 
     1379                    return -1; 
     1380                } 
     1381            } 
     1382            break; 
     1383#endif /* PJSIP_HAS_TLS_TRANSPORT */ 
    13581384 
    13591385        case OPT_CAPTURE_DEV: 
     
    17741800    } 
    17751801 
     1802#if defined(PJSIP_HAS_TLS_TRANSPORT) && (PJSIP_HAS_TLS_TRANSPORT != 0) 
    17761803    /* TLS */ 
    17771804    if (config->use_tls) 
     
    18211848        pj_strcat2(&cfg, line); 
    18221849    } 
     1850 
     1851    for (i=0; i<config->udp_cfg.tls_setting.ciphers_num; ++i) { 
     1852        pj_ansi_sprintf(line, "--tls-cipher 0x%06X # %s\n", 
     1853                        config->udp_cfg.tls_setting.ciphers[i], 
     1854                        pj_ssl_cipher_name(config->udp_cfg.tls_setting.ciphers[i])); 
     1855        pj_strcat2(&cfg, line); 
     1856    } 
     1857#endif 
    18231858 
    18241859    pj_strcat2(&cfg, "\n#\n# Media settings:\n#\n"); 
     
    30063041        const char *verif_msgs[32]; 
    30073042        unsigned verif_msg_cnt; 
     3043 
     3044        /* Dump server TLS cipher */ 
     3045        PJ_LOG(4,(THIS_FILE, "TLS cipher used: 0x%06X/%s", 
     3046                  ssl_sock_info->cipher, 
     3047                  pj_ssl_cipher_name(ssl_sock_info->cipher) )); 
    30083048 
    30093049        /* Dump server TLS certificate */ 
Note: See TracChangeset for help on using the changeset viewer.