<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 
  <title>Blog: Ivan Ristić / Apache</title>
  <link type="application/atom+xml" rel="self" href="http://blog.ivanristic.com//atom.xml" />
  <link type="text/html" rel="alternate" href="http://blog.ivanristic.com//" />
  <updated>2026-05-27T13:15:03+01:00</updated>
  <id>http://blog.ivanristic.com//</id>
  <author>
    <name>Ivan Ristić</name>
  </author>

  
  <entry>
    <id>http://blog.ivanristic.com/2013/08/increasing-dhe-strength-on-apache</id>
    <link type="text/html" rel="alternate" href="http://blog.ivanristic.com/2013/08/increasing-dhe-strength-on-apache.html"/>
    <title>Increasing DHE strength on Apache 2.4.x</title>
    <published>2013-08-15T00:00:00+01:00</published>
    <updated>2013-08-15T00:00:00+01:00</updated>
    <author>
      <name>Ivan Ristić</name>
    </author>
    <category term="Apache" />
    <content type="html">&lt;p&gt;&lt;span style=&quot;background-color: #ffffbf&quot;&gt;&lt;b&gt;Update (13 May 2015):&lt;/b&gt; Apache
2.2.30 (not yet released at the time of writing) will also support
configurable DH parameter strength, in the same way Apache 2.4.x does.
&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;background-color: #ffffbf&quot;&gt;&lt;b&gt;Update (26 Nov 2013):&lt;/b&gt; Apache 2.4.7, released today, has been improved
	to automatically select appropriate DH parameters, using the strength of the server key as guidance. Thus, there
is no need to modify the source code any more. The improvements are explained in the &lt;a href=&quot;http://www.apache.org/dist/httpd/CHANGES_2.4.7&quot;&gt;CHANGES&lt;/a&gt; file, and in the
&lt;a href=&quot;http://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcertificatefile&quot;&gt;SSLCertificateFile&lt;/a&gt; documentation.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;background-color: #ffffbf&quot;&gt;&lt;b&gt;Update (18 Oct 2013):&lt;/b&gt; Since I wrote this post, Apache improved
DH parameter handling. The trunk version now automatically selects appropriate DH parameter strength based on the
strength of the private key. The bug report now includes a &lt;a href=&quot;https://issues.apache.org/bugzilla/show_bug.cgi?id=49559#c13&quot;&gt;backport to 2.4.x&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Some users of older versions of the Apache web server, who are trying to
&lt;a href=&quot;/2013/08/configuring-apache-nginx-and-openssl-for-forward-secrecy.html&quot;&gt;get their Forward Secrecy
configuration just right&lt;/a&gt; usually run into a brick wall when they determine that Apache won&apos;t use
Diffie-Hellman parameters stronger than 1024 bits.

&lt;span style=&quot;color: #aaaaaa&quot;&gt;&lt;strike&gt;This is because Apache leaves the business of DH configuration to OpenSSL, and 1024 bits is just
what you get by default (for the stronger suites; the weaker ones use 512
bits).&lt;/strike&gt;&lt;/span&gt;

&lt;/p&gt;

&lt;p&gt;Other web servers expose configuration options that allow you to increase the DH strength, but Apache does not. But, if you went through the hassle of installing Apache from source code (as I described in &lt;a href=&quot;/2013/08/compiling-apache-with-static-openssl.html&quot;&gt;my previous blog post&lt;/a&gt;), there&apos;s an easy fix for this problem. Apache Software Foundation&apos;s &lt;a href=&quot;https://issues.apache.org/bugzilla/show_bug.cgi?id=49559&quot;&gt;bug #49559&lt;/a&gt; (&quot;Patch to add user-specified Diffie-Hellman parameters&quot;) contains a patch that introduces a new configuration directive,
called &lt;code&gt;SSLDHParametersFile&lt;/code&gt;, that adds the missing functionality to Apache httpd 2.4.x.&lt;/p&gt;

&lt;p&gt;The bug is more than 3 years old, even though the code seems straightforward. The latest version of the patch was made against httpd 2.4.2, just over a year ago. I&apos;ve tested it against httpd 2.4.6, and, with a hiccup, it &lt;a href=&quot;https://www.ssllabs.com/ssltest/analyze.html?d=feistyduck.com&quot;&gt;appears to work as advertised&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The hiccup is that the patch won&apos;t compile as-is; a trivial change is required. If you&apos;re a programmer, you&apos;ll have no problem understanding the error and finding the fix from looking at the rest of the &lt;code&gt;mod_ssl&lt;/code&gt; code. And if you don&apos;t want to do even that, you can &lt;a href=&quot;/downloads/patch-49559-for-2.4.6.diff&quot;&gt;download my version&lt;/a&gt;. (Disclaimer: I just made it compile, but didn&apos;t otherwise read or review the code. Use at your own risk.)&lt;/p&gt;

&lt;p&gt;Assuming the starting point is the pristine source code tree of httpd 2.4.6, apply the patch like this:&lt;/p&gt;

&lt;pre&gt;$ cd httpd-2.4.6
$ patch -p1 &amp;lt; /path/to/patch-49559-for-2.4.6.diff
patching file modules/ssl/mod_ssl.c
patching file modules/ssl/ssl_engine_config.c
Hunk #2 succeeded at 189 (offset 6 lines).
Hunk #3 succeeded at 318 (offset 15 lines).
Hunk #4 succeeded at 801 (offset 36 lines).
patching file modules/ssl/ssl_engine_init.c
Hunk #1 succeeded at 994 (offset 44 lines).
Hunk #2 succeeded at 1192 (offset -1 lines).
Hunk #3 succeeded at 1205 (offset -1 lines).
Hunk #4 succeeded at 1769 (offset 20 lines).
patching file modules/ssl/ssl_engine_pphrase.c
patching file modules/ssl/ssl_private.h
Hunk #2 succeeded at 546 (offset 18 lines).
Hunk #3 succeeded at 573 (offset 18 lines).
Hunk #4 succeeded at 744 (offset 28 lines).
patching file modules/ssl/ssl_util_ssl.c
patching file modules/ssl/ssl_util_ssl.h
&lt;/pre&gt;

&lt;p&gt;From here, compile and install &lt;a href=&quot;/2013/08/compiling-apache-with-static-openssl.html&quot;&gt;as usually&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To use stronger DH parameters, you first need to create a special parameter file with the desired strength:&lt;/p&gt;

&lt;pre&gt;$ openssl dhparam -out dh2048.pem 2048&lt;/pre&gt;

&lt;p&gt;The process will take some time and you&apos;ll see lots of output on your screen. (If you&apos;re curious what the various characters mean, &lt;a href=&quot;http://ix-notes.blogspot.co.uk/2009/04/legend-for-openssls-dhparam-output.html&quot;&gt;have a look here&lt;/a&gt;.)
Then you need to add this directive to your Apache configuration:&lt;/p&gt;

&lt;pre&gt;SSLDHParametersFile /path/to/dh2048.pem&lt;/pre&gt;

&lt;p&gt;That&apos;s all. Now you only need to restart the web server and test it using the &lt;a href=&quot;https://www.ssllabs.com/ssltest/&quot;&gt;SSL Labs test&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Update (15 Aug 2013):&lt;/b&gt; As &lt;a href=&quot;https://twitter.com/reschly&quot;&gt;Michael Reschly&lt;/a&gt; reminded me, increasing DH strength can cause interoperability issues. In particular, Java is known not to support DH parameters above 1024 bits. Here&apos;s a &lt;a href=&quot;http://stackoverflow.com/questions/6851461/java-why-does-ssl-handshake-give-could-not-generate-dh-keypair-exception&quot;&gt;Stack Overflow thread&lt;/a&gt; that contains more information.
The issue has been resolved in the (not yet released) Java 8.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Update (19 Aug 2013):&lt;/b&gt; &lt;a href=&quot;https://twitter.com/rmhrisk&quot;&gt;Ryan Hurst&lt;/a&gt; also wanted me to tell you that Windows crypto libraries don&apos;t support DH parameters stronger than 1024 bits. (Windows 8.1 might appears to actually support stronger DHE keys.) The only browser that could be affected by this is Internet Explorer. Other browsers running on Windows use their own crypto, and do not have this limitation. But even with IE users&amp;#8212;as Reschly pointed out via Twitter&amp;#8212;the DH limitation should not be a problem, for two reasons. First, if you configure Forward Secrecy correctly using ECDHE suites (as &lt;a href=&quot;/2013/08/configuring-apache-nginx-and-openssl-for-forward-secrecy.html&quot;&gt;I discussed in my previous post&lt;/a&gt;), IE will always use ECDHE. Second, IE does not support DHE in combination with RSA, and will never negotiate a DHE suite, anyway.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Update (13 May 2015):&lt;/b&gt; The original post incorrectly stated that
Apache supported only 1024-bit DH parameters because it delegated DH
parameter handling to OpenSSL. That is incorrect. The limit was in the &lt;a
href=&quot;https://github.com/apache/httpd/blob/APACHE_2_0_BRANCH/modules/ssl/ssl_engine_dh.c#L56&quot;&gt;Apache
code&lt;/a&gt;. Thanks to Richard Moore for pointing this out.
&lt;/p&gt;

&lt;p&gt;</content>
  </entry>
  
  <entry>
    <id>http://blog.ivanristic.com/2013/08/defending-against-the-breach-attack</id>
    <link type="text/html" rel="alternate" href="http://blog.ivanristic.com/2013/08/defending-against-the-breach-attack.html"/>
    <title>Defending against the BREACH attack</title>
    <published>2013-08-07T00:00:00+01:00</published>
    <updated>2013-08-07T00:00:00+01:00</updated>
    <author>
      <name>Ivan Ristić</name>
    </author>
    <category term="Apache" />
    <content type="html">&lt;p&gt;When &lt;a href=&quot;/2012/09/crime-information-leakage-attack-against-ssl-tls.html&quot;&gt;Juliano and Thai disclosed the CRIME attack last year&lt;/a&gt;, it was clear that the same attack technique could be applied to any other compressed data, and compressed response bodies (via HTTP compression) in particular. But it was also clear that&amp;mdash;with our exploit-driven culture&amp;mdash;browser vendors were not going to do anything about.&lt;/p&gt;

&lt;p&gt;Progress will be made now that there is an exploit to worry about because, this year at Black Hat, a group of researched presented BREACH, a variant of CRIME that works exactly where it hurts the most, on HTTP response bodies. If you&apos;re not already familiar with the attack I suggest that you go to the &lt;a href=&quot;http://www.breachattack.com/&quot;&gt;researchers&apos; web site&lt;/a&gt;, where they have a very nice paper and a set of slides.&lt;/p&gt;

&lt;p&gt;If you don&apos;t want to read the paper right this moment, I will remind you that the CRIME attack works by having the attacker guess some secret text. The trick is to include the guess in the same context as the actual secret (for example, the same response body). When his guess is 100% wrong, the size of the response increases for the size of the guess. But, when the guess is correct (fully, or partially, meaning there is some overlap between the guess and the secret), compression kicks in, and the response body shrinks slightly. With enough guesses and enough time, you can guess anything on the page.&lt;/p&gt;

&lt;p&gt;TLS does not defend against this attack because, when the protocol was originally designed, it was impossible for MITM attackers to submit arbitrary plaintext via victims&apos; browsers. Since then, the threat model evolved, but the protocols remained the same. (Interestingly, there is a draft proposal to deal with this sort of thing at the TLS level: &lt;a href=&quot;http://tools.ietf.org/html/draft-pironti-tls-length-hiding-01&quot;&gt;Length Hiding Padding for the Transport Layer Security Protocol&lt;/a&gt;.)&lt;/p&gt;

&lt;h2&gt;Mitigation&lt;/h2&gt;

&lt;p&gt;Clearly, one option is to address the problem at the TLS level; but that will take some time.&lt;/p&gt;

&lt;p&gt;Outside TLS, the paper itself includes a nice list of mitigation options, and, with exceptions, I am not going to repeat them here. In general, it&apos;s not going to be easy. When dealing with CRIME, we were fortunate because few people knew TLS compression existed, and only a small number of browsers/users actually supported it. This time, the flaw is exploited in a feature that&apos;s not only very widely used, but one which many sites cannot exist without. Just try convincing a large site to turn off compression, at a large financial and performance cost.&lt;/p&gt;

&lt;p&gt;Although most discussions about BREACH will no doubt focus on its threat against CSRF tokens, we should understand that the impact is potentially wider. Any sensitive data contained in responses is under threat. The good news is that session tokens don&apos;t appear to be exposed. However, a well-placed forged CSRF request can do a lot of damage.&lt;/p&gt;

&lt;h3&gt;CSRF token defence&lt;/h3&gt;

&lt;p&gt;For CSRF tokens there is a simple and effective defence, which is to randomize the token by masking it with a different (random) value on every response. The masking does not hide the token (whoever has the token can easily reverse the masking), but it does defeat the attack technique. Guessing is impossible when the secret is changing all the time. Thus, we can expect that most frameworks will adopt this technique. Those who rely on frameworks will only need to upgrade to take advantage of the defence. Those who don&apos;t will have to fix their code.&lt;/p&gt;

&lt;h3&gt;HTTP chunked encoding mitigation&lt;/h3&gt;

&lt;p&gt;The award for least-intrusive and entirely painless mitigation proposal goes to Paul Querna who, on the httpd-dev mailing list, &lt;a href=&quot;http://mail-archives.apache.org/mod_mbox/httpd-dev/201308.mbox/%3CCAMDeyhwCYYQMK+WTfvge7y20AqEB1=kqMHgqKYhr3kBWkZyYzA@mail.gmail.com%3E&quot;&gt;proposed to use the HTTP chunked encoding to randomize response length&lt;/a&gt;. Chunked encoding is a HTTP feature that is typically used when the size of the response body is not known in advance; only the size of the next chunk is known. Because chunks carry some additional information, they affect the size of the response, but not the content. By forcing more chunks than necessary, for example, you can increase the length of the response. To the attacker, who can see only the size of the response body, but not anything else, the chunks are invisible. (Assuming they&apos;re not sent in individual TCP packets or TLS records, of course.)&lt;/p&gt;

&lt;p&gt;This mitigation technique is very easy to implement at the web server level, which makes it the least expensive option. There is only a question about its effectiveness. No one has done the maths yet, but most seem to agree that response length randomization slows down the attacker, but does not prevent the attack entirely. But, if the attack can be slowed down significantly, perhaps it will be as good as prevented. &lt;/p&gt;

&lt;h3&gt;Referer check mitigation&lt;/h3&gt;

&lt;p&gt;A quick, dirty, tricky, and a potentially unreliable mitigation approach you can apply today, is to perform Referer header checks on all incoming requests. Because the attacker cannot inject requests from the web site itself (unless he gains access via XSS, in which case he owns the browser and has no need for further attacks), he must do so from some other web site (a malicious web site, or an innocent site hijacked from a MITM location). In that case, the referrer information will show the request originating from that other web site, and we can easily detect that.&lt;/p&gt;

&lt;p&gt;Now, you can&apos;t just drop such requests (because then no links to your web site would work any more), but you can drop all the cookies before they reach the application. Without the cookies, your application will not resume the victim&apos;s session, and won&apos;t place anything secret in the response. Attack mitigated.&lt;/p&gt;

&lt;p&gt;There is a catch, however (as &lt;a href=&quot;https://twitter.com/hubert3&quot;&gt;Hubert&lt;/a&gt; pointed out to me this morning): if your web site relies on being framed by arbitrary 3rd party web sites, or if it exposes public services to others (for browser consumption), then you can&apos;t use this defence. I am assuming your services need the cookies. If they do not, you&apos;re back in the game. If you do decide to try it, please test your major use cases in a staging environment first.&lt;/p&gt;

&lt;p&gt;You can implement this defence with only two Apache directives (replace &lt;code&gt;www.example.com&lt;/code&gt; with your own domain name):&lt;/p&gt;

&lt;pre&gt;SetEnvIfNoCase Referer ^https://www\.example\.com keep_cookies
RequestHeader unset Cookie env=!keep_cookies&lt;/pre&gt;

&lt;p&gt;The cookies are kept only for requests arriving from the same site. There&apos;s a potential problem with users that follow links from other sites and bookmarks and expect to be logged in straight away (either because they are already logged in, or because your site supports auto-log in). For such users you might need to have a welcome page, where you will ask them to click on a link to enter the web site. The cookies will be sent again on the next request.&lt;/p&gt;

&lt;p&gt;Just to be clear, there is a long history of attacks focusing on spoofing the &lt;code&gt;Referer&lt;/code&gt; header. For example, there was &lt;a href=&quot;http://seclists.org/fulldisclosure/2013/Jul/60&quot;&gt;one such problem in Chrome just recently&lt;/a&gt;. However, such attacks are addressed quickly after discovery. Further, as &lt;a href=&quot;https://twitter.com/kkotowicz&quot;&gt;Krzysztof Kotowicz&lt;/a&gt; pointed out, it is trivial to submit requests that do not contain the &lt;code&gt;Referer&lt;/code&gt; header (read about it &lt;a href=&quot;http://blog.kotowicz.net/2011/10/stripping-referrer-for-fun-and-profit.html&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;http://webstersprodigy.net/2013/02/01/stripping-the-referer-in-a-cross-domain-post-request/&quot;&gt;here&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;To conclude, I can&apos;t really say that I like this approach, but its huge advantage is that you can deploy it very quickly at the web server or reverse proxy level, without having to make any changes to the application code. Even with all the constraints, I imagine there will be a large number of applications for which the trade-offs will be acceptable. &lt;/p&gt;

&lt;h2&gt;We should really fix browsers&lt;/h2&gt;

&lt;p&gt;I would really like to see this problem addressed where it should be addressed&amp;mdash;at the browser level. At the moment, a MITM attacker can intercept your non-encrypted requests, mess with them, and trick your browser into sending requests with arbitrary content to the sites that you care about. It&apos;s this interaction that&apos;s making several very interesting attacks possible: BEAST, CRIME, RC4, and now BREACH.&lt;/p&gt;

&lt;p&gt;A carefully designed opt-in security measure could do the trick, but I suppose it would take a lot of talking and politics to get it implemented. The idea is that a web site can control which other web sites (cross-origins) can initiate requests to it, even if it is via &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; tags.&lt;/p&gt;

&lt;p&gt;Incidentally, just a couple of days ago, Mike Shema and Vaagn Toukharian (fellow Qualys employees), &lt;a href=&quot;http://deadliestwebattacks.com/2013/08/05/blackhat-us-2013-dissecting-csrf/&quot;&gt;proposed a new cookie control&lt;/a&gt; (&lt;em&gt;update: and there is now &lt;a href=&quot;http://deadliestwebattacks.com/2013/08/08/and-they-have-a-plan/&quot;&gt;a follow-up post from Mike&lt;/a&gt;&lt;/em&gt;) that would restrict when cookies are sent. Their intention was to deal with CSRF, but the measure would work against BREACH, too. If a 3rd party web site initiates a request to your web site, against your wishes, being able to tell the browser to drop the cookies would mitigate the potential attacks.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update (8 August 2013): &lt;/strong&gt;The first version of this blog post included a referrer check defence that allowed empty referrers, with the idea to support auto-log in for the users following bookmarks. But then Krzysztof Kotowicz pointed out that the &lt;code&gt;Referer&lt;/code&gt; header can be removed by the attackers. I have now modified the example to drop cookies on all requests not originating from the web site.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update (14 October 2013):&lt;/strong&gt; A better idea for mitigation based on referrer
checking is to selectively disable compression, rather than drop cookies.
This approach comes with a slight performance penalty, but no loss of
functionality. Read the &lt;a
href=&quot;https://community.qualys.com/message/20404#20404&quot;&gt;original discussion thread&lt;/a&gt; for more information how
to achieve this with Apache.&lt;/em&gt;&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <id>http://blog.ivanristic.com/2013/08/configuring-apache-nginx-and-openssl-for-forward-secrecy</id>
    <link type="text/html" rel="alternate" href="http://blog.ivanristic.com/2013/08/configuring-apache-nginx-and-openssl-for-forward-secrecy.html"/>
    <title>Configuring Apache, Nginx, and OpenSSL for Forward Secrecy</title>
    <published>2013-08-05T00:00:00+01:00</published>
    <updated>2013-08-05T00:00:00+01:00</updated>
    <author>
      <name>Ivan Ristić</name>
    </author>
    <category term="Apache" />
    <content type="html">&lt;p&gt;In my &lt;a href=&quot;/2013/06/ssl-labs-deploying-forward-secrecy.html&quot;&gt;earlier blog post&lt;/a&gt;, I gave an overview of Forward Secrecy, as well as some configuration tips. If you&apos;re new to the concept, I suggest that you go and read that post first. This time, I am following up with detailed configuration examples for Apache, Nginx, and OpenSSL.&lt;/p&gt;

&lt;h2&gt;Software Requirements&lt;/h2&gt;

&lt;p&gt;
To deploy Forward Secrecy, you need to have both your web server and the underlying SSL/TLS library support Elliptic Curve (EC) cryptography. For Apache, Nginx, and OpenSSL, the following minimum versions will suffice:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OpenSSL 1.0.1c+
&lt;li&gt;Apache 2.4.x+
&lt;li&gt;nginx 1.0.6+ and 1.1.0+
&lt;/ul&gt;

&lt;p&gt;You will probably want to upgrade to the most recent versions wherever possible, because you don&apos;t want to be running old and obsolete and potentially vulnerable software. If your distribution does not support an acceptable version of one of the components, consider installing everything from scratch, as &lt;a href=&quot;/2013/08/compiling-apache-with-static-openssl.html&quot;&gt;I described in a recent blog post&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;You are probably aware that Linux distributions often ship modified packages. The modifications are usually improvements, but could mean feature removal in some cases. For example, Red Hat appears to have no support for Elliptic Curve crypto on their operating systems, because of &lt;a href=&quot;https://bugzilla.redhat.com/show_bug.cgi?id=319901&quot;&gt;patent issues&lt;/a&gt;. If you&apos;re running CentOS, for example, and wish to support Forward Secrecy, you will need to recompile the key packages to put EC support back in. (There appear to be plenty tutorials on the Web for this.)&lt;/p&gt;

&lt;p&gt;
Once the correct packages are in place, enabling Forward Secrecy requires two steps:
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Configure the web server to actively select suites
&lt;li&gt;Activate the correct OpenSSL suite configuration string
&lt;/ol&gt;

&lt;p&gt;&lt;b&gt;The following configuration advice applies only if you are using compatible software components, as described in the previous section. It is not possible to support Forward Secrecy otherwise.&lt;/b&gt;&lt;/p&gt;

&lt;h2&gt;Apache&lt;/h2&gt;

&lt;p&gt;To configure Apache, you need to have the following lines in your configuration:&lt;/p&gt;

&lt;style&gt;
/* Advice from: http://css-tricks.com/snippets/css/make-pre-text-wrap/ */
pre {
 white-space: pre-wrap;       /* css-3 */
 white-space: -moz-pre-wrap;  /* Mozilla, since 1999 */
 white-space: -pre-wrap;      /* Opera 4-6 */
 white-space: -o-pre-wrap;    /* Opera 7 */
 word-wrap: break-word;       /* Internet Explorer 5.5+ */
}
&lt;/style&gt;

&lt;pre&gt;
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite &quot;EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS&quot;
&lt;/pre&gt;

&lt;h2&gt;Nginx&lt;/h2&gt;

&lt;p&gt;To configure Nginx, you need to have the following lines in your configuration:&lt;/p&gt;

&lt;pre&gt;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers &quot;EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS&quot;;
&lt;/pre&gt;

&lt;h2&gt;RC4 versus BEAST&lt;/h2&gt;

&lt;p&gt;
Today, only TLS 1.2 with GCM suites offer fully robust security. All other suites suffer from one problem or another (e.g, &lt;a href=&quot;http://www.isg.rhul.ac.uk/tls/&quot;&gt;RC4&lt;/a&gt;, &lt;a href=&quot;http://www.isg.rhul.ac.uk/tls/Lucky13.html&quot;&gt;Lucky 13&lt;/a&gt;, &lt;a href=&quot;http://www.educatedguesswork.org/2011/09/security_impact_of_the_rizzodu.html&quot;&gt;BEAST&lt;/a&gt;), but most are difficult to exploit in practice. Because GCM suites are not yet widely supported, most communication today is carried out using one of the slightly flawed cipher suites. It is not possible to do better if you&apos;re running a public web site.
&lt;/p&gt;

&lt;p&gt;
The one choice you can make today is whether to prioritize RC4 in most cases. If you do, you will be safe against the BEAST attack, but vulnerable to the RC4 attacks. On the other hand, if you remove RC4, you will be vulnerable against BEAST, but the risk is quite small. Given that &lt;i&gt;both&lt;/i&gt; issues are relatively small, the choice isn&apos;t clear.
&lt;/p&gt;

&lt;p&gt;
However, the trend is clear. Over time, RC4 attacks are going to get better, and the number of users vulnerable to the BEAST attack is going to get smaller.
&lt;/p&gt;

&lt;h2&gt;Configuring OpenSSL (with RC4)&lt;/h2&gt;

&lt;p&gt;
This configuration assumes you wish to deploy best-possible configuration supporting Forward Secrecy, and that you have a preference for GCM suites (resistant to timing attacks) and RC4 (resistant to BEAST). To achieve best performance, the faster ECDHE suites are used whenever possible.
&lt;/p&gt;

&lt;pre&gt;
EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS
&lt;/pre&gt;

&lt;p&gt;
To see what suites the above configuration string uses, invoke the following command (all one line):
&lt;/p&gt;

&lt;pre&gt;
$ openssl ciphers -V &apos;EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA256 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EDH+aRSA EECDH RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS&apos;
&lt;/pre&gt;

&lt;p&gt;
The output will be similar to this:
&lt;/p&gt;

&lt;pre style=&quot;font-size: 14px&quot;&gt;
ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(256) Mac=AEAD
ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(128) Mac=AEAD
ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(256) Mac=AEAD
ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(128) Mac=AEAD
ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AES(256)  Mac=SHA384
ECDHE-ECDSA-AES128-SHA256 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AES(128)  Mac=SHA256
ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AES(256)  Mac=SHA384
ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AES(128)  Mac=SHA256
ECDHE-RSA-RC4-SHA       SSLv3 Kx=ECDH     Au=RSA  Enc=RC4(128)  Mac=SHA1
ECDHE-RSA-AES256-SHA    SSLv3 Kx=ECDH     Au=RSA  Enc=AES(256)  Mac=SHA1
ECDHE-ECDSA-AES256-SHA  SSLv3 Kx=ECDH     Au=ECDSA Enc=AES(256)  Mac=SHA1
ECDHE-RSA-AES128-SHA    SSLv3 Kx=ECDH     Au=RSA  Enc=AES(128)  Mac=SHA1
ECDHE-ECDSA-AES128-SHA  SSLv3 Kx=ECDH     Au=ECDSA Enc=AES(128)  Mac=SHA1
ECDHE-ECDSA-RC4-SHA     SSLv3 Kx=ECDH     Au=ECDSA Enc=RC4(128)  Mac=SHA1
DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH       Au=RSA  Enc=AESGCM(256) Mac=AEAD
DHE-RSA-AES256-SHA256   TLSv1.2 Kx=DH       Au=RSA  Enc=AES(256)  Mac=SHA256
DHE-RSA-AES256-SHA      SSLv3 Kx=DH       Au=RSA  Enc=AES(256)  Mac=SHA1
DHE-RSA-CAMELLIA256-SHA SSLv3 Kx=DH       Au=RSA  Enc=Camellia(256) Mac=SHA1
DHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=DH       Au=RSA  Enc=AESGCM(128) Mac=AEAD
DHE-RSA-AES128-SHA256   TLSv1.2 Kx=DH       Au=RSA  Enc=AES(128)  Mac=SHA256
DHE-RSA-AES128-SHA      SSLv3 Kx=DH       Au=RSA  Enc=AES(128)  Mac=SHA1
DHE-RSA-SEED-SHA        SSLv3 Kx=DH       Au=RSA  Enc=SEED(128) Mac=SHA1
DHE-RSA-CAMELLIA128-SHA SSLv3 Kx=DH       Au=RSA  Enc=Camellia(128) Mac=SHA1
ECDH-RSA-RC4-SHA        SSLv3 Kx=ECDH/RSA Au=ECDH Enc=RC4(128)  Mac=SHA1
ECDH-ECDSA-RC4-SHA      SSLv3 Kx=ECDH/ECDSA Au=ECDH Enc=RC4(128)  Mac=SHA1
RC4-SHA                 SSLv3 Kx=RSA      Au=RSA  Enc=RC4(128)  Mac=SHA1
&lt;/pre&gt;

&lt;p&gt;If you deploy your configuration, your SSL Labs test results might look like &lt;a href=&quot;https://www.ssllabs.com/ssltest/analyze.html?d=feistyduck.com&quot;&gt;this&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Notes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The list begins with a number of strong TLS 1.2 suites (GCM, SHA256, and SHA384); this helps avoid RC4 whenever possible.
&lt;li&gt;ECDSA suites are preferred to the RSA ones, giving you a performance edge in a dual-certificate deployment scenario.
&lt;li&gt;The main 2 suites (for the current browsers, most of which do not support TLS 1.2) are &lt;code&gt;ECDHE-RSA-RC4-SHA&lt;/code&gt; and &lt;code&gt;ECDHE-ECDSA-RC4-SHA&lt;/code&gt;, used for RSA and ECDSA certificates, respectively.
&lt;li&gt;The DHE suites are there to support those rare browsers that do not support ECDHE. (Opera before version 15 is one such browser. Firefox as shipped on Red Hat systems another.) These suites are slower, but the majority of browsers will offer the faster ECDHE.
&lt;li&gt;The &lt;code&gt;RC4-SHA&lt;/code&gt; suite at the end is there to support IE8 running on Windows XP. (And possibly IE6, but I have not tested for it.)
&lt;/ul&gt;

Issues:
&lt;ul&gt;
&lt;li&gt;Internet Explorer, in all versions, does not support the ECDHE and RC4 combination (which has the benefit of supporting Forward Secrecy and being resistant to BEAST). But IE has long patched the BEAST vulnerability and so we shouldn&apos;t worry about it.
&lt;li&gt;Same comment as above for Firefox on Red Hat systems.
&lt;li&gt;It is impossible to support Forward Secrecy for IE8 running on Windows XP, because this browser does not support the necessary suites. The same is probably true for any IE version running on Windows XP. If you&apos;d rather not handshake with such browsers, add &lt;code&gt;!RC4-SHA&lt;/code&gt; to the configuration.
&lt;/ul&gt;

&lt;h2&gt;Configuring OpenSSL (without RC4)&lt;/h2&gt;

&lt;p&gt;
If you prefer not to use RC4, use the same configuration string (for simplicity), but add &lt;code&gt;!RC4&lt;/code&gt; to the end:
&lt;/p&gt;

&lt;pre&gt;
EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS &lt;b&gt;!RC4&lt;/b&gt;
&lt;/pre&gt;

&lt;p&gt;
Alternatively (in order to support a very wide range of browsers, including the IE versions running on Windows XP), you could deploy with RC4 enabled, but used only as a last resort:

&lt;pre&gt;
EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS &lt;b&gt;+RC4 RC4&lt;/b&gt;
&lt;/pre&gt;

&lt;h2&gt;Final Remarks&lt;/h2&gt;

&lt;p&gt;Finally, consider the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;There&apos;s a vast number of SSL/TLS clients in deployment, each potentially supporting a unique list of cipher suites. It is impossible to guarantee consistent results across such a large user base.
&lt;li&gt;The Handshake Simulation feature of the &lt;a href=&quot;https://www.ssllabs.com/ssltest/&quot;&gt;SSL Labs test&lt;/a&gt; is of great help when choosing cipher suite configuration. It supports a wide range of desktop browsers (including older versions). However, do note that the support for mobile devices is not very good at the moment.
&lt;li&gt;Configuring OpenSSL can be tricky. I recommend reading the (free) &lt;a
href=&quot;https://www.feistyduck.com/books/bulletproof-ssl-and-tls/&quot;&gt;OpenSSL Cookbook&lt;/a&gt;, which describes the configuration in detail.
&lt;/ul&gt;

&lt;p&gt;&lt;b&gt;Update (21 August):&lt;/b&gt; I have tweaked the suite configuration string to position SHA256 and SHA384 suites (which are TLS 1.2-only) after GCM suites and before RC4 suites. This helps avoid RC4 whenever possible. (This matters now because Google Chrome 29 has just been released, and, for the first time, we have a desktop browser that supports TLS 1.2 by default). Of course, I assume that you have upgraded your OpenSSL to 1.0.1d or better in order to fix the timing issues with CBC suites (the so-called &lt;a href=&quot;http://www.isg.rhul.ac.uk/tls/Lucky13.html&quot;&gt;Lucky 13 attack&lt;/a&gt;).&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <id>http://blog.ivanristic.com/2013/08/compiling-apache-with-static-openssl</id>
    <link type="text/html" rel="alternate" href="http://blog.ivanristic.com/2013/08/compiling-apache-with-static-openssl.html"/>
    <title>Compiling Apache with static OpenSSL libraries</title>
    <published>2013-08-03T00:00:00+01:00</published>
    <updated>2013-08-03T00:00:00+01:00</updated>
    <author>
      <name>Ivan Ristić</name>
    </author>
    <category term="Apache" />
    <content type="html">&lt;p&gt;
Back in 2004, when I was writing &lt;a
href=&quot;https://www.feistyduck.com/books/apache-security/&quot;&gt;Apache Security&lt;/a&gt;,
it was quite common to
install Apache from source code, and I spent a lot of time documenting the
process. When the stabilized most people stopped bothering with the source
code and relied on the binaries provided by the operating system.
&lt;/p&gt;

&lt;p&gt;
We&apos;re back into unstable territories. Today, to get the best SSL/TLS
configuration you have to roll your sleeves and do everything the old way. For
example, I have a couple of servers running Ubuntu 10.04 LTS; the OpenSSL
version installed does not support TLS 1.2, and its Apache 2.2.x does not
support the ECDHE suites (which are necessary for Forward Secrecy). If
you&apos;re running an operating that originated at Red Hat, I hear that you &lt;a
href=&quot;https://bugzilla.redhat.com/show_bug.cgi?id=319901&quot;&gt;don&apos;t get any
Elliptic Curve crypto from the default binaries&lt;/a&gt;. 
&lt;/p&gt; 

&lt;p&gt;The easiest way to run Apache with a recent version of OpenSSL is to
compile the crypto code statically, and install everything into a separate
location. That way you achieve the goal, but you don&apos;t mess with the rest of
the operating system.
&lt;/p&gt;

&lt;p&gt;First, you should &lt;a href=&quot;http://www.openssl.org/source/&quot;&gt;get the desired version of
OpenSSL&lt;/a&gt; and install it at a
location where it will not interfere with your system version. I usually
choose &lt;code&gt;/opt&lt;/code&gt; for this purpose.&lt;/p&gt;

&lt;pre&gt;
$ ./config \
    --prefix=/opt/openssl-1.0.1e \
    --openssldir=/opt/openssl-1.0.1e
$ make
$ sudo make install
&lt;/pre&gt;

&lt;p&gt;Now, get the latest &lt;a href=&quot;http://httpd.apache.org/download.cgi&quot;&gt;Apache
2.4.x&lt;/a&gt;, &lt;a href=&quot;https://apr.apache.org/download.cgi&quot;&gt;APR and APR-Util&lt;/a&gt; libraries.
You will need to unpack all three packages into the same source tree, with the
latter two in the location where Apache expects them. For example:&lt;/p&gt;

&lt;pre&gt;
$ tar zxvf httpd-2.4.6.tar.gz
$ cd httpd-2.4.6/srclib/
$ tar zxvf ../../apr-1.4.8.tar.gz
$ ln -s apr-1.4.8/ apr
$ tar zxvf ../../apr-util-1.5.2.tar.gz
$ ln -s apr-util-1.5.2/ apr-util
&lt;/pre&gt;

&lt;p&gt;You are now ready to configure and install Apache. The mod_ssl module
will be compiled statically, with all other modules dynamically.&lt;/p&gt;

&lt;pre&gt;
$ ./configure \
    --prefix=/opt/httpd \
    --with-included-apr \
    --enable-ssl \
    --with-ssl=/opt/openssl-1.0.1e \
    --enable-ssl-staticlib-deps \
    --enable-mods-static=ssl
$ make
$ sudo make install
&lt;/pre&gt;
</content>
  </entry>
  
  <entry>
    <id>http://blog.ivanristic.com/2010/04/apache-security-1ed-now-available-from-feisty-duck</id>
    <link type="text/html" rel="alternate" href="http://blog.ivanristic.com/2010/04/apache-security-1ed-now-available-from-feisty-duck.html"/>
    <title>Apache Security 1ed now available from Feisty Duck</title>
    <published>2010-04-21T00:00:00+01:00</published>
    <updated>2010-04-21T00:00:00+01:00</updated>
    <author>
      <name>Ivan Ristić</name>
    </author>
    <category term="Apache" />
    <content type="html">&lt;p&gt;&lt;a href=&quot;https://www.feistyduck.com/books/apache-security/&quot;&gt;&lt;img
src=&quot;/images/apache-security-1edr-cover-50off.png&quot; width=&quot;208&quot; height=&quot;256&quot; alt=&quot;Apache Security Cover&quot;
border=&quot;0&quot; align=&quot;right&quot; hspace=&quot;10&quot;&gt;&lt;/a&gt;Apache Security was originally published by O&apos;Reilly in 2005,
and it was very well received. Soon after publication, it was heralded as the best Apache security resource, according to many. Contrary to my expectations, it also aged very gracefully, which is probably why it continues to be popular. As much as I wanted to release an update, I struggled for years to justify a second edition. When I finally could, it turned out that O&apos;Reilly was not too keen on the idea.&lt;/p&gt;

&lt;p&gt;[&lt;i&gt;&lt;b&gt;Note:&lt;/b&gt; This blog post contains the entire preface to the digital reprint edition of Apache Security. More information on the book is available from the &lt;a href=&quot;https://www.feistyduck.com/books/apache-security/&quot;&gt;Feisty Duck&apos;s web site.&lt;/a&gt;&lt;/i&gt;]&lt;/p&gt;

&lt;p&gt;That was an opportunity for me to do things differently. As much as I enjoyed working on Apache Security a few years ago, the process was traditional and slow. It was a new digital age and we had all the advanced technology at our fingertips, yet we were still producing books the old-fashioned way. I wanted more. Above all, I wanted the ability to update my books whenever I felt the need. Unable to find a publisher that supported the process I wanted, I started my own publishing company. Feisty Duck, as my wife and I named it, is a publisher of computer books, with special focus on continuous publishing and digital delivery.&lt;/p&gt;

&lt;p&gt;We are now releasing what is pretty much the original Apache Security, in digital format only, in order to establish a starting point for the second edition, which will be published by Feisty Duck at some point in the future. The known errors in the book have been fixed. If further errors are discovered, they will be fixed, too, and the digital version will be updated.&lt;/p&gt;

&lt;p&gt;You may wonder whether the first edition of Apache Security is still worth paying for. After all, it has been five years since the first edition. Here&apos;s what I think:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The only part of the book that is completely obsolete is the ModSecurity chapter. I have only myself to blame for that, because I completely rewrote ModSecurity itself in 2006. If ModSecurity is what you&apos;re after, you should look at my other book, ModSecurity Handbook (Feisty Duck, 2010). You will find more information about it at &lt;a href=&quot;https://www.feistyduck.com&quot;&gt;https://www.feistyduck.com&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Chapter 10, &quot;Web Application Security,&quot; was the best introduction to the topic at the time of the original publication. It remains a good introduction, but there have been many advances and discoveries since it was written. These days, you actually have to read several books to get decent coverage of web application security, and complete coverage is virtually impossible.&lt;/li&gt;
&lt;li&gt;The same can be said for Chapter 11, &quot;Web Security Assessment&quot;: it&apos;s still good, but it&apos;s just not enough any more.&lt;/li&gt;
&lt;li&gt;The rest of the book remains pretty solid. Five years later, some aspects are not entirely accurate, but what is in the book is still very useful. You will find that the general principles of web server security haven&apos;t changed at all.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To conclude, Apache Security is still a good book, although it will no longer serve all audiences equally well. To paraphrase a recent Amazon.com reviewer, if you are at the beginner or intermediate levels, it will work for you. If you are an advanced user, it may not. If you are not sure, the best thing to do is decide by looking at the table of contents.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://blog.ivanristic.com/2009/11/modsecurity-handbook-available-for-pre-order-and-early-access</id>
    <link type="text/html" rel="alternate" href="http://blog.ivanristic.com/2009/11/modsecurity-handbook-available-for-pre-order-and-early-access.html"/>
    <title>ModSecurity Handbook available for pre-order and early access</title>
    <published>2009-11-26T00:00:00+00:00</published>
    <updated>2009-11-26T00:00:00+00:00</updated>
    <author>
      <name>Ivan Ristić</name>
    </author>
    <category term="Apache" />
    <content type="html">&lt;p&gt;&lt;a href=&quot;https://www.feistyduck.com&quot;&gt;&lt;img align=&quot;right&quot; alt=&quot;Modsecurity-handbook-cover&quot;
border=&quot;0&quot; hspace=&quot;15&quot; src=&quot;/images/modsecurity-handbook-cover.gif&quot; style=&quot;padding-left: 15px; padding-bottom: 10px;&quot;
title=&quot;Modsecurity Handbook Cover&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://www.feistyduck.com/&quot;&gt;ModSecurity Handbook&lt;/a&gt;, which
I &lt;a href=&quot;/2009/11/announcing-modsecurity-handbook.html&quot;&gt;announced a couple of days ago&lt;/a&gt;, is now available for pre-order and early digital access. We managed to meet our self-imposed deadline and have everything ready for November 24th, actually.&lt;/p&gt;&lt;p&gt;This book is a big deal, in more ways than one:&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;It took me more than 5 years to gather courage to start writing another book (after &lt;a href=&quot;http://www.apachesecurity.net&quot;&gt;Apache Security&lt;/a&gt;, which I started writing in 2004).&lt;/li&gt;
&lt;li&gt;This book is about &lt;a href=&quot;https://www.modsecurity.org&quot;&gt;ModSecurity&lt;/a&gt;, a project that is very dear to my heart. It makes me very happy that I will document everything I know about it.&lt;/li&gt;
&lt;li&gt;I am releasing the book early because I want to interact with the readers while the content is still not finalised. With Apache Security I ended up being terribly unhappy because I was writing in isolation and because I couldn&amp;#39;t seek feedback from the readers prior to publication.&lt;/li&gt;
&lt;li&gt;To publish this book (and all my subsequent books), my wife and I started a publishing company and dealt with all the stuff that publishers have to deal with. The learning curve wasn&amp;#39;t very difficult because of my previous experience in publishing, but there was a lot of things to do. &lt;/li&gt;
&lt;li&gt;This book will be a living book. I intend to keep it up to date at all times, keeping up with the changes in ModSecurity. We&amp;#39;ve invested a significant amount of time into polishing a single-source publishing system, where the manuscript is kept as XML (DocBook, stored in a Subversion repository) and automatically converted to any of the supported formats (only PDF at the moment, but several forms of PDF, HTML and ePub in the near future). The system allows me to make changes and push updates instantly to all the readers!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The work is far from done, of course. First, I need to finish the book, first of all. Second, we&amp;#39;ll have to figure out how to promote it effectively, and I somehow suspect that will be the hardest part. Perhaps, when it&amp;#39;s all done, I&amp;#39;ll write a blog post called &amp;quot;Adventures in Computer Book Publishing&amp;quot;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; The official &lt;em&gt;Reference Manual&lt;/em&gt; and &lt;em&gt;Data Formats Guide&lt;/em&gt; guide have been added to the book. There&amp;#39;s about 230 pages of material right now, with the final count expected to be close to or over 300.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://blog.ivanristic.com/2009/11/announcing-modsecurity-handbook</id>
    <link type="text/html" rel="alternate" href="http://blog.ivanristic.com/2009/11/announcing-modsecurity-handbook.html"/>
    <title>Announcing ModSecurity Handbook</title>
    <published>2009-11-16T00:00:00+00:00</published>
    <updated>2009-11-16T00:00:00+00:00</updated>
    <author>
      <name>Ivan Ristić</name>
    </author>
    <category term="Apache" />
    <content type="html">&lt;p&gt;&lt;a href=&quot;https://www.feistyduck.com&quot; style=&quot;display: inline;&quot;&gt;&lt;img align=&quot;right&quot;
alt=&quot;Modsecurity-handbook-cover&quot; border=&quot;0&quot; hspace=&quot;15&quot;
src=&quot;/images/modsecurity-handbook-cover.gif&quot; style=&quot;padding-left: 15px; padding-bottom: 10px;&quot; title=&quot;Modsecurity-handbook-cover&quot; /&gt;&lt;/a&gt;It is a pleasure to announce my next book, &lt;a href=&quot;https://www.feistyduck.com&quot;&gt;ModSecurity Handbook&lt;/a&gt;, which features an in-depth coverage of ModSecurity, an open source web application firewall. I am very happy because, &lt;em&gt;finally&lt;/em&gt;, ModSecurity will have the documentation it deserves.&lt;/p&gt;

&lt;p&gt;The main highlights are the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Step-by-step instructions for those just starting out&lt;/li&gt;
&lt;li&gt;Detailed explanations of the internals, and advanced techniques for seasoned users&lt;/li&gt;
&lt;li&gt;Includes the official ModSecurity Reference Manual and Data Formats Guide&lt;/li&gt;
&lt;li&gt;Available in digital format (PDF, HTML and ePub, although not all straight away) and as paperback (once the first edition is complete)&lt;/li&gt;
&lt;li&gt;Continually updated as ModSecurity evolves (with the updates included with purchase)&lt;/li&gt;
&lt;li&gt;Readers can talk to me to shape the book to work better for them&lt;/li&gt;
&lt;/ul&gt;
The complete table of contents is available on the &lt;a href=&quot;https://www.feistyduck.com&quot;&gt;book&amp;#39;s web site&lt;/a&gt;.&lt;br /&gt;
&lt;p&gt;&lt;a href=&quot;https://www.feistyduck.com&quot; style=&quot;display: inline;&quot;&gt;&lt;img align=&quot;left&quot;
alt=&quot;Modsecurity-handbook-screenshot&quot; border=&quot;0&quot;
src=&quot;/images/handbook-homepage-2009-11.png&quot; style=&quot;padding-right: 15px; padding-top: 10px; padding-bottom: 10px;&quot; title=&quot;Modsecurity-handbook-screenshot&quot; /&gt;&lt;/a&gt;I estimate that the book is about 75% complete. In a week&amp;#39;s time (on November 24th) it will be available for early access and pre-order. The idea with the early access is to avoid the problem I experienced with Apache Security -- writing in isolation. This time, I want to engage with my readers &lt;em&gt;before&lt;/em&gt; my book is published.&lt;/p&gt;

&lt;p&gt;Also, it is pretty important that this book is (and will be) continually updated. I have the entire publishing workflow automated so whenever I make a change to the book, the update is automatically made available to the readers. With this feature, again, I want to avoid the painful experience that I had with Apache Security, where for years I wanted to provide updates but I couldn&amp;#39;t. (Apache Security readers, fear not, the second edition is being worked on.) In the future, I hope to evolve the publishing toolchain to enable readers to make comments straight to the HTML version of the book that is kept online.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://blog.ivanristic.com/2009/07/tls-server-name-indication-now-in-apache</id>
    <link type="text/html" rel="alternate" href="http://blog.ivanristic.com/2009/07/tls-server-name-indication-now-in-apache.html"/>
    <title>TLS Server Name Indication now in Apache</title>
    <published>2009-07-29T00:00:00+01:00</published>
    <updated>2009-07-29T00:00:00+01:00</updated>
    <author>
      <name>Ivan Ristić</name>
    </author>
    <category term="Apache" />
    <content type="html">&lt;p&gt;
&lt;a href=&quot;http://httpd.apache.org&quot;&gt;Apache 2.2.12&lt;/a&gt;, which was released yesterday
(see &lt;a href=&quot;http://archive.apache.org/dist/httpd/CHANGES_2.2.12&quot;&gt;the changes&lt;/a&gt;), now supports &lt;a href=&quot;http://en.wikipedia.org/wiki/Server_Name_Indication&quot;&gt;TLS Server Name Indication&lt;/a&gt; (SNI), which is an extension to TLS that makes virtual SSL hosting possible. At the moment, every SSL web site requires a separate IP address and that makes SSL deployment more difficult than it could and should be.&lt;/p&gt;&lt;p&gt;Don&apos;t get your hopes up, though. Although the extension was defined in 2003, the support for it is still very limited. For example, Apache&apos;s adoption means that, for the first time, SNI is supported in a major web server. (For the record, you could have used SNI previously with &lt;code&gt;mod_gnutls&lt;/code&gt;, but &lt;code&gt;mod_gnutls&lt;/code&gt; is not widely used yet.) It is only now that the extension &lt;em&gt;begins&lt;/em&gt; to have a fighting chance.&lt;/p&gt;&lt;p&gt;However, the server-side support is not the main problem, although we are yet going to see it IIS. The lack of client-side SNI support holds it back. Although Internet Explorer supports SNI since 7.0, the fact that it does so only on Vista and more recent versions, means that we will have to wait many years for SNI to become practical.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://blog.ivanristic.com/2009/02/apache-security-model</id>
    <link type="text/html" rel="alternate" href="http://blog.ivanristic.com/2009/02/apache-security-model.html"/>
    <title>Apache Security Model</title>
    <published>2009-02-18T00:00:00+00:00</published>
    <updated>2009-02-18T00:00:00+00:00</updated>
    <author>
      <name>Ivan Ristić</name>
    </author>
    <category term="Apache" />
    <content type="html">&lt;p&gt;The tough part of securing Apache (or anything else, for that matter) is knowing what
you need to defend from. Although my book (&lt;a href=&quot;http://www.apachesecurity.net&quot;&gt;Apache
Security&lt;/a&gt;) enumerates the threats, you need to read through hundreds of pages to learn
about them, and even then it may be difficult to remember them as you need them. I&apos;ve wanted
for a long time to make this process easier and now, finally, here it is: the Apache
Security Model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/downloads/Apache-Security-Model.png&quot;&gt;Apache-Security-Model.png&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At this time the model is only a draft, but I will polish it in the
coming months. It will eventually make an important addition to the
second edition of Apache Security.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://blog.ivanristic.com/2007/06/apache-process-infection</id>
    <link type="text/html" rel="alternate" href="http://blog.ivanristic.com/2007/06/apache-process-infection.html"/>
    <title>Apache process infection</title>
    <published>2007-06-27T00:00:00+01:00</published>
    <updated>2007-06-27T00:00:00+01:00</updated>
    <author>
      <name>Ivan Ristić</name>
    </author>
    <category term="Apache" />
    <content type="html">&lt;p&gt;A very interesting research paper titled &lt;em&gt;Apache Prefork MPM Vulnerabilities&lt;/em&gt; [&lt;a href=&quot;http://security.psnc.pl/files/apache_report.pdf&quot;&gt;PDF&lt;/a&gt;] was released a few days ago, as you can see in the corresponding Bugtraq post. The paper describes, in detail, the dangers of allowing third-parties to run code under the same account as the Apache web server. This normally happens when dynamic content is produced using Apache modules (e.g. PHP) or when CGI scripts are configured to run without suEXEC. This topic itself is not new. You will find several articles on runtime process infection following this Google search link. I warn about this problem throughout my book and especially in Chapter 6, which is dedicated to those situations when more than one party is using the one Apache installation. However, it is one thing to know that something is possible and another to demonstrate, step by step, how it is done. Another interesting finding resulting from this paper is that it is possible to send a SIGUSR1 signal, as root, to any process on the system instead of just to Apache children processes. This is an issue that will have to be fixed in one of the future versions of Apache.&lt;/p&gt;&lt;p&gt;This problem with running code as the same identity as the web server is well understood (and has been for years) among the advanced Apache users. The solution is to always execute CGI scripts through suEXEC and to never allow third parties access to any of the modules. The real problem is that, as with any other product, there are few people who understand Apache inside out (and they can protect themselves) but there also those who are using the technology but do not have the luxury of learning everything there is about it (and there are many legitimate reasons for that).&lt;/p&gt;&lt;p&gt;The solution is obvious. Apache must be safe out of the box! We should dispense with the idea of running things in the same process. Process isolation facilities (either suEXEC or something else) should be installed and running by default on all installations. We can and should make provisions for those who know what they are doing to shoot themselves in the foot, of course. But the only reason to attempt to run things in the same process is performance and I suspect, in this day and age, virtually all users will be happy with the performance of their web server doing things in a secure manner.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://blog.ivanristic.com/2006/08/apache-reverse-proxy-memory-consumption-observations</id>
    <link type="text/html" rel="alternate" href="http://blog.ivanristic.com/2006/08/apache-reverse-proxy-memory-consumption-observations.html"/>
    <title>Apache reverse proxy memory consumption observations</title>
    <published>2006-08-14T00:00:00+01:00</published>
    <updated>2006-08-14T00:00:00+01:00</updated>
    <author>
      <name>Ivan Ristić</name>
    </author>
    <category term="Apache" />
    <content type="html">&lt;p&gt;Last week I spent some time stress-testing Apache 2.2.3 configured to work as a reverse proxy. I discovered (actually, re-discovered would be more accurate) two issues worth sharing:&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;Memory consumption of an Apache process will steadily increase as the number of processed requests rises. This is very easy to see if you send thousands of requests per second, with each request going to the same process. This has to be either a memory leak or a memory fragmentation issue. To deal with this you need to recycle processes before they become too large (and cause the operating system to start swapping). The MaxRequestsPerChild directive is meant to help with this. By setting its value to something other than zero (which means &amp;quot;unlimited&amp;quot;) you are telling Apache to shut down every process that goes over the limit. No problems there. Except that it&amp;#39;s where the second problem comes in.&lt;/li&gt;
&lt;li&gt;The MaxRequestsPerChild directive does not work as the name suggests. Apache does not count requests - it counts *connections*. This creates a problem if you have persistent connections enabled in your configuration - you don&amp;#39;t know how many requests will come over a connection. It is probably safe to assume the number will not be large in most cases but you won&amp;#39;t know if someone will try to abuse this problem and force a large number of requests over a single connection (e.g. by using a specially programmed script). To be on the safe side you need to divide your ideal MaxRequestsPerChild value with the MaxKeepAliveRequests value. This will prevent the Apache processes from growing too large. But there&amp;#39;s a side effect - Apache will now recycle its worker processes more often. As your final step you need to make sure there are enough idle processes around (using&amp;#0160; MinSpareServers) to jump in as soon as an active process goes down. Yo need to have a few of these processes because there is a performance penalty associated with the creation of a new process and because Apache creates new processes at a rate of one every second.&lt;/li&gt;
&lt;/ol&gt;

</content>
  </entry>
  
  <entry>
    <id>http://blog.ivanristic.com/2006/06/apache-security-in-japanese</id>
    <link type="text/html" rel="alternate" href="http://blog.ivanristic.com/2006/06/apache-security-in-japanese.html"/>
    <title>Apache Security in Japanese!</title>
    <published>2006-06-26T00:00:00+01:00</published>
    <updated>2006-06-26T00:00:00+01:00</updated>
    <author>
      <name>Ivan Ristić</name>
    </author>
    <category term="Apache" />
    <content type="html">&lt;p&gt;My book was translated to Japanese and published by O&amp;#39;Reilly Japan! This is, apparently, old news, as they did it back in 2005, but I only found out about it from the three-monthly royalties statement I received in April.&lt;/p&gt;&lt;p&gt;While we are on the subject of writing, I am starting to get the itch again. There are two or three topics I would like to explore further. Topics such as web application firewalls and ModSecurity, web application security, and application security patterns. On the other hand, I have a few compelling reasons against writing another book:&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;It takes a lot of time (time better spent building Thinking Stone into a stronger business).&lt;/li&gt;
&lt;li&gt;It&amp;#39;s lonesome (but this can be dealt with by finding someone to co-author the book with me.&lt;/li&gt;
&lt;li&gt;My hands and arms haven&amp;#39;t fully recovered from the first book. (This one is the most compelling reason of all - I barely managed to finish Apache Security in the first place. If you are using keyboard extensively make sure to read about &lt;a href=&quot;http://www.amazon.com/gp/product/0965510999&quot;&gt;RSI&lt;/a&gt; and always keep &lt;a href=&quot;http://www.workrave.org&quot;&gt;Workrave&lt;/a&gt; active.)&lt;/li&gt;
&lt;/ol&gt;

</content>
  </entry>
  
  <entry>
    <id>http://blog.ivanristic.com/2006/06/apache-suexec-chroot-patch</id>
    <link type="text/html" rel="alternate" href="http://blog.ivanristic.com/2006/06/apache-suexec-chroot-patch.html"/>
    <title>Apache suEXEC chroot patch</title>
    <published>2006-06-23T00:00:00+01:00</published>
    <updated>2006-06-23T00:00:00+01:00</updated>
    <author>
      <name>Ivan Ristić</name>
    </author>
    <category term="Apache" />
    <content type="html">&lt;p&gt;I was recently involved with a project where we needed to configure an Apache server that was intended to run multiple web sites/applications. It&amp;#39;s a pretty common assignment. To ensure the setup is secure I decided to start by creating a separate user account for each application. This allowed me to correctly configure file permissions to allow Apache to serve the static files directly. To take care of the dynamic content, I configured suExec to execute each application&amp;#39;s scripts under its own account. (In case you are wondering, this particular server is fast enough to run the scripts as CGIs. But if process creation becomes a bottleneck we can always seamlessly switch to FastCGI to avoid the performance penalty. Nothing to worry about, then.)&lt;/p&gt;&lt;p&gt;SuExec is a great tool but I&amp;#39;d love it to be capable of jailing (via the chroot system call) the binaries it executes. However, this feature is not present in the stock version. Having been responsible for the internal chroot feature of ModSecurity, I think I have a pretty good idea of why this is the case: unless you know what you&amp;#39;re doing it&amp;#39;s pretty easy to break applications with chroot. And if that happens you are going to ask for help... from those that created the feature, right? Of course! As it turns out, chrooting is notoriously difficult to debug remotely and that&amp;#39;s why the developers would much rather not deal with it.&lt;/p&gt;

&lt;p&gt;But, if do you know your way around feel free to use my suExec chroot patch, which I have just added to the &lt;a
href=&quot;http://sourceforge.net/projects/apache-tools/&quot;&gt;Apache Tools project&lt;/a&gt;. But, please, don&amp;#39;t write to me if it&amp;#39;s not working as you are expecting :)&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <id>http://blog.ivanristic.com/2006/06/jailing-apache-on-windows</id>
    <link type="text/html" rel="alternate" href="http://blog.ivanristic.com/2006/06/jailing-apache-on-windows.html"/>
    <title>Jailing Apache on Windows</title>
    <published>2006-06-13T00:00:00+01:00</published>
    <updated>2006-06-13T00:00:00+01:00</updated>
    <author>
      <name>Ivan Ristić</name>
    </author>
    <category term="Apache" />
    <content type="html">&lt;p&gt;Yury Zaytsev wrote to me recently to tell me about his experiences in jailing Apache on Windows. Although, strictly speaking, Windows does not have the chroot system call or an equivalent it is still possible to do a pretty good job restricting its access to the system, as Yury demonstrates. From his
email:&lt;/p&gt;

&lt;blockquote&gt;&lt;i&gt;
&lt;p&gt;
All you need is to make a local user, say, called &quot;Apache&quot; (you may even set him a password, don&apos;t think that makes any sense, but anyway) and deny him local and network login via group policies. Then you need to explicitly deny this user any access to the local drives (deny just everything: dir listing, read, write, modify etc), that&apos;s done via Properties - Security. Now any process spawned with &quot;Apache&quot;&apos;s rights won&apos;t be able even to LIST the directories.
&lt;p&gt;
    Now you&apos;ve got to grant it the read/list folders access to the Apache Software folder (done via folder properties -&gt; security) and write access to the PID file and log files (hopefully it doesn&apos;t need anything else).
&lt;/p&gt;
&lt;p&gt;
    And the last thing to do is to edit Apache&apos;s system service: you should change it&apos;s privileges via My computer - Manage workstation - Services - Apache from System service to &quot;Apache&quot; user (it might prompt you for the password if you&apos;ve set any).
&lt;/p&gt;
&lt;p&gt;
    Reboot, check that Apache process is running as Apache user via the Task Manager, make sure everything is working fine and you&apos;re done.
&lt;/p&gt;
&lt;p&gt;
    This has also an important positive impact on the scripts security: now even if one manages to hack your poorly coded PHP/Perl script, since PHP/Perl is run via SAPI/mod_perl it couldn&apos;t list folders above Apache&apos;s root and even change any files you haven&apos;t allowed it explicitly inside Apache&apos;s root.
&lt;/p&gt;
&lt;p&gt;
    As you may see from above, my method is a complete rip off the Unix chroot (and chmod, he-he) technology. It&apos;s primitive and efficient (..er how efficient a Windows server can be comparing to Unixes?) Anyway it really saved my butt several times the script kiddies managed to exploit vulnerable PHP scripts.
&lt;/p&gt;
&lt;/i&gt;&lt;/blockquote&gt;
</content>
  </entry>
  
  <entry>
    <id>http://blog.ivanristic.com/2006/03/apache-security-one-year-after</id>
    <link type="text/html" rel="alternate" href="http://blog.ivanristic.com/2006/03/apache-security-one-year-after.html"/>
    <title>Apache Security one year after</title>
    <published>2006-03-27T00:00:00+01:00</published>
    <updated>2006-03-27T00:00:00+01:00</updated>
    <author>
      <name>Ivan Ristić</name>
    </author>
    <category term="Apache" />
    <content type="html">&lt;p&gt;It&amp;#39;s been exactly one year since my book, Apache Security, was published. I was very glad to learn Amazon.com is now enabling book authors to talk to their audience. It is unfortunate this feature did not exist at the time - I would have loved the opportunity to point those looking at this page to the book&amp;#39;s web site - &lt;a href=&quot;http://www.apachesecurity.net&quot;&gt;www.apachesecurity.net&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;I have always believed publication is just a first step in the life of a book (a long step in my case, as I spent eight months writing), and that the best stuff comes only after a book has been in use for a year or two. Let&amp;#39;s face it, we (the authors) don&amp;#39;t know nearly as much as our collective readership does. Therefore I invite you, the reader, to send me your feedback and make the second edition of Apache Security much better!&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://blog.ivanristic.com/2005/09/apache-programming-book-on-the-way</id>
    <link type="text/html" rel="alternate" href="http://blog.ivanristic.com/2005/09/apache-programming-book-on-the-way.html"/>
    <title>Apache programming book on the way!</title>
    <published>2005-09-12T00:00:00+01:00</published>
    <updated>2005-09-12T00:00:00+01:00</updated>
    <author>
      <name>Ivan Ristić</name>
    </author>
    <category term="Apache" />
    <content type="html">&lt;p&gt;I have been involved with Apache programming for several years now. During this time I&amp;#39;ve been following the main Apache development list and the module programming one. This is how I got to meet &lt;a href=&quot;http://www.webthing.com&quot;&gt;Nick Kew&lt;/a&gt;, probably the most helpful person on these two lists. (Perhaps on other lists too, but I only follow these two.) Rumours that Nick is writing a book (spread by the author himself) have been circulating for many months now. I am happy to say this is now official; Nick&amp;#39;s book, &lt;em&gt;Apache Programming&lt;/em&gt; (I am not sure if this is the official title or not) will be published by Prentice Hall in their &lt;a href=&quot;http://www.phptr.com/series/series.asp?st=44315&quot;&gt;Open Source Series&lt;/a&gt;. Nick has been kind to invite me to help him as a technical reviewer. This is great news for the Apache community! Apache is a fantastic web server but its growth is being slowed down by the lack of proper documentation for programmers. I only wish I had this book a couple of years back when I was starting with ModSecurity!&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://blog.ivanristic.com/2005/09/apache-2-1-7-beta-released</id>
    <link type="text/html" rel="alternate" href="http://blog.ivanristic.com/2005/09/apache-2-1-7-beta-released.html"/>
    <title>Apache 2.1.7 Beta released</title>
    <published>2005-09-12T00:00:00+01:00</published>
    <updated>2005-09-12T00:00:00+01:00</updated>
    <author>
      <name>Ivan Ristić</name>
    </author>
    <category term="Apache" />
    <content type="html">&lt;p&gt;A new beta version of the Apache web server has been released. This release is important because it is a beta version in the 2.1.x development branch, meaning Apache is one step closer to an official 2.2 version. The most important changes are the refactoring of the authentication/authorisation backend, faster and better caching support, and the much improved mod_proxy with support for load balancing.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://blog.ivanristic.com/2005/06/the-php-chapter-from-apache-security-available-for-download</id>
    <link type="text/html" rel="alternate" href="http://blog.ivanristic.com/2005/06/the-php-chapter-from-apache-security-available-for-download.html"/>
    <title>The PHP chapter from Apache Security available for download</title>
    <published>2005-06-13T00:00:00+01:00</published>
    <updated>2005-06-13T00:00:00+01:00</updated>
    <author>
      <name>Ivan Ristić</name>
    </author>
    <category term="Apache" />
    <content type="html">&lt;p&gt;I have made the PHP chapter from Apache Security available for free download. When we made the decision to set the installation and configuration chapter free, several months ago, I did not realise this chapter only told one half of the story. Most people need to configure Apache *and* PHP. This is now fixed, and the two chapters together make a valuable resource. My long-term plans are to convert both chapters to DocBook, keep them up-to-date, and publish them as PDF and as HTML. But not yet--the content is still very fresh!&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://blog.ivanristic.com/2005/04/the-public-life-of-apache-security-begins</id>
    <link type="text/html" rel="alternate" href="http://blog.ivanristic.com/2005/04/the-public-life-of-apache-security-begins.html"/>
    <title>The public life of Apache Security begins</title>
    <published>2005-04-26T00:00:00+01:00</published>
    <updated>2005-04-26T00:00:00+01:00</updated>
    <author>
      <name>Ivan Ristić</name>
    </author>
    <category term="Apache" />
    <content type="html">&lt;p&gt;My book, Apache Security, is finally out, after a year and a half of hard labour. I began talking to the publisher in the summer of 2003, and began research shortly after. I began writing in March 2004 and finished in December 2004. O&amp;#39;Reilly had it in stock on March 1st 2005, but it only become widely available in late March.&lt;/p&gt;&lt;p&gt;The work itself was great fun. It is a great privilege to be able to explore the boundaries of your own knowledge in detail. I did have periods of despair, of course. But I was prepared for them from reading blog entries of other book writers. I knew how difficult it was going to be. The biggest challenge I had was deciding what to cover, and what to leave out. It was never going to be a book for absolute beginners (officially, it&amp;#39;s an &amp;quot;intermediate to advanced&amp;quot; type of book) but I didn&amp;#39;t want to write a book that would be understood only by a few people who are already Apache experts. On an another level, it was also not possible to look at the security of the Apache web server in isolation. A book that pretends to provide &amp;quot;everything you need to know to secure your Apache web server&amp;quot; must delve into topics such as networks security, host security, and web application security. As it turned out I had to deal with these questions every single day. It was a struggle to keep the book from growing too much. Initially, the book was supposed to be around 280 pages long. In the end, it grew to over 400 pages.&lt;/p&gt;&lt;p&gt;As my work progressed I began to think more and more about the process. The traditional book writing process restricts the author to his experience, the experience of his immediate peers, and the experience of the technical reviewers. While this may work in some, or even many cases, I came to believe that a piece of technical writing can achieve its best only through the collaboration process with the readers. Now that the book is out, this is exactly what I am looking forward to.&lt;/p&gt;&lt;p&gt;The first step, the book&amp;#39;s web site, is already completed. In the following months I plan to put more material from the book online, start adding fresh content, and generally try to engage the public by offering them the stuff they are interested in. The way I see it, my work has just began.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://blog.ivanristic.com/2005/02/apache-security-cover-and-beta-chapter-available</id>
    <link type="text/html" rel="alternate" href="http://blog.ivanristic.com/2005/02/apache-security-cover-and-beta-chapter-available.html"/>
    <title>Apache Security cover and beta chapter available!</title>
    <published>2005-02-16T00:00:00+00:00</published>
    <updated>2005-02-16T00:00:00+00:00</updated>
    <author>
      <name>Ivan Ristić</name>
    </author>
    <category term="Apache" />
    <content type="html">&lt;p&gt;The Apache Security cover will feature a horse, I am happy to say. I knew all along my book was going to be an animal book but the identity of the animal was not known until fairly recently. Now that the animal is known and the tagline (&amp;quot;The Complete Guide to Securing Your Apache Web Server&amp;quot;) is sorted I decided to publish the cover for everyone to see. The official launch date is less than two weeks from now so I&amp;#39;ll save my &amp;quot;it was a difficult job&amp;quot; speech for then.&lt;/p&gt;&lt;p&gt;A beta chapter, &lt;a href=&quot;http://www.apachesecurity.net/download/apachesecurity-ch02.pdf&quot;&gt;Installation and configuration&lt;/a&gt;, is also available for download. A part of me wanted to advertise my knowledge by giving away one of the more exciting chapters. But since properly installing and configuring Apache is very important, in the end I decided to give away the less exciting but probably more useful chapter.&lt;/p&gt;

</content>
  </entry>
  
 
</feed>
