Sua pergunta é ambígua e as respostas são bem diferentes.
Protocolo. A extensão de curvas suportadas na mensagem ClientHello especifica as curvas (padrão / nomeadas ou 'explícitas' GF (2 ^ k) ou GF (p)) que o cliente está disposto a ter o uso do servidor. Se especificar mais de um, o servidor pode escolher qualquer um deles; se especificar um, esse é o único que o servidor pode usar. Se o servidor não suportar a curva ou qualquer curva especificada, a negociação não poderá selecionar nenhum pacote EC e, a menos que outras suítes sejam suportadas e aceitáveis para ambas as extremidades, a negociação falhará.
Ocliente OpenSSL para qualquer servidor até 1.0.1 sempre envia essa extensão para permitir todas as curvas nomeadas (em rfc4492) e nenhuma curva explícita. Exceto que o RedHat (AFAIK ainda?), Nobriga seu OpenSSL apenas para o P-256, P-384 e P-521. 1.0.2 adiciona novas chamadas de API para controlar essa extensão, consulte o link . Então, codifique e construa seu programa cliente contra 1.0.2 * e não no RedHat, ou faça com que quem mantiver seu programa cliente o faça.
Qualquer cliente para servidor OpenSSL para ECDHE. O servidor OpenSSL até 1.0.1 pode ser configurado antes do handshake, para todas as conexões que compartilham um SSL_CTX ou para cada conexão SSL separadamente, com o ECDHE "temporário parâmetros "que é (são?) a curva. Apenas a curva configurada é usada para troca de chaves. Para o ECDHE-ECDSA, a chave pública no cert usado (com sua chave privada correspondente) para autenticar , pode usar uma curva diferente ; essa chave e curva foi escolhida antes de o certificado ser emitido e "aprovado" pela CA e não poder ser alterado agora, enquanto a escolha "temporária" do ECDHE é feita pelo código ou pela configuração do servidor. Se a curva "temp" ou a curva cert quando o certificado é ECC não estiver na lista permitida pelo cliente, o ECDHE ou o ECDHE-ECDSA não poderão ser negociados.
Em vez de configurar antecipadamente, o servidor pode definir um retorno de chamada chamado pela biblioteca OpenSSL para escolher a curva (ou chave) ECDHE para um determinado handshake. Isso deve escolher uma curva aceitável para o cliente, a menos que isso seja inaceitável para o servidor. Novamente para ECDHE-ECDSA, a curva no certificado para autenticação pode ser diferente, já foi escolhida antes da emissão e não pode ser alterada, e se não for aceitável para o cliente não pode ser negociada. Finalmente, novo em 1.0.2 , há uma opção para o OpenSSL escolher automaticamente uma curva ECDHE aceitável para o cliente enquanto "corresponde" à força da autenticação.
No servidor para ECDH estático , a curva (e chave) usada para troca de chaves é a do certificado, que foi escolhida antes do certificado ser emitido e não pode ser alterado. Se essa curva não for aceitável para o cliente, o ECDH não poderá ser negociado.