├── .gitignore ├── GUIDE.md ├── LICENSE ├── README.md └── etc ├── nginx ├── nginx.conf ├── sites-enabled │ └── www_example_com.conf └── wildcard_example_com.ssl.conf └── ssl ├── certs ├── gandi-standardssl-2.chain.pem ├── wildcard_example_com.chain.pem └── wildcard_example_com.crt.pem ├── dhparam.pem └── private ├── wildcard_example_com.csr.pem └── wildcard_example_com.key.pem /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store -------------------------------------------------------------------------------- /GUIDE.md: -------------------------------------------------------------------------------- 1 | **Sommaire** : 2 | 3 | 1. [Objectif](#1-objectif) 4 | 2. [Création du certificat](#2-cr%C3%A9ation-du-certificat) 5 | 3. [Configuration du serveur](#3-configuration-du-serveur) 6 | 4. [Vérifications](#4-v%C3%A9rifications) 7 | 5. [Ressources utiles](#5-ressources-utiles) 8 | 9 | # 1. Objectif 10 | 11 | L'objectif est de protéger les communications entre un serveur web et ses clients en SSL et en respectant le plus possible les règles de l'art, mais dans un contexte précis, celui de certificats _wildcard_ délivrés par Gandi. 12 | 13 | Tous les fichiers sont présents dans le [dépôt Git](https://github.com/jlecour/ssl-gandi-nginx-debian/tree/master/etc) : config Nginx, fichiers de certificat, … 14 | Ils correspondent à un vrai certificat, pour le domaine `www.example.com`, sauf que Gandi ne l'a jamais réellement généré et son contenu est bidon. 15 | 16 | La plupart des commandes décrites ici doit être exécutée par un utilisateur privilégié, comme **root**. 17 | Seules les commandes liées au vérification post-installation peuvent être exécutées avec un utilisateur normal. 18 | 19 | ## Certificat _wildcard_ SSL Standard, délivré par Gandi 20 | 21 | Ce type de certificat coûte environ 120 €/an. Il permet de protéger avec un même certificat tous les sous-domaines (de premier niveau) d'un nom de domaine principal. 22 | 23 | Il est délivré automatiquement et assez rapidement (moins d'1 heure). 24 | 25 | Vous pouvez aussi opter pour un certificat **SSL Pro** (_wildcard_ ou pas). Il coûtera plus cher, nécessitera une vérification de documents, mais vous apportera une garantie financière. 26 | 27 | La procédure décrite ici concerne donc les certificats **SSL Standard** mais fonctionne avec les certificats **SSL Pro**. 28 | 29 | ## Niveau _intermediate_ 30 | 31 | Dans son guide [Server-Side TLS][server-side-tls], Mozilla propose 3 niveaux de configuration. Pour chacun, voici les plus anciens clients compatibles, par niveau : 32 | 33 | - **modern** : Firefox 27, Chrome 22, IE 11, Opera 14, Safari 7, Android 4.4, Java 8 34 | - **intermediate** : Firefox 1, Chrome 1, IE 7, Opera 5, Safari 1, Windows XP IE8, Android 2.3, Java 7 35 | - **old** : Windows XP IE6, Java 6 36 | 37 | Nous allons opter pour une configuration **intermediate**, qui nous permet d'avoir un **bon compromis compatibilité/sécurité**. 38 | 39 | ### SHA-2 40 | 41 | Au niveau **intermediate** nous avons le choix entre des certificats SHA-1 ou SHA-2 (256 bits). 42 | 43 | Nous allons choisir SHA-2 pour être plus "compatible" avec la tendance des navigateurs récents. En effet, [Google déprécie progressivement les certificats SHA-1](http://blog.chromium.org/2014/09/gradually-sunsetting-sha-1.html). 44 | 45 | Pour les certificats SHA-2, certains navigateurs n'ont pas encore ajouté les certificats racines. Il est donc prudent de les rajouter manuellement dans les chaînes de certification. Le [Wiki de Gandi](http://wiki.gandi.net/fr/ssl/intermediate) apporte plus de précision sur la récupération des certificats intermédiaires. 46 | 47 | ### HSTS: HTTP Strict Transport Security 48 | 49 | Si votre site ne doit être consultable qu'en HTTPS, l'en-tête HTTP `Strict-Transport-Security` (HSTS) permettra de s'assurer que les navigateurs refuseront toute connexion non chiffrée sur votre domaine. La durée de vie de l'en-tête doit être assez longue : la valeur conseillée est de 180 jours, mais c'est souvent 365 jours que l'on rencontre dans la configuration. 50 | 51 | Il est possible d'être conforme à la configuration **intermediate** sans appliquer HSTS, mais si vous pouvez vous permettre de n'autoriser que des échanges chiffrés, je vous le recommande. 52 | 53 | ## Nginx 54 | 55 | Nginx est une excellente terminaison SSL/TLS, en particulier à partir de la version 1.6. C'est le serveur web que nous utilisons déjà, donc nous aurons facilement accès aux meilleurs configurations possibles. 56 | 57 | ## Debian 58 | 59 | Le type de système importe peut (tant qu'il ressemble à un Linux/Unix). Nous utiliserons Debian (wheezy) car c'est la distribution qui est sur nos serveurs à ce jour. 60 | 61 | La seule différence que vous risquer de rencontrer est l'emplacement de certains fichiers. 62 | 63 | # 2. Création du certificat 64 | 65 | 66 | ## Formats de certificats 67 | 68 | Les certificats sont fréquemment représentés dans un de ces 2 formats : **DER** et **PEM**. **PEM** étant le format par défaut d'OpenSSL, nous allons surtout manipuler des certificats, clés, chaînes de certificats, etc. de ce type. 69 | 70 | Les outils fournis par OpenSSL facilitent la conversion d'un format à l'autre. 71 | 72 | ## Demande d'émission d'un certificat 73 | 74 | Il faut commencer par générer une clé privée (`*.key.pem`) et une demande de certificat (`*.csr.pem`). 75 | Pour éviter de faire transiter la clé privée dans un dossier non protégé, on la génère directement dans le dossier final (`/etc/ssl/private`) qui doit avoir les droits `drwx--x---` et appartenir à `root:ssl-cert`. 76 | 77 | → openssl req -nodes -newkey rsa:2048 -sha256 -keyout /etc/ssl/private/wildcard_example_com.key.pem -out wildcard_example_com.csr.pem 78 | 79 | ```` 80 | Country Name (2 letter code) [AU]:FR 81 | State or Province Name (full name) [Some-State]: 82 | Locality Name (eg, city) []:Marseille 83 | Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example Inc. 84 | Organizational Unit Name (eg, section) []: 85 | Common Name (e.g. server FQDN or YOUR name) []:*.example.com 86 | Email Address []:contact@example.com 87 | 88 | Please enter the following 'extra' attributes 89 | to be sent with your certificate request 90 | A challenge password []: 91 | An optional company name []: 92 | ```` 93 | 94 | Le contenu du CSR devra être transmis à Gandi. 95 | 96 | → cat wildcard_example_com.csr.pem 97 | 98 | ```` 99 | -----BEGIN CERTIFICATE REQUEST----- 100 | MIICzzCCAbcCAQAwgYkxCzAJBgNVBAYTAkZSMRMwEQYDVQQIEwpTb21lLVN0YXRl 101 | MRIwEAYDVQQHEwlNYXJzZWlsbGUxFTATBgNVBAoTDEV4YW1wbGUgSW5jLjEWMBQG 102 | A1UEAxQNKi5leGFtcGxlLmNvbTEiMCAGCSqGSIb3DQEJARYTY29udGFjdEBleGFt 103 | cGxlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKO13wEpS2Ka 104 | unLpJVLF2AqYVZV4OK7p7OG4IfVhkK5wP/kh8KYxyOHZZDx+rGfJE1UA8dJQd+EV 105 | xST0tdN2tw0Dv0jSv6SjXoQO1inTbDf+qixxAj/RxAVmn8AuWC3g/YtI7Wikb3PO 106 | +h81Ezb7i4rkZGYoFleDOpprQvxZEKVXOyU9bumKJRY3YO7xmwdV1pVt+vwgyR+8 107 | sI1R7OCglPwdYlRD9R0ZFEzpPYkDmY7qkx9Jk+TJNewSyS4wy6qg6Neguxg+hYaD 108 | MLY5kXmhmRBHlTaOznbi8m/lEIszH9/r+4weDjt66DPEmM0vUEl3p8dZUb2Nkn7n 109 | gBOCM4/mdhcCAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQAri8Gtz2SkiBMXb4Me 110 | ICL/exVrM6q03wcrFSOE9XJbcyOOA1gP8+zWNcNlMyfd/MpB5lNRPdzKT01zb17z 111 | kiteEDTSvGMTwklWJN08hJDXPXs2POnQDZau/FEAvLM8jWheq+UzSsIsuSju1MUJ 112 | ra8d/3FH25J5eRCvy63tPpje9qk+EoHxO5g22QCcgXIc2CANicLNjTKkECG+TRN1 113 | WMmir+a2+raBgNZCrE5N87SsfHnhPZEJExXL5AuKTAOH3FcBb0G1f4KcKPgULbrE 114 | aH9rpFywuEMgnkp3eRoxtPs7UuTVTaNIjCJX+Q5oY2eT6cH1UVwn8qnJe1j8S6Mx 115 | CGi7 116 | -----END CERTIFICATE REQUEST----- 117 | ```` 118 | 119 | La clé privée ne doit être **communiquée à personne** et être stockée de manière **sécurisée** sur votre serveur (attention aux permissions). Ici, il s'agit d'un certificat factice : le dévoiler ne présente aucun risque. 120 | 121 | → cat wildcard_example_com.key.pem 122 | 123 | ```` 124 | -----BEGIN RSA PRIVATE KEY----- 125 | MIIEpAIBAAKCAQEAo7XfASlLYpq6cuklUsXYCphVlXg4runs4bgh9WGQrnA/+SHw 126 | pjHI4dlkPH6sZ8kTVQDx0lB34RXFJPS103a3DQO/SNK/pKNehA7WKdNsN/6qLHEC 127 | P9HEBWafwC5YLeD9i0jtaKRvc876HzUTNvuLiuRkZigWV4M6mmtC/FkQpVc7JT1u 128 | 6YolFjdg7vGbB1XWlW36/CDJH7ywjVHs4KCU/B1iVEP1HRkUTOk9iQOZjuqTH0mT 129 | 5Mk17BLJLjDLqqDo16C7GD6FhoMwtjmReaGZEEeVNo7OduLyb+UQizMf3+v7jB4O 130 | O3roM8SYzS9QSXenx1lRvY2SfueAE4Izj+Z2FwIDAQABAoIBAQCO7LlEykiGTY95 131 | wxJSsWdr2JLfa5YRHykv5xG+qO8nW9h+KKNwdQZsJt7b8buS4HmAPNLiSl5epCL5 132 | oKsdcwdc1Wiqq1Ok6PwbTtiqq2pPeIYZRpAwJ3J7RJ0zq0JQy5yPfZvHP8gN0yWL 133 | GUstNW8eU0dT6KuYu3juV7ajmR5vOdNeGcxftA/gN0SQGlSuK14K2pyZAirBejNc 134 | RozPtC4tF6XLgrUUcmYlw2q5Uji5jJah8LZQEf6rFi36y43iteYE+7bz/gnBZ7tP 135 | 7y7SozkvtZ8tVUl8I0LtNz3KOv/ukTasNFBIQpWK5auU2n4BMw047nSPP4nWL5+J 136 | TOaGu0ABAoGBANE5obJtNtNh+zgNv9qKAjHAvBgg+T43bZoqgQJzXsoKveezQ6K7 137 | x+4yZ7nie2WoKoRO2w3Gsa0JHqoslK6bg3MVaabU1miLR73UFkHPW5qkMzSb9ndN 138 | P/v/LWO1glbHMqO9kewdJoJEjFwUoWVdEKQvUW5ZoLya3wHU8Ab1vTtBAoGBAMhP 139 | V/eA57lF9Pq+aEfljyaXvASzgAJM8KQHyG16I3LiK5CFVIHPrDvCH4HybeuwCG7S 140 | HfM29678DzZpTHfplfnKXlPoG/QJCsiKUtn3OMTHyiUsHT/j2juqA6cZ3/0G5LO8 141 | 4zNQpLrrzgrrf4P/p6pXVZKmIERTdDVBhaWkUZNXAoGACzzNMogrKa9ZjukuJM7E 142 | z2dKswESYgUYHe+qfjc0ICXzjT5To6nyUxjh+VnwxsUBg5m4qkTBxkl3HCzIz5gK 143 | t2OvCQblfTf94nRBvcclZGjtVyYJVt8PULmj9ncJSR/p2GGWNNhb+SM1Zry07nzR 144 | KABin0qxF3A6Ch8lxTntsAECgYEAvVWR9lYXsZ4YUzHK67pmNrpRc7gfFQ2Yn9Lj 145 | deduvlZdizsbh5++UrXIhlGZ6J75OZbNzGh2cSW7U1jweJ+HrRXFV1Ybpe0uDiQA 146 | 8BmnxQh7X+t0skEytBadYUMp3sa3QdUWhBiDvFLK7LNwUlpCJtZqAjWYZjzjqLsI 147 | Emtg1/0CgYA214z3XCLXqenPDcJuYHoKaDNY7hBJpcMx+PC/djHa5lbFCYzfhg7h 148 | A+sH/qFmLTkb3Ha+S4uRTWlEfMk7iliwAGfGhYBTCjUQiqdLdwSkO6YBey0nXZLJ 149 | E0pV7+shRPoK7jguy6zzSHK1ygWnqTSn8TePgtIXOoVcZoH6jQBfcA== 150 | -----END RSA PRIVATE KEY----- 151 | ```` 152 | 153 | Gandi propose une vérification par enregistrement DNS, par fichier texte ou par envoi d'un e-mail. Chacune a bien sûr ses avantages et inconvénients. 154 | 155 | Si votre serveur est déjà configuré ou si vous avez déjà une adresse email "admin@example.com", alors ces 2 méthodes sont les plus rapides. 156 | 157 | L'enregistrement DNS vous permet d'effectuer la vérification même si le reste de votre infrastructure n'est pas encore prêt. La première vérification n'intervient en revanche que 25 minutes après la demande de création du certificat (puis toutes les 5 minutes jusqu'au succès). 158 | 159 | Une fois la validation effectuée, vous pouvez récupérer votre certificat et le stocker dans `/etc/ssl/certs/wildcard_example_com.crt.pem`. 160 | 161 | # 3. Configuration du serveur 162 | 163 | ## Forward Secrecy 164 | 165 | Dans un mécanisme de chiffrement d'un échange à partir d'une clé privée, le problème est que si on met la main sur cette clé, tous les échanges passés et futurs deviennent lisibles. La révocation d'un certificat ne protège pas le déchiffrement de ce qui a été chiffré dans le passé. Dans une situation de surveillance des échanges, on peut tout intercepter/stocker et se dire qu'il sera peut-être possible de tout déchiffrer plus tard. Les agences de renseignement sont soupçonnées d'appliquer ce genre de stratégie. 166 | 167 | Le principe de **Forward Secrecy** est que le client et le serveur se mettent d'accord sur une clé temporaire de chiffrement. Cette clé restera accessible uniquement le temps de la session TLS. Si une de ces clés est récupérée ou découverte, seuls les échanges de la session en question seront compromis. 168 | 169 | Pour faire fonctionner ce mécanisme, le client et le serveur doivent procéder à un **échange de clés Diffie-Hellman**. Le serveur va communiquer au client un (très grand) nombre premier et un générateur. Pour éviter un compromission de type [MITM][mitm], le serveur signe l'échange avec sa clé privée. Les paramètres de l'échange sont déterminés à l'avance et stockés sur le serveur. 170 | 171 | OpenSSL permet de générer le nombre premier et le générateur ainsi que de choisir leur complexité, exprimée en bits. La complexité la plus courante est **2048 bits**. De plus en plus **4096 bits** sont recommandés, mais les systèmes anciens (tels que Java 6 ou IE6) ne supportent pas plus de **1024 bits**. 172 | 173 | Au niveau **intermediate** il vaut mieux utiliser (au moins) 2048 bits, même si 1024 bits sont acceptables. Dans notre cas, nous utiliserons 2048 bits, car même le niveau **modern** n'impose pas 4096 bits. 174 | 175 | Attention, la génération des paramètres Diffie-Hellman peut prendre plusieurs minutes : 176 | 177 | → cd /etc/ssl/ \ 178 | && openssl dhparam -rand – 2048 -out dhparam-2048.pem \ 179 | && ln -s dhparam-2048.pem dhparam.pem 180 | 181 | En sortie, le fichier devrait ressembler à ça : 182 | 183 | ```` 184 | -----BEGIN DH PARAMETERS----- 185 | MZ9wdNIzSPihtIKQLMBF1GS6UJKjIQznU06XeY0d5u4LanYngWCTFPaa3MqN9h/Z 186 | ThWGYMx7Aa6I82Tao0my2ee6jvOC5yc9dSEW51cjHdhjASzhtUEoIXLGTasfp2QF 187 | ZA85bq8/iU/n8qGYvSk5ieP1xhOI07YxaReER/0wmG9rHIBrnYn2j5nYSxfcPfsQ 188 | oqzyJPg+dp7vifJAWxj/2jkzbUK9Ij3hHiFitdNCmqRqCpIjrU6Zq+ZenRz9T3KE 189 | QZK68V0RM3hBt6CVQ80vfhYmT+3f54gNB9jfeHCwqLCYotWdmO7Q03FR+mgA4Zhg 190 | A/q9Cm/STK80ZQkdnfdm7qnJFG/+vJ7LTdIN4L1vMxkaMg2c5q63FQpdPCAQI= 191 | -----END DH PARAMETERS----- 192 | ```` 193 | 194 | Pour faciliter l'utilisation de plusieurs niveaux de complexité selon les installations (ou les essais), nous avons écrit le fichier avec un suffixe explicite puis créé un lien symbolique avec la commande `ln -s`. 195 | 196 | ## Hiérarchie des certificats 197 | 198 | Pour vérifier l'authenticité des certificats, les clients s'appuient sur un ensemble de certificats racines. Tous les certificats sont signés à partir de ces **certificats racines** ou de certificats descendant eux-mêmes de ces certificats racines : les ceritificats intermédiaires. Généralement, ce sont ces derniers qui sont utilisés pour signer nos certificats finaux. 199 | 200 | Dans notre cas, nous avons : 201 | 202 | - la racine (0) `AddTrust External Root` 203 | - la branche (1) `USERTrust RSA AddTrust CA` 204 | - la branche (2) `Gandi Standard SSL CA2` 205 | - la feuille (3) `*.example.com` 206 | 207 | Notez bien cet ordre car il nous servira pour créer les deux fichiers de chaîne. 208 | 209 | ## Fichier de la chaîne de certificats 210 | 211 | Il est nécessaire d'indiquer au serveur web non seulement le certificat de notre domaine, mais aussi tous les certificats intermédiaires. 212 | 213 | Le certificat racine étant connu, nous allons créer un fichier `/etc/ssl/certs/wildcard_example_com.chain.pem` qui contiendra, dans l'ordre, les trois niveaux restants : 214 | 215 | - le certificat généré par Gandi (**feuille 3**) ; 216 | - le certificat intermédiaire de Gandi (**branche 2**) ; 217 | - le certificat _cross-signed_ (**branche 1**). 218 | 219 | Pour générer le fichier de chaîne : 220 | 221 | → cd /etc/ssl/certs/ \ 222 | && echo -n '' > wildcard_example_com.chain.pem \ 223 | && cat wildcard_example_com.crt.pem | tee -a wildcard_example_com.chain.pem \ 224 | && wget -q -O - https://www.gandi.net/static/CAs/GandiStandardSSLCA2.pem | tee -a wildcard_example_com.chain.pem> /dev/null 225 | 226 | Explications : 227 | 228 | - on se place dans `/etc/ssl/certs` ; 229 | - le `echo` crée un fichier vide ; 230 | - on ajoute le certificat du domaine (directement au format `PEM`) ; 231 | - on ajoute le certificat de Gandi (directement au format `PEM`) ; 232 | - on ajoute le certificat _cross-signed_ (au format `DER` il faut donc le convertir avant de l'ajouter) ; 233 | - le certificat _cross signed_ a été rajouté par Gandi dans son fichier, pour nous éviter une étape ; 234 | - l'utilisation de `tee` permet d'ajouter un `sudo` si besoin. 235 | 236 | Pour des certificats **SSL Pro**, le certificat intermédiaire de Gandi est différent, mais le principe et les manipulations sont identiques. 237 | 238 | ## Fichier des certificats agrafés (_stapling_) 239 | 240 | La plupart des clients qui se connecteront au serveur web voudront vérifier la non-révocation du certificat. Deux stratégies permettent cette vérification : via un fichier CRL (_Certificate Revocation List_), mais vu le nombre de certificats en circulation ça devient impraticable, ou alors via une interrogation OCSP (_Online Certificate Status Protocol_). 241 | 242 | Pour éviter au client de faire une requête additionnelle, le serveur peut mettre en cache le résultat de cette vérification et la servir directement au client. Pour cela il faut indiquer à Nginx la liste des certificats, concaténés dans un seul fichier. 243 | 244 | Les certificats doivent être dans l'ordre de la hiérarchie, en partant de celui qui a signé notre certificat (ici `GandiStandardSSLCA2`) et en remontant jusqu'à la racine. 245 | 246 | Nous allons créer le fichier `/etc/ssl/certs/gandi-standardssl-2.chain.pem` qui contiendra, dans l'ordre : 247 | 248 | - le certificat intermédiaire de Gandi (**branche 2**) ; 249 | - le certificat _cross-signed_ (**branche 1**); 250 | - le certificat racine (**racine 0**). 251 | 252 | Voici la commande : 253 | 254 | → cd /etc/ssl/certs/ \ 255 | && echo -n '' > gandi-standardssl-2.chain.pem \ 256 | && wget -q -O - https://www.gandi.net/static/CAs/GandiStandardSSLCA2.pem | tee -a gandi-standardssl-2.chain.pem> /dev/null \ 257 | && cat AddTrust_External_Root.pem | tee -a gandi-standardssl-2.chain.pem 258 | 259 | ## Récapitulatif des fichiers de certificats 260 | 261 | **`/etc/ssl/certs/gandi-standardssl-2.chain.pem`** 262 | 263 | C'est la chaîne des certificats à utiliser pour _OCSP stapling_. Ce fichier peut être utilisé par plusieurs certificats **Gandi Standard SSL**. 264 | 265 | Il n'est pas indispensable pour faire fonctionner le domaine en HTTPS mais c'est utile pour les performances du site. 266 | 267 | **`/etc/ssl/certs/wildcard_example_com.chain.pem`** 268 | 269 | Il contient le certificat du domaine et les certificats intermédiaires. 270 | 271 | **`/etc/ssl/certs/wildcard_example_com.crt.pem`** 272 | 273 | Il contient seulement le certificat du domaine. Il ne sera pas utilisé directement par le serveur web, mais il est pratique de le conserver. 274 | 275 | **`/etc/ssl/private/wildcard_example_com.csr.pem`** 276 | 277 | C'est le fichier contenant la demande de création d'un certificat. Il est inutile sur le serveur, mais il est intéressant de le conserver pour vérifier comment la demande initiale avait été effectuée. 278 | 279 | **`/etc/ssl/private/wildcard_example_com.key.pem`** 280 | 281 | C'est la clé privée du certificat. Ce fichier est indispensable. 282 | 283 | ### droits d'accès 284 | 285 | La clé privée doit être accessible uniquement en lecture et par le seul compte root. Il est recommandé de créer la clef privée directement dans un dossier accessible uniquement par root (par exemple: /etc/ssl/private). 286 | 287 | → chmod 640 /etc/ssl/private/wildcard_example_com.key.pem 288 | → chown root:ssl-cert /etc/ssl/private/wildcard_example_com.key.pem 289 | 290 | Les fichiers présents dans `/etc/ssl/certs` peuvent être accessibles en lecture à tout le monde, mais seulement aux administrateurs pour l'écriture. 291 | 292 | ## Nginx 293 | 294 | La configuration de Nginx se fait via le fichier `/etc/nginx/nginx.conf`, dans lequel on trouve des réglages généraux. Il y aussi une section pour la partie `http` dans laquelle on trouve des sections `server`. Toutes ces sections sont appelées **bloc** car elles utilisent une syntaxe à base d'accolades et sont imbriquées. 295 | 296 | Par habitude on extrait souvent les blocs spécifiques aux sites et applications gérées dans des fichiers spécifiques, que l'on inclut ensuite dans la configuration principale via la directive `include`. 297 | 298 | Voici un exemple typique de configuration : 299 | 300 | → cat /etc/nginx/nginx.conf 301 | 302 | ````nginx 303 | user www-data; 304 | worker_processes 32; 305 | pid /var/run/nginx.pid; 306 | 307 | events { 308 | worker_connections 768; 309 | } 310 | 311 | http { 312 | sendfile on; 313 | tcp_nopush on; 314 | tcp_nodelay on; 315 | keepalive_timeout 65; 316 | 317 | include /etc/nginx/mime.types; 318 | default_type application/octet-stream; 319 | 320 | access_log /var/log/nginx/access.log; 321 | error_log /var/log/nginx/error.log; 322 | 323 | include /etc/nginx/sites-enabled/*; 324 | } 325 | ```` 326 | 327 | Ici on voit que tous les fichiers présents dans `/etc/nginx/sites-enabled` sont automatiquement inclus. Nous allons placer notre configuration pour le site `www.example.com` dans `/etc/nginx/sites-enabled/www_example_com.conf` 328 | 329 | → cat /etc/nginx/sites-enabled/www_example_com.conf 330 | 331 | ````nginx 332 | server { 333 | listen 80; 334 | rewrite ^ https://$host$request_uri? permanent; 335 | } 336 | server { 337 | listen 443 ssl; 338 | 339 | server_name www.example.com; 340 | 341 | include /etc/nginx/wildcard_example_com.ssl.conf; 342 | add_header Strict-Transport-Security max-age=31536000; 343 | 344 | root /var/www/example; 345 | index index.htm index.html; 346 | } 347 | ```` 348 | 349 | Ici, on ajoute manuellement l'en-tête `Strict-Transport-Security` avec une valeur fixée à `1 an`. Si on utilise une application web qui place cet en-tête elle-même, c'est inutile de le rappeler ici. 350 | 351 | Comme nous mettons en place un certificat SSL _wildcard_ pour le domaine, il est probable que nous réutiliserons la partie SSL pour plusieurs configurations de sites (sous-domaines). Nous la placerons donc dans `/etc/nginx/wildcard_example_com.ssl.conf`. 352 | 353 | → cat /etc/nginx/wildcard_example_com.ssl.conf 354 | 355 | ````nginx 356 | ssl_certificate /etc/ssl/certs/wildcard_example_com.chain.pem; 357 | ssl_certificate_key /etc/ssl/private/wildcard_example_com.key.pem; 358 | 359 | ssl_session_timeout 24h; 360 | ssl_session_cache shared:SSL:10m; 361 | 362 | ssl_dhparam /etc/ssl/dhparam.pem; 363 | 364 | ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 365 | ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; 366 | ssl_prefer_server_ciphers on; 367 | 368 | ssl_stapling on; 369 | ssl_stapling_verify on; 370 | ssl_trusted_certificate /etc/ssl/certs/gandi-standardssl-2.chain.pem; 371 | 372 | resolver 127.0.0.1; 373 | ```` 374 | 375 | _Ci-dessous, le nom des directives est cliquable et conduit vers la documentation de Nginx._ 376 | 377 | - [ssl_certificate](http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_certificate) est l'emplacement du fichier de certificat 378 | - [ssl_certificate_key](http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_certificate_key) est l'emplacement du fichier de la clé privée du certificat 379 | - [ssl_session_timeout](http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_session_timeout) et [ssl_session_cache](http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_session_cache) permettent de préciser où, quelle quantité et combien de temps garder les sessions SSL. J'ai appliqué ici les recommandations de [Server-Side TLS][server-side-tls]. 380 | - [ssl_dhparam](http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_dhparam) indique l'emplacement du fichier des paramètres (généré plus haut) pour l'échange de clés Diffie-Hellman. 381 | - [ssl_protocols](http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_protocols) est la liste des protocoles acceptés par le serveur. À ce jour, seules les versions `TLSv1`, `TLSv1.1` et `TLSv1.2` de TLS sont acceptables. Plus d'info sur l'[historique de SSL/TLS](http://fr.wikipedia.org/wiki/Transport_Layer_Security#Historique) sur Wikipedia. Les failles récentes de `SSLv3` nous ont poussés à le retirer autant que possible des listes de protocoles utilisés. 382 | - [ssl_ciphers](http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_ciphers) est la liste ordonnée des ciphers (algorithmes de chiffrement) qui sont acceptés. La liste est directement issue du [générateur de configuration][ssl-config-generator] de [Server-Side TLS][server-side-tls] 383 | - [ssl_prefer_server_ciphers](http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_prefer_server_ciphers) indique que la liste et l'ordre du serveur priment sur ceux indiqués par le client. 384 | - [ssl_stapling](http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_stapling) et [ssl_stapling_verify](http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_stapling_verify) permettent d'activer la fonction de **OCSP stapling**, expliquée plus haut. [ssl_trusted_certificate](http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_trusted_certificate) indique à Nginx où trouver le fichier de la chaîne de certificats (généré plus haut). 385 | - [resolver](http://nginx.org/en/docs/http/ngx_http_ssl_module.html#resolver) indique l'adresse qu'il faut interroger pour les résolutions de nom, utilisée lors de la vérification de validité des certificats parents, via le protocole `OCSP`. 386 | 387 | # 4. Vérifications 388 | 389 | Pendant toute la durée des vérifications, je conseille de suivre les logs d'erreur de Nginx. 390 | Si une erreur s'est glissée quelque part, vous aurez plus de chance de la repérer comme ça. 391 | Il se peut par exemple que l'adresse du _resolver_ ne soit pas bonne (vécu sur un serveur sans _resolver_ local). 392 | 393 | → tail -f /var/log/nginx/error.log 394 | 395 | Une fois tout ceci configuré, il faut vérifier la configuration de Nginx puis, si elle est valide, la recharger : 396 | 397 | → service nginx configtest 398 | → service nginx reload 399 | 400 | ## Dans un navigateur 401 | 402 | Le premier test, et le plus simple, est de se rendre à l'adresse du site via un navigateur. La plupart des navigateurs propose un signe distinctif dans la barre d'adresse, qui indique si la navigation est chiffrée ou pas, si le certificat est valide. 403 | 404 | Dans Chrome par exemple si vous avez un joli cadenas vert, tout va bien. 405 | S'il est gris avec un triangle jaune, c'est presque bon mais il y a des obstacles à une navigation proprement chiffrée de bout en bout (certificat trop faible, sous-requêtes non chiffrées …). 406 | S'il est rouge et/ou barré, alors quelque chose ne va pas du tout. 407 | 408 | Et si aucun cadenas n'apparaît, c'est que la communication n'est pas chiffrée du tout. 409 | 410 | ## Avec [SSLLabs][ssllabs] 411 | 412 | Très bon outil en mode web pour vérifier la configuration SSL/TLS d'un domaine. Vous indiquez votre domaine et au bout d'une poignée de minutes il vous rend un rapport complet. 413 | 414 | Une note synthétique vous indique la qualité de votre configuration. 415 | Des conseils vous indiquent ce qu'il faut améliorer. Le détail de toutes les constations vos permet de savoir exactement ce qu'il en est. 416 | 417 | En suivant les recommandations de ce guide, j'ai obtenu une note générale de **A+** : 418 | 419 | - Certificate : 100% 420 | - Protocol Support : 95% 421 | - KeyExchange : 90% 422 | - Cipher Strength : 90% 423 | 424 | ## Avec [CipherScan][cipherscan] 425 | 426 | Il s'agit de quelques outils, écrits par [Julien Véhent][jvehent], pour analyser la configuration d'un domaine et faire des recommandations concrètes. 427 | 428 | ### cipherscan 429 | 430 | `cipherscan` est un script qui vous indique quelle est la configuration du certificat 431 | 432 | → ./cipherscan www.example.com 433 | 434 | ```` 435 | ........................ 436 | Target: www.example.com:443 437 | 438 | prio ciphersuite protocols pfs_keysize 439 | 1 ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 ECDH,P-256,256bits 440 | 2 ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 ECDH,P-256,256bits 441 | 3 DHE-RSA-AES128-GCM-SHA256 TLSv1.2 DH,4096bits 442 | 4 DHE-RSA-AES256-GCM-SHA384 TLSv1.2 DH,4096bits 443 | 5 ECDHE-RSA-AES128-SHA256 TLSv1.2 ECDH,P-256,256bits 444 | 6 ECDHE-RSA-AES128-SHA TLSv1,TLSv1.1,TLSv1.2 ECDH,P-256,256bits 445 | 7 ECDHE-RSA-AES256-SHA384 TLSv1.2 ECDH,P-256,256bits 446 | 8 ECDHE-RSA-AES256-SHA TLSv1,TLSv1.1,TLSv1.2 ECDH,P-256,256bits 447 | 9 DHE-RSA-AES128-SHA256 TLSv1.2 DH,4096bits 448 | 10 DHE-RSA-AES128-SHA TLSv1,TLSv1.1,TLSv1.2 DH,4096bits 449 | 11 DHE-RSA-AES256-SHA256 TLSv1.2 DH,4096bits 450 | 12 DHE-RSA-AES256-SHA TLSv1,TLSv1.1,TLSv1.2 DH,4096bits 451 | 13 AES128-GCM-SHA256 TLSv1.2 452 | 14 AES256-GCM-SHA384 TLSv1.2 453 | 15 AES128-SHA256 TLSv1.2 454 | 16 AES256-SHA256 TLSv1.2 455 | 17 AES128-SHA TLSv1,TLSv1.1,TLSv1.2 456 | 18 AES256-SHA TLSv1,TLSv1.1,TLSv1.2 457 | 19 DHE-RSA-CAMELLIA256-SHA TLSv1,TLSv1.1,TLSv1.2 DH,4096bits 458 | 20 CAMELLIA256-SHA TLSv1,TLSv1.1,TLSv1.2 459 | 21 DHE-RSA-CAMELLIA128-SHA TLSv1,TLSv1.1,TLSv1.2 DH,4096bits 460 | 22 CAMELLIA128-SHA TLSv1,TLSv1.1,TLSv1.2 461 | 23 DES-CBC3-SHA TLSv1,TLSv1.1,TLSv1.2 462 | 463 | Certificate: trusted, 2048 bit, sha256WithRSAEncryption signature 464 | TLS ticket lifetime hint: 300 465 | OCSP stapling: supported 466 | Server side cipher ordering 467 | ```` 468 | 469 | Il sait également exporter ses résultats au format JSON. 470 | 471 | ### analyze.py 472 | 473 | `analyze.py` est un script qui vous indique si votre certificat respecte le niveau souhaité 474 | 475 | → ./analyze.py -l intermediate -t www.example.com 476 | 477 | ```` 478 | www.example.com:443 has intermediate ssl/tls 479 | and complies with the 'intermediate' level 480 | ```` 481 | 482 | Ce dernier peut être exécuté en _mode Nagios_ afin d'automatiser des tests régulier et émettre des alertes si la conformité était compromise. 483 | 484 | En plus d'analyser un site en direct, il sait utiliser en entrée un fichier JSON local (sorti de `cipherscan`), mais aussi exporter ses propres résultats dans un fichier JSON (pour par exemple garder un historique structuré des conclusions). 485 | 486 | ### openssl 487 | 488 | Des version binaires d'OpenSSL sont fournies au cas où le système hôte n'en dispose pas où si elle est problématique. C'est notamment le cas pour Mac OS X. 489 | 490 | Aussi bien `cipherscan` que `analyze.py` peuvent utiliser la version du système ou une version spécifique (avec l'option `-o`). 491 | 492 | # 5. Ressources utiles 493 | 494 | 495 | **[How 2 SSL][how2ssl] (en anglais)** 496 | 497 | Une sorte de mini-wiki sur le SSL avec des clarifications et des approfondissements de certains concepts clés. 498 | 499 | **[Je Veux HTTPS][jeveuxhttps] (en français)** 500 | 501 | Un bon site, écrit en français. Si je ne l'avais pas découvert tardivement, je n'aurais probablement pas écrit cet article. 502 | 503 | **[Server-Side TLS][server-side-tls] (en anglais)** 504 | 505 | Un long guide, très complet, à propos de la mise en place de TLS côté serveur, avec des explications concrètes et claires sur tous les éléments en jeu. 506 | 507 | **[TLS with Nginx and StartSSL](https://jve.linuxwall.info/blog/index.php?post/2013/10/12/A-grade-SSL/TLS-with-Nginx-and-StartSSL) (en anglais)** 508 | 509 | Un article de [Julien Véhent][jvehent] sur un thème similaire. 510 | Julien est OpSec chez Mozilla. Il est l'auteur de [Server-Side TLS][server-side-tls]. 511 | 512 | **[SSL config generator][ssl-config-generator] (en anglais)** 513 | 514 | Un outil d'aide à la configuration de Apache/Nginx/HAProxy, basé sur les recommandations de [Server-Side TLS][server-side-tls]. 515 | 516 | **[Howto SSL][howto-ssl-evolix]** 517 | 518 | Mon [hébergeur favori][evolix] maintient un excellent [Wiki sur l'infogérance Linux/BSD][wiki-evolix]. Ils ont notamment un [article sur les certificats SSL][howto-ssl-evolix], avec des exemples plus précis de manipulation de certificats. 519 | 520 | **[Is TLS Fast Yet?][istlsfastyet]** 521 | 522 | Pour creuser encore plus la question des performances de la partie SSL/TLS, [Ilya Grigorik][igrigorik] propose des conseils, des comparatifs, des mesures, etc. 523 | 524 | # Contributions 525 | 526 | Ce guide est écrit et tenu à jour par [Jérémy Lecour](https://github.com/jlecour/). 527 | 528 | Merci à ceux qui l'ont relu, conseillé, proposé des corrections et clarifications : 529 | 530 | - [Jef Mathiot](https://github.com/jefmathiot) 531 | - [Jérôme Pinguet](https://github.com/jeromecc) 532 | - [Benoît.S](https://twitter.com/benpro82) 533 | - [Geoffroy Desvernay](https://github.com/dgeo) 534 | - [Julien Véhent][jvehent] 535 | - [Mayeu](https://twitter.com/mayeu) 536 | - [Canarduck](https://github.com/canarduck) 537 | - [kslimani](https://github.com/kslimani) 538 | 539 | [evolix]: http://www.evolix.fr "Evolix" 540 | [howto-ssl-evolix]: http://trac.evolix.net/infogerance/wiki/HowtoSSL "Howto SSL" 541 | [wiki-evolix]: http://trac.evolix.net/infogerance/wiki "Infogerance Linux et BSD" 542 | [mitm]: http://fr.wikipedia.org/wiki/Attaque_de_l%27homme_du_milieu "Man In The Middle" 543 | [jeveuxhttps]: https://www.jeveuxhttps.fr/ "Je Veux HTTPS" 544 | [jvehent]: http://jve.linuxwall.info/ "Julien Véhent" 545 | [how2ssl]: http://how2ssl.com "How 2 SSL" 546 | [server-side-tls]: https://wiki.mozilla.org/Security/Server_Side_TLS "Server Side TLS" 547 | [ssllabs]: https://www.ssllabs.com/ssltest/analyze.html "SSLLabs" 548 | [cipherscan]: https://github.com/jvehent/cipherscan "CipherScan" 549 | [ssl-config-generator]: https://mozilla.github.io/server-side-tls/ssl-config-generator/ "SSL config generator" 550 | [istlsfastyet]: https://istlsfastyet.com "Is TLS Fast Yet?" 551 | [igrigorik]: https://twitter.com/igrigorik "Ilya Grigorik" 552 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Jérémy Lecour 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Ce dépôt contient le code source du guide pour l'installation d'un certificat SSL signé par Gandi, sur le serveur Nginx. 2 | 3 | Le guide en lui-même est consultable sur [mon blog][guide] et son contenu est dans [GUIDE.md][guide-src] 4 | 5 | Je découvre le sujet, j'ai donc probablement fait des confusions, raté des conventions, mélangé des concepts, et peut-être même insulté des divinités. 6 | 7 | N'hésitez pas à utiliser tous les moyens nécessaires ([issue][new-issue] ou [pull-request][pull-requests] GitHub, [twitter][jlecour], mail …) pour me faire vos retours, sur le fond comme sur la forme. 8 | 9 | [guide]: https://jeremy.lecour.fr/blog/2015/01/17/gandi-ssl-avec-nginx/ "Guide" 10 | [guide-src]: https://github.com/jlecour/ssl-gandi-nginx-debian/blob/master/GUIDE.md 11 | [jlecour]: https://twitter.com/jlecour "@jlecour" 12 | [new-issue]: https://github.com/jlecour/ssl-gandi-nginx-debian/issues/new "New Issue" 13 | [pull-requests]: https://github.com/jlecour/ssl-gandi-nginx-debian/pulls "Pull-Requests" 14 | -------------------------------------------------------------------------------- /etc/nginx/nginx.conf: -------------------------------------------------------------------------------- 1 | user www-data; 2 | worker_processes 32; 3 | pid /var/run/nginx.pid; 4 | 5 | events { 6 | worker_connections 768; 7 | } 8 | 9 | http { 10 | sendfile on; 11 | tcp_nopush on; 12 | tcp_nodelay on; 13 | keepalive_timeout 65; 14 | 15 | include /etc/nginx/mime.types; 16 | default_type application/octet-stream; 17 | 18 | access_log /var/log/nginx/access.log; 19 | error_log /var/log/nginx/error.log; 20 | 21 | ## 22 | # Virtual Host Configs 23 | ## 24 | 25 | include /etc/nginx/conf.d/*.conf; 26 | include /etc/nginx/sites-enabled/*; 27 | } -------------------------------------------------------------------------------- /etc/nginx/sites-enabled/www_example_com.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | rewrite ^ https://$host$request_uri? permanent; 4 | } 5 | server { 6 | listen 443 ssl; 7 | 8 | server_name www.example.com; 9 | 10 | include /etc/nginx/wildcard_example_com.ssl.conf; 11 | add_header Strict-Transport-Security max-age=31536000; 12 | 13 | root /var/www/example; 14 | index index.htm index.html; 15 | } -------------------------------------------------------------------------------- /etc/nginx/wildcard_example_com.ssl.conf: -------------------------------------------------------------------------------- 1 | # certs sent to the client in SERVER HELLO are concatenated in ssl_certificate 2 | ssl_certificate /etc/ssl/certs/wildcard_example_com.chain.pem; 3 | ssl_certificate_key /etc/ssl/private/wildcard_example_com.key.pem; 4 | ssl_session_timeout 24h; 5 | ssl_session_cache shared:SSL:10m; 6 | 7 | # Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits or better 8 | ssl_dhparam /etc/ssl/dhparam.pem; 9 | 10 | ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 11 | ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; 12 | ssl_prefer_server_ciphers on; 13 | 14 | ## OCSP Stapling --- 15 | ## fetch OCSP records from URL in ssl_certificate and cache them 16 | ssl_stapling on; 17 | ssl_stapling_verify on; 18 | 19 | ## verify chain of trust of OCSP response using Root CA and Intermediate certs 20 | ssl_trusted_certificate /etc/ssl/certs/gandi-standardssl-2.chain.pem; 21 | 22 | resolver 127.0.0.1; -------------------------------------------------------------------------------- /etc/ssl/certs/gandi-standardssl-2.chain.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIF6TCCA9GgAwIBAgIQBeTcO5Q4qzuFl8umoZhQ4zANBgkqhkiG9w0BAQwFADCB 3 | iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl 4 | cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV 5 | BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTQw 6 | OTEyMDAwMDAwWhcNMjQwOTExMjM1OTU5WjBfMQswCQYDVQQGEwJGUjEOMAwGA1UE 7 | CBMFUGFyaXMxDjAMBgNVBAcTBVBhcmlzMQ4wDAYDVQQKEwVHYW5kaTEgMB4GA1UE 8 | AxMXR2FuZGkgU3RhbmRhcmQgU1NMIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IB 9 | DwAwggEKAoIBAQCUBC2meZV0/9UAPPWu2JSxKXzAjwsLibmCg5duNyj1ohrP0pIL 10 | m6jTh5RzhBCf3DXLwi2SrCG5yzv8QMHBgyHwv/j2nPqcghDA0I5O5Q1MsJFckLSk 11 | QFEW2uSEEi0FXKEfFxkkUap66uEHG4aNAXLy59SDIzme4OFMH2sio7QQZrDtgpbX 12 | bmq08j+1QvzdirWrui0dOnWbMdw+naxb00ENbLAb9Tr1eeohovj0M1JLJC0epJmx 13 | bUi8uBL+cnB89/sCdfSN3tbawKAyGlLfOGsuRTg/PwSWAP2h9KK71RfWJ3wbWFmV 14 | XooS/ZyrgT5SKEhRhWvzkbKGPym1bgNi7tYFAgMBAAGjggF1MIIBcTAfBgNVHSME 15 | GDAWgBRTeb9aqitKz1SA4dibwJ3ysgNmyzAdBgNVHQ4EFgQUs5Cn2MmvTs1hPJ98 16 | rV1/Qf1pMOowDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYD 17 | VR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMCIGA1UdIAQbMBkwDQYLKwYBBAGy 18 | MQECAhowCAYGZ4EMAQIBMFAGA1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9jcmwudXNl 19 | cnRydXN0LmNvbS9VU0VSVHJ1c3RSU0FDZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNy 20 | bDB2BggrBgEFBQcBAQRqMGgwPwYIKwYBBQUHMAKGM2h0dHA6Ly9jcnQudXNlcnRy 21 | dXN0LmNvbS9VU0VSVHJ1c3RSU0FBZGRUcnVzdENBLmNydDAlBggrBgEFBQcwAYYZ 22 | aHR0cDovL29jc3AudXNlcnRydXN0LmNvbTANBgkqhkiG9w0BAQwFAAOCAgEAWGf9 23 | crJq13xhlhl+2UNG0SZ9yFP6ZrBrLafTqlb3OojQO3LJUP33WbKqaPWMcwO7lWUX 24 | zi8c3ZgTopHJ7qFAbjyY1lzzsiI8Le4bpOHeICQW8owRc5E69vrOJAKHypPstLbI 25 | FhfFcvwnQPYT/pOmnVHvPCvYd1ebjGU6NSU2t7WKY28HJ5OxYI2A25bUeo8tqxyI 26 | yW5+1mUfr13KFj8oRtygNeX56eXVlogMT8a3d2dIhCe2H7Bo26y/d7CQuKLJHDJd 27 | ArolQ4FCR7vY4Y8MDEZf7kYzawMUgtN+zY+vkNaOJH1AQrRqahfGlZfh8jjNp+20 28 | J0CT33KpuMZmYzc4ZCIwojvxuch7yPspOqsactIGEk72gtQjbz7Dk+XYtsDe3CMW 29 | 1hMwt6CaDixVBgBwAc/qOR2A24j3pSC4W/0xJmmPLQphgzpHphNULB7j7UTKvGof 30 | KA5R2d4On3XNDgOVyvnFqSot/kGkoUeuDcL5OWYzSlvhhChZbH2UF3bkRYKtcCD9 31 | 0m9jqNf6oDP6N8v3smWe2lBvP+Sn845dWDKXcCMu5/3EFZucJ48y7RetWIExKREa 32 | m9T8bJUox04FB6b9HbwZ4ui3uRGKLXASUoWNjDNKD/yZkuBjcNqllEdjB+dYxzFf 33 | BT02Vf6Dsuimrdfp5gJ0iHRc2jTbkNJtUQoj1iM= 34 | -----END CERTIFICATE----- 35 | -----BEGIN CERTIFICATE----- 36 | MIIFdzCCBF+gAwIBAgIQE+oocFv07O0MNmMJgGFDNjANBgkqhkiG9w0BAQwFADBv 37 | MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFk 38 | ZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBF 39 | eHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFow 40 | gYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5MRQwEgYDVQQHEwtK 41 | ZXJzZXkgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMS4wLAYD 42 | VQQDEyVVU0VSVHJ1c3QgUlNBIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjAN 43 | BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAgBJlFzYOw9sIs9CsVw127c0n00yt 44 | UINh4qogTQktZAnczomfzD2p7PbPwdzx07HWezcoEStH2jnGvDoZtF+mvX2do2NC 45 | tnbyqTsrkfjib9DsFiCQCT7i6HTJGLSR1GJk23+jBvGIGGqQIjy8/hPwhxR79uQf 46 | jtTkUcYRZ0YIUcuGFFQ/vDP+fmyc/xadGL1RjjWmp2bIcmfbIWax1Jt4A8BQOujM 47 | 8Ny8nkz+rwWWNR9XWrf/zvk9tyy29lTdyOcSOk2uTIq3XJq0tyA9yn8iNK5+O2hm 48 | AUTnAU5GU5szYPeUvlM3kHND8zLDU+/bqv50TmnHa4xgk97Exwzf4TKuzJM7UXiV 49 | Z4vuPVb+DNBpDxsP8yUmazNt925H+nND5X4OpWaxKXwyhGNVicQNwZNUMBkTrNN9 50 | N6frXTpsNVzbQdcS2qlJC9/YgIoJk2KOtWbPJYjNhLixP6Q5D9kCnusSTJV882sF 51 | qV4Wg8y4Z+LoE53MW4LTTLPtW//e5XOsIzstAL81VXQJSdhJWBp/kjbmUZIO8yZ9 52 | HE0XvMnsQybQv0FfQKlERPSZ51eHnlAfV1SoPv10Yy+xUGUJ5lhCLkMaTLTwJUdZ 53 | +gQek9QmRkpQgbLevni3/GcV4clXhB4PY9bpYrrWX1Uu6lzGKAgEJTm4Diup8kyX 54 | HAc/DVL17e8vgg8CAwEAAaOB9DCB8TAfBgNVHSMEGDAWgBStvZh6NLQm9/rEJlTv 55 | A73gJMtUGjAdBgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/ 56 | BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0gBAowCDAGBgRVHSAAMEQGA1Ud 57 | HwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9BZGRUcnVzdEV4 58 | dGVybmFsQ0FSb290LmNybDA1BggrBgEFBQcBAQQpMCcwJQYIKwYBBQUHMAGGGWh0 59 | dHA6Ly9vY3NwLnVzZXJ0cnVzdC5jb20wDQYJKoZIhvcNAQEMBQADggEBAJNl9jeD 60 | lQ9ew4IcH9Z35zyKwKoJ8OkLJvHgwmp1ocd5yblSYMgpEg7wrQPWCcR23+WmgZWn 61 | RtqCV6mVksW2jwMibDN3wXsyF24HzloUQToFJBv2FAY7qCUkDrvMKnXduXBBP3zQ 62 | YzYhBx9G/2CkkeFnvN4ffhkUyWNnkepnB2u0j4vAbkN9w6GAbLIevFOFfdyQoaS8 63 | Le9Gclc1Bb+7RrtubTeZtv8jkpHGbkD4jylW6l/VXxRTrPBPYer3IsynVgviuDQf 64 | Jtl7GQVoP7o81DgGotPmjw7jtHFtQELFhLRAlSv0ZaBIefYdgWOWnU914Ph85I6p 65 | 0fKtirOMxyHNwu8= 66 | -----END CERTIFICATE----- 67 | -----BEGIN CERTIFICATE----- 68 | MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU 69 | MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs 70 | IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 71 | MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux 72 | FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h 73 | bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v 74 | dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt 75 | H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 76 | uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX 77 | mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX 78 | a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN 79 | E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 80 | WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD 81 | VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 82 | Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU 83 | cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx 84 | IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN 85 | AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH 86 | YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 87 | 6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC 88 | Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX 89 | c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a 90 | mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= 91 | -----END CERTIFICATE----- -------------------------------------------------------------------------------- /etc/ssl/certs/wildcard_example_com.chain.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 3 | -----END CERTIFICATE----- 4 | -----BEGIN CERTIFICATE----- 5 | MIIF6TCCA9GgAwIBAgIQBeTcO5Q4qzuFl8umoZhQ4zANBgkqhkiG9w0BAQwFADCB 6 | iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl 7 | cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV 8 | BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTQw 9 | OTEyMDAwMDAwWhcNMjQwOTExMjM1OTU5WjBfMQswCQYDVQQGEwJGUjEOMAwGA1UE 10 | CBMFUGFyaXMxDjAMBgNVBAcTBVBhcmlzMQ4wDAYDVQQKEwVHYW5kaTEgMB4GA1UE 11 | AxMXR2FuZGkgU3RhbmRhcmQgU1NMIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IB 12 | DwAwggEKAoIBAQCUBC2meZV0/9UAPPWu2JSxKXzAjwsLibmCg5duNyj1ohrP0pIL 13 | m6jTh5RzhBCf3DXLwi2SrCG5yzv8QMHBgyHwv/j2nPqcghDA0I5O5Q1MsJFckLSk 14 | QFEW2uSEEi0FXKEfFxkkUap66uEHG4aNAXLy59SDIzme4OFMH2sio7QQZrDtgpbX 15 | bmq08j+1QvzdirWrui0dOnWbMdw+naxb00ENbLAb9Tr1eeohovj0M1JLJC0epJmx 16 | bUi8uBL+cnB89/sCdfSN3tbawKAyGlLfOGsuRTg/PwSWAP2h9KK71RfWJ3wbWFmV 17 | XooS/ZyrgT5SKEhRhWvzkbKGPym1bgNi7tYFAgMBAAGjggF1MIIBcTAfBgNVHSME 18 | GDAWgBRTeb9aqitKz1SA4dibwJ3ysgNmyzAdBgNVHQ4EFgQUs5Cn2MmvTs1hPJ98 19 | rV1/Qf1pMOowDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYD 20 | VR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMCIGA1UdIAQbMBkwDQYLKwYBBAGy 21 | MQECAhowCAYGZ4EMAQIBMFAGA1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9jcmwudXNl 22 | cnRydXN0LmNvbS9VU0VSVHJ1c3RSU0FDZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNy 23 | bDB2BggrBgEFBQcBAQRqMGgwPwYIKwYBBQUHMAKGM2h0dHA6Ly9jcnQudXNlcnRy 24 | dXN0LmNvbS9VU0VSVHJ1c3RSU0FBZGRUcnVzdENBLmNydDAlBggrBgEFBQcwAYYZ 25 | aHR0cDovL29jc3AudXNlcnRydXN0LmNvbTANBgkqhkiG9w0BAQwFAAOCAgEAWGf9 26 | crJq13xhlhl+2UNG0SZ9yFP6ZrBrLafTqlb3OojQO3LJUP33WbKqaPWMcwO7lWUX 27 | zi8c3ZgTopHJ7qFAbjyY1lzzsiI8Le4bpOHeICQW8owRc5E69vrOJAKHypPstLbI 28 | FhfFcvwnQPYT/pOmnVHvPCvYd1ebjGU6NSU2t7WKY28HJ5OxYI2A25bUeo8tqxyI 29 | yW5+1mUfr13KFj8oRtygNeX56eXVlogMT8a3d2dIhCe2H7Bo26y/d7CQuKLJHDJd 30 | ArolQ4FCR7vY4Y8MDEZf7kYzawMUgtN+zY+vkNaOJH1AQrRqahfGlZfh8jjNp+20 31 | J0CT33KpuMZmYzc4ZCIwojvxuch7yPspOqsactIGEk72gtQjbz7Dk+XYtsDe3CMW 32 | 1hMwt6CaDixVBgBwAc/qOR2A24j3pSC4W/0xJmmPLQphgzpHphNULB7j7UTKvGof 33 | KA5R2d4On3XNDgOVyvnFqSot/kGkoUeuDcL5OWYzSlvhhChZbH2UF3bkRYKtcCD9 34 | 0m9jqNf6oDP6N8v3smWe2lBvP+Sn845dWDKXcCMu5/3EFZucJ48y7RetWIExKREa 35 | m9T8bJUox04FB6b9HbwZ4ui3uRGKLXASUoWNjDNKD/yZkuBjcNqllEdjB+dYxzFf 36 | BT02Vf6Dsuimrdfp5gJ0iHRc2jTbkNJtUQoj1iM= 37 | -----END CERTIFICATE----- 38 | -----BEGIN CERTIFICATE----- 39 | MIIFdzCCBF+gAwIBAgIQE+oocFv07O0MNmMJgGFDNjANBgkqhkiG9w0BAQwFADBv 40 | MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFk 41 | ZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBF 42 | eHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFow 43 | gYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5MRQwEgYDVQQHEwtK 44 | ZXJzZXkgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMS4wLAYD 45 | VQQDEyVVU0VSVHJ1c3QgUlNBIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjAN 46 | BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAgBJlFzYOw9sIs9CsVw127c0n00yt 47 | UINh4qogTQktZAnczomfzD2p7PbPwdzx07HWezcoEStH2jnGvDoZtF+mvX2do2NC 48 | tnbyqTsrkfjib9DsFiCQCT7i6HTJGLSR1GJk23+jBvGIGGqQIjy8/hPwhxR79uQf 49 | jtTkUcYRZ0YIUcuGFFQ/vDP+fmyc/xadGL1RjjWmp2bIcmfbIWax1Jt4A8BQOujM 50 | 8Ny8nkz+rwWWNR9XWrf/zvk9tyy29lTdyOcSOk2uTIq3XJq0tyA9yn8iNK5+O2hm 51 | AUTnAU5GU5szYPeUvlM3kHND8zLDU+/bqv50TmnHa4xgk97Exwzf4TKuzJM7UXiV 52 | Z4vuPVb+DNBpDxsP8yUmazNt925H+nND5X4OpWaxKXwyhGNVicQNwZNUMBkTrNN9 53 | N6frXTpsNVzbQdcS2qlJC9/YgIoJk2KOtWbPJYjNhLixP6Q5D9kCnusSTJV882sF 54 | qV4Wg8y4Z+LoE53MW4LTTLPtW//e5XOsIzstAL81VXQJSdhJWBp/kjbmUZIO8yZ9 55 | HE0XvMnsQybQv0FfQKlERPSZ51eHnlAfV1SoPv10Yy+xUGUJ5lhCLkMaTLTwJUdZ 56 | +gQek9QmRkpQgbLevni3/GcV4clXhB4PY9bpYrrWX1Uu6lzGKAgEJTm4Diup8kyX 57 | HAc/DVL17e8vgg8CAwEAAaOB9DCB8TAfBgNVHSMEGDAWgBStvZh6NLQm9/rEJlTv 58 | A73gJMtUGjAdBgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/ 59 | BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0gBAowCDAGBgRVHSAAMEQGA1Ud 60 | HwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9BZGRUcnVzdEV4 61 | dGVybmFsQ0FSb290LmNybDA1BggrBgEFBQcBAQQpMCcwJQYIKwYBBQUHMAGGGWh0 62 | dHA6Ly9vY3NwLnVzZXJ0cnVzdC5jb20wDQYJKoZIhvcNAQEMBQADggEBAJNl9jeD 63 | lQ9ew4IcH9Z35zyKwKoJ8OkLJvHgwmp1ocd5yblSYMgpEg7wrQPWCcR23+WmgZWn 64 | RtqCV6mVksW2jwMibDN3wXsyF24HzloUQToFJBv2FAY7qCUkDrvMKnXduXBBP3zQ 65 | YzYhBx9G/2CkkeFnvN4ffhkUyWNnkepnB2u0j4vAbkN9w6GAbLIevFOFfdyQoaS8 66 | Le9Gclc1Bb+7RrtubTeZtv8jkpHGbkD4jylW6l/VXxRTrPBPYer3IsynVgviuDQf 67 | Jtl7GQVoP7o81DgGotPmjw7jtHFtQELFhLRAlSv0ZaBIefYdgWOWnU914Ph85I6p 68 | 0fKtirOMxyHNwu8= 69 | -----END CERTIFICATE----- -------------------------------------------------------------------------------- /etc/ssl/certs/wildcard_example_com.crt.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 3 | -----END CERTIFICATE----- -------------------------------------------------------------------------------- /etc/ssl/dhparam.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN DH PARAMETERS----- 2 | MZ9wdNIzSPihtIKQLMBF1GS6UJKjIQznU06XeY0d5u4LanYngWCTFPaa3MqN9h/Z 3 | ThWGYMx7Aa6I82Tao0my2ee6jvOC5yc9dSEW51cjHdhjASzhtUEoIXLGTasfp2QF 4 | ZA85bq8/iU/n8qGYvSk5ieP1xhOI07YxaReER/0wmG9rHIBrnYn2j5nYSxfcPfsQ 5 | oqzyJPg+dp7vifJAWxj/2jkzbUK9Ij3hHiFitdNCmqRqCpIjrU6Zq+ZenRz9T3KE 6 | 8PhK6yAqCQriNWFcWJ9lubNC792n7qbTFrUw/xT732AK5BD2BuliSlo6Oy6La0zQ 7 | QZK68V0RM3hBt6CVQ80vfhYmT+3f54gNB9jfeHCwqLCYotWdmO7Q03FR+mgA4Zhg 8 | Cb1aqQMsqmIbUEWArsZqkCQ0qC4EiGLGMtYE4Cawiss6I8im2g0oHCC9CF/N7A/Y 9 | YE8LxxdYP39RpnYEYEpd08nnIw8cML08vhuu++duXdhsOQMnMOENi2B8g4NtGKSr 10 | lJ4WezMYNUM9hffYnVDIE+pXoL+snC9ye6xr3yMg6ym3aVrsofAanKIEkYNNsPf1 11 | RXeXw8u33gtWvnqnnNrwfk0Q5H2gaAqOCntIrbE68Zn5+WGKWfW3w1mP/U+TRExx 12 | A/q9Cm/STK80ZQkdnfdm7qnJFG/+vJ7LTdIN4L1vMxkaMg2c5q63FQpdPCAQI= 13 | -----END DH PARAMETERS----- -------------------------------------------------------------------------------- /etc/ssl/private/wildcard_example_com.csr.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE REQUEST----- 2 | MIICzzCCAbcCAQAwgYkxCzAJBgNVBAYTAkZSMRMwEQYDVQQIEwpTb21lLVN0YXRl 3 | MRIwEAYDVQQHEwlNYXJzZWlsbGUxFTATBgNVBAoTDEV4YW1wbGUgSW5jLjEWMBQG 4 | A1UEAxQNKi5leGFtcGxlLmNvbTEiMCAGCSqGSIb3DQEJARYTY29udGFjdEBleGFt 5 | cGxlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKO13wEpS2Ka 6 | unLpJVLF2AqYVZV4OK7p7OG4IfVhkK5wP/kh8KYxyOHZZDx+rGfJE1UA8dJQd+EV 7 | xST0tdN2tw0Dv0jSv6SjXoQO1inTbDf+qixxAj/RxAVmn8AuWC3g/YtI7Wikb3PO 8 | +h81Ezb7i4rkZGYoFleDOpprQvxZEKVXOyU9bumKJRY3YO7xmwdV1pVt+vwgyR+8 9 | sI1R7OCglPwdYlRD9R0ZFEzpPYkDmY7qkx9Jk+TJNewSyS4wy6qg6Neguxg+hYaD 10 | MLY5kXmhmRBHlTaOznbi8m/lEIszH9/r+4weDjt66DPEmM0vUEl3p8dZUb2Nkn7n 11 | gBOCM4/mdhcCAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQAri8Gtz2SkiBMXb4Me 12 | ICL/exVrM6q03wcrFSOE9XJbcyOOA1gP8+zWNcNlMyfd/MpB5lNRPdzKT01zb17z 13 | kiteEDTSvGMTwklWJN08hJDXPXs2POnQDZau/FEAvLM8jWheq+UzSsIsuSju1MUJ 14 | ra8d/3FH25J5eRCvy63tPpje9qk+EoHxO5g22QCcgXIc2CANicLNjTKkECG+TRN1 15 | WMmir+a2+raBgNZCrE5N87SsfHnhPZEJExXL5AuKTAOH3FcBb0G1f4KcKPgULbrE 16 | aH9rpFywuEMgnkp3eRoxtPs7UuTVTaNIjCJX+Q5oY2eT6cH1UVwn8qnJe1j8S6Mx 17 | CGi7 18 | -----END CERTIFICATE REQUEST----- 19 | -------------------------------------------------------------------------------- /etc/ssl/private/wildcard_example_com.key.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | MIIEpAIBAAKCAQEAo7XfASlLYpq6cuklUsXYCphVlXg4runs4bgh9WGQrnA/+SHw 3 | pjHI4dlkPH6sZ8kTVQDx0lB34RXFJPS103a3DQO/SNK/pKNehA7WKdNsN/6qLHEC 4 | P9HEBWafwC5YLeD9i0jtaKRvc876HzUTNvuLiuRkZigWV4M6mmtC/FkQpVc7JT1u 5 | 6YolFjdg7vGbB1XWlW36/CDJH7ywjVHs4KCU/B1iVEP1HRkUTOk9iQOZjuqTH0mT 6 | 5Mk17BLJLjDLqqDo16C7GD6FhoMwtjmReaGZEEeVNo7OduLyb+UQizMf3+v7jB4O 7 | O3roM8SYzS9QSXenx1lRvY2SfueAE4Izj+Z2FwIDAQABAoIBAQCO7LlEykiGTY95 8 | wxJSsWdr2JLfa5YRHykv5xG+qO8nW9h+KKNwdQZsJt7b8buS4HmAPNLiSl5epCL5 9 | oKsdcwdc1Wiqq1Ok6PwbTtiqq2pPeIYZRpAwJ3J7RJ0zq0JQy5yPfZvHP8gN0yWL 10 | GUstNW8eU0dT6KuYu3juV7ajmR5vOdNeGcxftA/gN0SQGlSuK14K2pyZAirBejNc 11 | RozPtC4tF6XLgrUUcmYlw2q5Uji5jJah8LZQEf6rFi36y43iteYE+7bz/gnBZ7tP 12 | 7y7SozkvtZ8tVUl8I0LtNz3KOv/ukTasNFBIQpWK5auU2n4BMw047nSPP4nWL5+J 13 | TOaGu0ABAoGBANE5obJtNtNh+zgNv9qKAjHAvBgg+T43bZoqgQJzXsoKveezQ6K7 14 | x+4yZ7nie2WoKoRO2w3Gsa0JHqoslK6bg3MVaabU1miLR73UFkHPW5qkMzSb9ndN 15 | P/v/LWO1glbHMqO9kewdJoJEjFwUoWVdEKQvUW5ZoLya3wHU8Ab1vTtBAoGBAMhP 16 | V/eA57lF9Pq+aEfljyaXvASzgAJM8KQHyG16I3LiK5CFVIHPrDvCH4HybeuwCG7S 17 | HfM29678DzZpTHfplfnKXlPoG/QJCsiKUtn3OMTHyiUsHT/j2juqA6cZ3/0G5LO8 18 | 4zNQpLrrzgrrf4P/p6pXVZKmIERTdDVBhaWkUZNXAoGACzzNMogrKa9ZjukuJM7E 19 | z2dKswESYgUYHe+qfjc0ICXzjT5To6nyUxjh+VnwxsUBg5m4qkTBxkl3HCzIz5gK 20 | t2OvCQblfTf94nRBvcclZGjtVyYJVt8PULmj9ncJSR/p2GGWNNhb+SM1Zry07nzR 21 | KABin0qxF3A6Ch8lxTntsAECgYEAvVWR9lYXsZ4YUzHK67pmNrpRc7gfFQ2Yn9Lj 22 | deduvlZdizsbh5++UrXIhlGZ6J75OZbNzGh2cSW7U1jweJ+HrRXFV1Ybpe0uDiQA 23 | 8BmnxQh7X+t0skEytBadYUMp3sa3QdUWhBiDvFLK7LNwUlpCJtZqAjWYZjzjqLsI 24 | Emtg1/0CgYA214z3XCLXqenPDcJuYHoKaDNY7hBJpcMx+PC/djHa5lbFCYzfhg7h 25 | A+sH/qFmLTkb3Ha+S4uRTWlEfMk7iliwAGfGhYBTCjUQiqdLdwSkO6YBey0nXZLJ 26 | E0pV7+shRPoK7jguy6zzSHK1ygWnqTSn8TePgtIXOoVcZoH6jQBfcA== 27 | -----END RSA PRIVATE KEY----- 28 | --------------------------------------------------------------------------------