[PATCH] Add TLS support to Mathopd [Re: Add (alpha) GnuTLS support to Mathopd]
Mr Allwyn Fernandes <[email protected]> Wed, 10 Oct 2007 13:26:05 +1000
| Newsgroups | gmane.network.mathopd |
|---|---|
| Organization | Stobor Pty Ltd |
| Message-ID | <[email protected]> |
--Boundary-00=_NZEDH6aIoKaAlFK Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi again, On Mon, 24 Sep 2007 02:32:13 pm Mr Allwyn Fernandes wrote: > While I usually hold off on sending in patches until they are complete with > documentation and fully tested, this one has been a Wishlist item for > Mathopd for a while, so I thought I'd send it through for anyone to play > with... > > It is a preliminary patch for TLSv1/SSLv3 support for Mathopd 1.5p6, I've updated this patch, and it's somewhat better now: * Can now use either GnuTLS or OpenSSL as your TLS library. * TLS now works even if *_SENDFILE is defined. Sendfile is used for non-TLS sockets, while traditional IO is used for TLS sockets. * There's some documentation for the TLS configuration options. See config.txt and tls.txt. OpenSSL support works, and is functional. OpenSSL CRL support is NOT implemented, because I can't figure out how to make it work yet. GnuTLS support works, and is functional. GnuTLS CRL support is implemented. Please, please specify a DH Params file if you're doing repeated testing. DH params generation at startup can take a long time otherwise... Patch: http://opensource.stobor.net/mathopd/tls.1.5p6.diff (or see attached). As usual, apply using: /tmp/mathopd-1.5p6$ gunzip tls.1.5p6.diff.gz | patch -p1 Further details will follow at http://opensource.stobor.net/mathopd/#TLS As always, if you have any problems, questions or comments, please don't hesitate to get back to me. Cheers, Allwyn. -- Allwyn Fernandes Director Stobor Pty Ltd Mobile: + 61 430 436 758 LinkedIn: http://www.linkedin.com/in/AllwynFernandes --Boundary-00=_NZEDH6aIoKaAlFK Content-Type: application/x-gzip; name="tls.1.5p6.diff.gz" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="tls.1.5p6.diff.gz" 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 H1mnlxKLAAA= --Boundary-00=_NZEDH6aIoKaAlFK--