Ihre Frage ist mehrdeutig und die Antworten sind sehr unterschiedlich.
Protokoll. Die Unterstützungskurvenerweiterung in der ClientHello-Nachricht gibt die Kurven an (Standard / Named oder 'explizite' GF (2 ^ k) oder GF (p)), die der Client für die Verwendung des Servers bereit ist. Wenn mehr als eine angegeben ist, kann der Server eine davon auswählen. Wenn es einen Wert angibt, kann der Server nur diesen verwenden. Wenn der Server die oder eine bestimmte Kurve nicht unterstützt, kann bei der Aushandlung keine EC-Suite ausgewählt werden. Wenn andere Suiten nicht von beiden Seiten unterstützt werden und von beiden Seiten akzeptiert werden, schlägt die Verhandlung fehl.
OpenSSL-Client an einen beliebigen Server über 1.0.1 sendet diese Erweiterung immer, um alle benannten Kurven (in rfc4492) und keine expliziten Kurven zuzulassen. Abgesehen von RedHat (AFAIK noch?) Sind die OpenSSL-Versionen nur für P-256, P-384 und P-521 verfügbar. 1.0.2 fügt neue API-Aufrufe hinzu, um diese Erweiterung zu steuern, siehe https://www.openssl.org/docs/ssl/SSL_CTX_set1_curves_list.html . Entweder Code und Build für Ihr Client-Programm gegen 1.0.2 * und nicht für RedHat, oder holen Sie sich heraus, wer das Client-Programm betreut.
Beliebiger Client an OpenSSL-Server für ECDHE. OpenSSL-Server bis 1.0.1 können vor dem Handshake konfiguriert werden, entweder für alle Verbindungen, die sich eine SSL_CTX teilen, oder für jede SSL-Verbindung separat, mit ECDHE-"temporären Parametern", die die Kurve sind (sind?). Für den Schlüsselaustausch wird nur die konfigurierte Kurve verwendet. Für ECDHE-ECDSA kann der im Authentic (mit dem dazugehörigen privaten Schlüssel) zur Authentifizierung verwendete Zertifikat einen anderen verwendenKurve; Dieser Schlüssel und diese Kurve wurden ausgewählt, bevor das Zertifikat ausgestellt und von der Zertifizierungsstelle "genehmigt" wurde. Sie können jetzt nicht geändert werden, während die "temporäre" ECDHE-Auswahl durch den Servercode oder die Konfiguration getroffen wird. Wenn entweder die "Temp" -Kurve oder die Zertifizierungskurve, wenn das Zertifikat ECC ist, nicht in der vom Client zugelassenen Liste enthalten ist, können ECDHE oder ECDHE-ECDSA nicht ausgehandelt werden.
Anstatt vorab zu konfigurieren, kann der Server einen Rückruf festlegen, der von der OpenSSL-Bibliothek aufgerufen wird, um die ECDHE-Kurve (oder den Schlüssel) für einen bestimmten Handshake auszuwählen. Dies sollte eine Kurve wählen, die für den Client akzeptabel ist, es sei denn, dies ist für den Server nicht akzeptabel. Auch für ECDHE-ECDSA kann die Kurve im Zertifikat für die Authentifizierung anders sein, wurde bereits vor der Ausgabe ausgewählt und kann nicht geändert werden. Wenn dies für den Kunden nicht akzeptabel ist, kann dies nicht ausgehandelt werden. Neu in 1.0.2 ist die Option, dass OpenSSL automatisch eine ECDHE-Kurve auswählen kann, die für den Client akzeptabel ist, während die Authentifizierungsstärke angepasst wird.
Beim Server für statische ECDH ist die Kurve (und der Schlüssel), die für den Schlüsselaustausch verwendet wird, diejenige im Zertifikat, die wie oben vor der Ausstellung des Zertifikats ausgewählt wurde und nicht geändert werden kann. Wenn diese Kurve für den Kunden nicht akzeptabel ist, kann ECDH nicht ausgehandelt werden.