Bug 51075 - Add support for TLS-SRP (RFC 5054)
Summary: Add support for TLS-SRP (RFC 5054)
Status: RESOLVED FIXED
Alias: None
Product: Apache httpd-2
Classification: Unclassified
Component: mod_ssl (show other bugs)
Version: 2.5-HEAD
Hardware: All All
: P2 enhancement (vote)
Target Milestone: ---
Assignee: Apache HTTPD Bugs Mailing List
URL: http://trustedhttp.org/wiki/TLS-SRP_i...
Keywords: FixedInTrunk, PatchAvailable
Depends on:
Blocks:
 
Reported: 2011-04-17 17:29 UTC by Quinn Slack
Modified: 2013-03-03 16:52 UTC (History)
1 user (show)



Attachments
add TLS-SRP (RFC 5054) support to mod_ssl (14.45 KB, patch)
2011-04-17 17:34 UTC, Quinn Slack
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Quinn Slack 2011-04-17 17:29:17 UTC
TLS-SRP (RFC 5054)[1] is an implementation of the Secure Remote Password (SRP)[2] protocol as a key exchange method for TLS. It uses a shared secret derived from a user's password to supplement or replace third-party certificates in setting up a TLS connection.

This patch adds TLS-SRP support to mod_ssl, adds two new directives (SSLSRPVerifierFile and SSLSRPUnknownUserSeed), adds two new SSL env vars (SSL_SRP_USER and SSL_SRP_USERINFO), and includes basic documentation.

The TLS-SRP-specific code uses preprocessor guards on OPENSSL_NO_SRP and is enabled only if OpenSSL >= 1.0.1, which is the first version of OpenSSL that will include SRP support[3]. 

To use this patch:
(1) install OpenSSL 1.0.1;
(2) create an OpenSSL SRP verifier (passwd) file with `openssl srp -srpvfile passwd.srpv -add username`;
(3) specify this file in the server config with: SSLSRPVerifierFile /path/to/passwd.srpv
(4) optionally, for easier testing, force the use of SRP: SSLCipherSuite "!DSS:!aRSA:SRP"

To test the TLS-SRP functionality, use gnutls-cli or a version of cURL with TLS-SRP support:

gnutls-cli --srpusername user --srppasswd secret host
curl --tlsuser user --tlspassword secret -k https://host

TLS-SRP support for Apache is already provided by mod_gnutls[4]. Now that PAKE patents have expired and the security of CAs is increasingly being doubted, TLS-SRP is gaining wider acceptance. GnuTLS, mod_gnutls, and TLSLite have supported it for years; cURL since February; OpenSSL will support it in the next release; and I have also assembled patches[5] for Chrome, Firefox, and NSS.

This patch was originally created by Christophe Renou and Peter Sylvester of EdelWeb. I updated it to work with Apache 2's mod_ssl.


[1] http://tools.ietf.org/html/rfc5054
[2] http://srp.stanford.edu/
[3] http://cvs.openssl.org/chngview?cn=20484
[4] http://trustedhttp.org/wiki/TLS-SRP_in_Apache_mod_gnutls
[5] http://trustedhttp.org/
Comment 1 Quinn Slack 2011-04-17 17:34:00 UTC
Created attachment 26892 [details]
add TLS-SRP (RFC 5054) support to mod_ssl
Comment 2 Stefan Fritsch 2012-06-02 21:51:36 UTC
(In reply to comment #0)
> This patch was originally created by Christophe Renou and Peter Sylvester of
> EdelWeb. I updated it to work with Apache 2's mod_ssl.

You do have permission to submit the patch under the Apache License, don't you?

Some more questions: Is there any documentation for the openssl interface available somewhere? Do you know why SRP_VBASE_init() and SRP_VBASE_new() take char* as argument and not const char*?
Comment 3 Stefan Fritsch 2012-06-08 09:39:55 UTC
Committed as r1347980 to trunk. Thanks for the patch.
Comment 4 Peter Sylvester 2012-09-06 15:46:09 UTC
(In reply to comment #2)
> (In reply to comment #0)
> > This patch was originally created by Christophe Renou and Peter Sylvester of
> > EdelWeb. I updated it to work with Apache 2's mod_ssl.

good. 

> 
> You do have permission to submit the patch under the Apache License, don't
> you?

I hereby confirm that this is the case. 
 
> 
> Some more questions: Is there any documentation for the openssl interface
> available somewhere? Do you know why SRP_VBASE_init() and SRP_VBASE_new()
> take char* as argument and not const char*?

The original version was made before the "const"ification attempts in openssl.

IMO, the srp_vbase stuff should not be used. Instead a dynamic approach, reading
from an LDAP or database can be used to retrieve a verifier. this can be done
without blocking.
Comment 5 Stefan Fritsch 2013-03-03 16:52:50 UTC
fixed in 2.4.4