<?xml version="1.0" encoding="utf-8"?><!DOCTYPE article  PUBLIC '-//OASIS//DTD DocBook XML V4.4//EN'  'http://www.docbook.org/xml/4.4/docbookx.dtd'><article><articleinfo><title>MemberManual/ServingWebsites/SslCert</title><revhistory><revision><revnumber>50</revnumber><date>2022-01-15 06:48:28</date><authorinitials>JesseShumway</authorinitials><revremark>LetsEncrypt expiration policy circa January 2022</revremark></revision><revision><revnumber>49</revnumber><date>2019-01-11 01:40:03</date><authorinitials>ClintonEbadi</authorinitials><revremark>certs should include intermediates now</revremark></revision><revision><revnumber>48</revnumber><date>2019-01-11 01:28:00</date><authorinitials>ClintonEbadi</authorinitials><revremark>update formatting, docs, link to qualsys docs, make examples clearer, restructure a bit, think this is adequate now and nolonger has to be tagged needswork</revremark></revision><revision><revnumber>47</revnumber><date>2018-04-15 22:20:11</date><authorinitials>ClintonEbadi</authorinitials><revremark>startssl is dead</revremark></revision><revision><revnumber>46</revnumber><date>2016-03-31 18:50:54</date><authorinitials>c-71-192-154-186.hsd1.ma.comcast.net</authorinitials><revremark>Mode security precaution more prominent</revremark></revision><revision><revnumber>45</revnumber><date>2016-03-31 17:21:31</date><authorinitials>c-71-192-154-186.hsd1.ma.comcast.net</authorinitials></revision><revision><revnumber>44</revnumber><date>2016-03-31 16:58:37</date><authorinitials>c-71-192-154-186.hsd1.ma.comcast.net</authorinitials></revision><revision><revnumber>43</revnumber><date>2016-03-31 16:57:29</date><authorinitials>c-71-192-154-186.hsd1.ma.comcast.net</authorinitials></revision><revision><revnumber>42</revnumber><date>2016-02-12 16:38:01</date><authorinitials>StephenMichel</authorinitials></revision><revision><revnumber>41</revnumber><date>2014-10-03 17:27:51</date><authorinitials>ClintonEbadi</authorinitials><revremark>erryone should be requesting sha-256 signed certs now</revremark></revision><revision><revnumber>40</revnumber><date>2014-04-10 12:53:42</date><authorinitials>ClintonEbadi</authorinitials><revremark>improvement: we have a script to make a secure directory now</revremark></revision><revision><revnumber>39</revnumber><date>2014-04-09 23:03:32</date><authorinitials>ClintonEbadi</authorinitials><revremark>recommend 4096 bit private keys over 2048 bit private keys</revremark></revision><revision><revnumber>38</revnumber><date>2014-02-16 23:32:15</date><authorinitials>ClintonEbadi</authorinitials><revremark>at least make the structure not utterly broken</revremark></revision><revision><revnumber>37</revnumber><date>2014-02-16 23:10:35</date><authorinitials>ClintonEbadi</authorinitials><revremark>stop recommending members have hcoop ign their certs: there really is no value to having us do that any more (or really ever)</revremark></revision><revision><revnumber>36</revnumber><date>2013-01-23 19:58:28</date><authorinitials>ClintonEbadi</authorinitials><revremark>cleanup run #1</revremark></revision><revision><revnumber>35</revnumber><date>2013-01-21 17:45:05</date><authorinitials>ClintonEbadi</authorinitials><revremark>Yow, this needs a lot of work and is practically useless as is</revremark></revision><revision><revnumber>34</revnumber><date>2009-02-01 22:50:13</date><authorinitials>f053226130.adsl.alicedsl.de</authorinitials></revision><revision><revnumber>33</revnumber><date>2009-02-01 21:51:28</date><authorinitials>f053226130.adsl.alicedsl.de</authorinitials></revision><revision><revnumber>32</revnumber><date>2009-02-01 21:46:15</date><authorinitials>f053226130.adsl.alicedsl.de</authorinitials></revision><revision><revnumber>31</revnumber><date>2008-07-07 04:27:50</date><authorinitials>localhost</authorinitials><revremark>converted to 1.6 markup</revremark></revision><revision><revnumber>30</revnumber><date>2008-04-22 01:12:51</date><authorinitials>MichaelOlson</authorinitials><revremark>Update CA URL</revremark></revision><revision><revnumber>29</revnumber><date>2008-04-07 00:51:16</date><authorinitials>MichaelOlson</authorinitials></revision><revision><revnumber>28</revnumber><date>2008-04-07 00:49:02</date><authorinitials>MichaelOlson</authorinitials><revremark>Update instructions</revremark></revision><revision><revnumber>27</revnumber><date>2007-11-18 00:17:19</date><authorinitials>MichaelOlson</authorinitials></revision><revision><revnumber>26</revnumber><date>2007-11-18 00:15:56</date><authorinitials>MichaelOlson</authorinitials></revision><revision><revnumber>25</revnumber><date>2007-11-17 22:17:58</date><authorinitials>MichaelOlson</authorinitials><revremark>Only link next to the big fat warning</revremark></revision><revision><revnumber>24</revnumber><date>2007-11-17 22:15:00</date><authorinitials>MichaelOlson</authorinitials><revremark>Add getting cert from real CA instructions</revremark></revision><revision><revnumber>23</revnumber><date>2007-11-17 22:10:50</date><authorinitials>MichaelOlson</authorinitials><revremark>Add big fat disclaimer about using our cert, and link to it</revremark></revision><revision><revnumber>22</revnumber><date>2007-11-17 21:53:22</date><authorinitials>MichaelOlson</authorinitials><revremark>improve explanation of self-signed cert</revremark></revision><revision><revnumber>21</revnumber><date>2007-11-17 18:45:40</date><authorinitials>MichaelOlson</authorinitials><revremark>clarify compliementary copy</revremark></revision><revision><revnumber>20</revnumber><date>2007-11-17 17:22:08</date><authorinitials>MichaelOlson</authorinitials><revremark>Use .csr extension instead of .crt</revremark></revision><revision><revnumber>19</revnumber><date>2007-11-17 05:55:53</date><authorinitials>MichaelOlson</authorinitials><revremark>typos</revremark></revision><revision><revnumber>18</revnumber><date>2007-11-17 05:42:13</date><authorinitials>MichaelOlson</authorinitials><revremark>Add complementary copy text</revremark></revision><revision><revnumber>17</revnumber><date>2007-11-17 05:38:53</date><authorinitials>MichaelOlson</authorinitials></revision><revision><revnumber>16</revnumber><date>2007-11-17 04:36:38</date><authorinitials>MichaelOlson</authorinitials><revremark>-days is useless for a certificate request</revremark></revision><revision><revnumber>15</revnumber><date>2007-11-17 04:32:08</date><authorinitials>MichaelOlson</authorinitials><revremark>Finally figure all this stuff out</revremark></revision><revision><revnumber>14</revnumber><date>2007-11-17 03:06:17</date><authorinitials>MichaelOlson</authorinitials><revremark>More fields</revremark></revision><revision><revnumber>13</revnumber><date>2007-11-17 03:03:58</date><authorinitials>MichaelOlson</authorinitials></revision><revision><revnumber>12</revnumber><date>2007-11-17 02:56:53</date><authorinitials>MichaelOlson</authorinitials><revremark>Try to puzzle some of this out</revremark></revision><revision><revnumber>11</revnumber><date>2007-11-12 05:07:36</date><authorinitials>MichaelOlson</authorinitials><revremark>2048 is the new 1024, or so says my Security class</revremark></revision><revision><revnumber>10</revnumber><date>2007-11-12 05:05:25</date><authorinitials>MichaelOlson</authorinitials></revision><revision><revnumber>9</revnumber><date>2007-11-12 05:04:46</date><authorinitials>MichaelOlson</authorinitials><revremark>Figured out what &quot;certificate request&quot; meant</revremark></revision><revision><revnumber>8</revnumber><date>2007-11-12 04:12:20</date><authorinitials>MichaelOlson</authorinitials></revision><revision><revnumber>7</revnumber><date>2007-11-12 04:11:41</date><authorinitials>MichaelOlson</authorinitials></revision><revision><revnumber>6</revnumber><date>2007-11-12 04:01:20</date><authorinitials>MichaelOlson</authorinitials><revremark>Explain parameters</revremark></revision><revision><revnumber>5</revnumber><date>2007-11-12 03:44:58</date><authorinitials>MichaelOlson</authorinitials><revremark>wrong page</revremark></revision><revision><revnumber>4</revnumber><date>2007-11-12 03:44:32</date><authorinitials>MichaelOlson</authorinitials></revision><revision><revnumber>3</revnumber><date>2007-11-12 03:43:01</date><authorinitials>MichaelOlson</authorinitials><revremark>Make part of member manual</revremark></revision><revision><revnumber>2</revnumber><date>2005-12-23 16:04:20</date><authorinitials>AdamChlipala</authorinitials><revremark>Different Apache directions</revremark></revision><revision><revnumber>1</revnumber><date>2005-08-08 02:35:31</date><authorinitials>AdamChlipala</authorinitials></revision></revhistory></articleinfo><para>This is the page of the <ulink url="https://wiki.hcoop.net/MemberManual/ServingWebsites/SslCert/MemberManual#">MemberManual</ulink> that describes how to generate a valid SSL cert. </para><caution><para><emphasis role="strong">Security Precautions</emphasis> </para><para>At some point, your certificate and private key will need to be stored in afs. Since afs is publicly accessible, you need to take a few precautions to ensure that your data remains private. For all key operations, keep the files in a directory that only you and the admins can read. We provide a script to create such a directory: <code>/afs/hcoop.net/common/bin/make-secure-directory certificates</code> </para></caution><section><title>Introduction</title><para>There are a few options for acquiring an SSL certificate to use with us. </para><para>The first option is to get a signed certificate from a trusted Certificate Authority (&quot;CA&quot; for short).  If you want to make it so that visitors to your website never see an annoying nag dialog box, then this is your best option. The easiest way to do this is <ulink url="https://wiki.hcoop.net/MemberManual/ServingWebsites/SslCert/MemberManual/ServingWebsites/SslCert/LetsEncrypt#">using letsencrypt</ulink> </para><para>Alternatively, you can generate a self-signed certificate. </para><para>There are several good introductions to SSL and x509 certificates in general if you are unfamiliar with the subject: </para><itemizedlist><listitem><para><ulink url="https://www.ssllabs.com/projects/best-practices/index.html">Qualsys SSL Deployment Best Practices</ulink> </para></listitem><listitem><para><ulink url="https://httpd.apache.org/docs/2.4/ssl/ssl_faq.html#aboutcerts">Apache SSL FAQ</ulink> </para></listitem><listitem><para><ulink url="http://www.tldp.org/HOWTO/SSL-Certificates-HOWTO/index.html">The SSL Certificate HOWTO</ulink> </para></listitem></itemizedlist></section><section><title>Generating a Key and Certificate Signing Request</title><para>If you are creating an SSL certificate to use for a web virtual host via <ulink url="https://wiki.hcoop.net/MemberManual/ServingWebsites/SslCert/DomTool#">DomTool</ulink>, then you need to create both a key file and a csr file.  The csr file is called a &quot;certificate signing request&quot; (sometimes abbreviated &quot;certificate request&quot;), and you will want to specify that on the SSL form in the HCoop Portal. We'll also need access to your key. </para><para>Your key <emphasis>must be kept private</emphasis>. You supply the csr to any certification authorities you would like to sign your key, and later combine the certificate given by them with your private key to server a TLS site from our servers. It is highly recommended that you generate a private key specifically for use with HCoop. </para><para>To create a cerificate request in <code>file.csr</code> and a private key in <code>file.key</code>, do the following.  These files should be readable only by you and the HCoop admins, so be sure to set permissions properly on the directory where you store the certificate request and key.  The certificate should be placed somewhere in your home directory, like <code>~/certificates</code>. </para><screen><![CDATA[/afs/hcoop.net/common/bin/make-secure-directory ~/certificates
cd ~/certificates
openssl req -sha256 -newkey rsa:2048 -keyout file.key -out file.csr -nodes]]></screen><para>Here is an explanation of the parameters that you will be asked to provide.  Replace <emphasis role="strong">yourdomain.org</emphasis> with your domain name. </para><itemizedlist><listitem><para><emphasis role="strong">Country</emphasis>/<emphasis role="strong">State</emphasis>/<emphasis role="strong">Locality</emphasis>: These are self-explanatory. </para></listitem><listitem><para><emphasis role="strong">Organization Name</emphasis>: This can be anything you want.  It is often the full name or description of your organization or website. </para></listitem><listitem><para><emphasis role="strong">Organizational Unit Name</emphasis>: This can be anything you want.  It can be left blank. </para></listitem><listitem><para><emphasis role="strong">Common Name</emphasis>: This is the domain that goes with the certificate.  It can be either a single name (i.e. &quot;yourdomain.org&quot;), or a wildcard domain (like &quot;*.yourdomain.org&quot;).  The wildcard domain is used for sharing the same certificate in multiple subdomains of your domain. Most CAs will not sign wildcard certificates. </para></listitem><listitem><para><emphasis role="strong">Email Address</emphasis>: A valid email address.  People often use <code>ca@yourdomain.org</code>. </para></listitem><listitem><para><emphasis role="strong">Challenge Password</emphasis>: Leave blank. </para></listitem><listitem><para><emphasis role="strong">Company Name</emphasis>: This can be anything you want.  It can be left blank. </para></listitem></itemizedlist></section><section><title>Signing the Key</title><section><title>Using a Trusted CA</title><para>There are several options available.  By far the largest providers are <ulink url="https://www.verisign.com/">VeriSign</ulink> and <ulink url="https://www.thawte.com/">Thawte</ulink>. Several members seem to like <ulink url="https://gandi.net">Gandi</ulink>. We make no specific recommendations concerning which CA to choose: just make certain that their root CA certificates are included with the majority of web browsers. </para><para><ulink url="https://letsencrypt.org/">Letencrypt</ulink> offers free SSL certificates (but must be renewed every 60 days). </para></section><section><title>Self-Signing</title><para><emphasis role="strong">FILE</emphasis> is the filename of the certificate that will be generated: it should end in &quot;.pem&quot;.  <emphasis role="strong">DAYS</emphasis> indicates the number of days that you want the certificate to be valid. It is recommended not to sign keys for longer than a year or two. </para><screen><![CDATA[/afs/hcoop.net/common/bin/make-secure-directory ~/certificates
cd ~/certificates
openssl req -x509 -newkey rsa:2048 -keyout FILE -out FILE -days DAYS -nodes]]></screen></section></section><section><title>Installing the Certificate</title><para>Now that you have a certificate, we need to install it.  </para><para>Use the <ulink url="https://members.hcoop.net/portal/cert">SSL permissions</ulink> page on the portal to request installation of your new certificate. You need to provide us with either: </para><itemizedlist><listitem><para>A <code>pem</code> containing your public certificate, private key, and any intermediate certificates (in that order) concatenated together </para></listitem><listitem><para>Your public certificate and private key, both in <code>pem</code> format </para></listitem></itemizedlist><para>For the latter option, provide both paths in the same form, separated by a space. </para><para>We will then verify the certificate and install it, providing you with a path that you can use to <ulink url="https://wiki.hcoop.net/MemberManual/ServingWebsites/SslCert/DomTool/Examples#UsingSSL.28HTTPS.29">enable SSL using domtool</ulink>. </para><!--rule (<hr>) is not applicable to DocBook--><para> <ulink url="https://wiki.hcoop.net/MemberManual/ServingWebsites/SslCert/CategoryMemberManual#">CategoryMemberManual</ulink> </para></section></article>