forked from OpenVPN/openvpn
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add support for elliptic curve diffie-hellmann key exchange (ECDH)
This patch is based on Jan Just Keijser's patch from Feb 7, 2012. When OpenSSL 1.0.2+ or PolarSSL is used, lets the crypto library do the heavy lifting. For OpenSSL builds, if a user specifies a curve using --ecdh-curve, it first tries to override automatic selection using that curve. For older OpenSSL, tries the following things (in order of preference): * When supplied, use the ecdh curve specified by the user. * Try to extract the curve from the private key, use the same curve. * Fall back on secp384r1 curve. Note that although a curve lookup might succeed, OpenSSL 1.0.0 and older do *not* support TLSv1.1 or TLSv1.2, which means no that no EC-crypto can be used. Signed-off-by: Steffan Karger <steffan@karger.me> Acked-by: Arne Schwabe <arne@rfc2549.org> Message-Id: <53597BEA.6080408@karger.me> URL: http://article.gmane.org/gmane.network.openvpn.devel/8625 Signed-off-by: Gert Doering <gert@greenie.muc.de>
- Loading branch information
Showing
9 changed files
with
229 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
Since 2.4.0, OpenVPN has official support for elliptic curve crypto. Elliptic | ||
curves are an alternative to RSA for asymmetric encryption. | ||
|
||
Elliptic curve crypto ('ECC') can be used for the ('TLS') control channel only | ||
in OpenVPN; the data channel (encrypting the actual network traffic) uses | ||
symmetric encryption. ECC can be used in TLS for authentication (ECDSA) and key | ||
exchange (ECDH). | ||
|
||
Key exchange (ECDH) | ||
------------------- | ||
OpenVPN 2.4.0 and newer automatically initialize ECDH parameters. When ECDSA is | ||
used for authentication, the curve used for the server certificate will be used | ||
for ECDH too. When autodetection fails (e.g. when using RSA certificates) | ||
OpenVPN lets the crypto library decide if possible, or falls back to the | ||
secp384r1 curve. | ||
|
||
An administrator can force an OpenVPN/OpenSSL server to use a specific curve | ||
using the --ecdh-curve <curvename> option with one of the curves listed as | ||
available by the --show-curves option. Clients will use the same curve as | ||
selected by the server. | ||
|
||
Note that not all curves listed by --show-curves are available for use with TLS; | ||
in that case connecting will fail with a 'no shared cipher' TLS error. | ||
|
||
Authentication (ECDSA) | ||
---------------------- | ||
Since OpenVPN 2.4.0, using ECDSA certificates works 'out of the box'. Which | ||
specific curves and cipher suites are available depends on your version and | ||
configuration of the crypto library. The crypto library will automatically | ||
select a cipher suite for the TLS control channel. | ||
|
||
Support for generating an ECDSA certificate chain is available in EasyRSA (in | ||
spite of it's name) since EasyRSA 3.0. The parameters you're looking for are | ||
'--use-algo=ec' and '--curve=<curve_name>'. See the EasyRSA documentation for | ||
more details on generating ECDSA certificates. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters