예제 #1
0
파일: tls_server.c 프로젝트: aosm/postfix
static int ticket_cb(SSL *con, unsigned char name[], unsigned char iv[],
		          EVP_CIPHER_CTX * ctx, HMAC_CTX * hctx, int create)
{
    static const EVP_MD *sha256;
    static const EVP_CIPHER *aes128;
    TLS_TICKET_KEY *key;
    TLS_SESS_STATE *TLScontext = SSL_get_ex_data(con, TLScontext_index);
    int     timeout = ((int) SSL_CTX_get_timeout(SSL_get_SSL_CTX(con))) / 2;

    if ((!sha256 && (sha256 = EVP_sha256()) == 0)
	|| (!aes128 && (aes128 = EVP_aes_128_cbc()) == 0)
	|| (key = tls_mgr_key(create ? 0 : name, timeout)) == 0
	|| (create && RAND_bytes(iv, TLS_TICKET_IVLEN) <= 0))
	return (create ? TLS_TKT_NOKEYS : TLS_TKT_STALE);

    HMAC_Init_ex(hctx, key->hmac, TLS_TICKET_MACLEN, sha256, NOENGINE);

    if (create) {
	EVP_EncryptInit_ex(ctx, aes128, NOENGINE, key->bits, iv);
	memcpy((char *) name, (char *) key->name, TLS_TICKET_NAMELEN);
	if (TLScontext->log_mask & TLS_LOG_CACHE)
	    msg_info("%s: Issuing session ticket, key expiration: %ld",
		     TLScontext->namaddr, (long) key->tout);
    } else {
	EVP_DecryptInit_ex(ctx, aes128, NOENGINE, key->bits, iv);
	if (TLScontext->log_mask & TLS_LOG_CACHE)
	    msg_info("%s: Decrypting session ticket, key expiration: %ld",
		     TLScontext->namaddr, (long) key->tout);
    }
    TLScontext->ticketed = 1;
    return (TLS_TKT_ACCEPT);
}
예제 #2
0
bool SSLSessionCacheManager::storeCacheRecord(const string& sessionId,
        SSL_SESSION* session) {
    std::string sessionString;
    uint32_t sessionLen = i2d_SSL_SESSION(session, nullptr);
    sessionString.resize(sessionLen);
    uint8_t* cp = (uint8_t *)sessionString.data();
    i2d_SSL_SESSION(session, &cp);
    size_t expiration = SSL_CTX_get_timeout(ctx_->getSSLCtx());
    return externalCache_->setAsync(sessionId, sessionString,
                                    std::chrono::seconds(expiration));
}
예제 #3
0
파일: ssl.c 프로젝트: witchu/lua-openssl
static int openssl_ssl_ctx_timeout(lua_State*L)
{
  SSL_CTX* ctx = CHECK_OBJECT(1, SSL_CTX, "openssl.ssl_ctx");
  long t;
  if (!lua_isnoneornil(L, 2))
  {
    t = SSL_CTX_set_timeout(ctx, luaL_checkint(L, 2));
    lua_pushinteger(L, t);
    return 1;
  }
  t = SSL_CTX_get_timeout(ctx);
  lua_pushinteger(L, t);
  return 1;
}
예제 #4
0
long SSLContext::getSessionTimeout() const
{
    assert(_usage == SERVER_USE);

    return SSL_CTX_get_timeout(_sslContext);
}
예제 #5
0
long Context::getSessionTimeout() const
{
	poco_assert (isForServerUse());

	return SSL_CTX_get_timeout(_pSSLContext);
}
예제 #6
0
long SSL_CTX_set_timeout(SSL_CTX *ssl_ctx, long t) { 
                            return SSL_CTX_get_timeout(ssl_ctx); }