[{"data":1,"prerenderedAt":1235},["ShallowReactive",2],{"blog-\u002Fen\u002Fblog\u002Flets-encrypt-certificat-gratuit-valide":3,"blog-\u002Fen\u002Fblog\u002Flets-encrypt-certificat-gratuit-valide-surround":1180,"blog-\u002Fen\u002Fblog\u002Flets-encrypt-certificat-gratuit-valide-certifications":1234},{"id":4,"title":5,"body":6,"categories":1169,"cover":1170,"cover_contain":211,"credly_badge_id":1169,"date":1171,"description":1172,"extension":1173,"meta":1174,"navigation":211,"path":1175,"related_certifications":1169,"seo":1176,"slug":1177,"stem":1178,"__hash__":1179},"blog\u002Fen\u002Fblog\u002Flets-encrypt-certificat-gratuit-valide.md","Let's Encrypt: a Free, Valid Certificate",{"type":7,"value":8,"toc":1162},"minimark",[9,14,18,22,33,40,44,47,84,87,103,106,140,143,156,159,394,397,410,413,432,435,457,460,479,482,496,499,503,506,527,530,546,549,558,561,742,745,836,839,854,857,1147,1154,1158],[10,11,13],"h2",{"id":12},"real-world-use-case","Real-world use case",[15,16,17],"p",{},"You want to encrypt your domains without paying for a commercial certificate: discover how to set up Let's Encrypt.",[10,19,21],{"id":20},"lets-encrypt-a-free-valid-certificate","Let's Encrypt: a free, valid certificate",[15,23,24,25,32],{},"The SSL certificate has been an essential trust element since Edward Snowden's revelations in 2013. On top of that, secure sites are favored in search results. In our case, we'll use the Let's Encrypt service, which is open source (",[26,27,31],"a",{"href":28,"rel":29},"https:\u002F\u002Fgithub.com\u002Fletsencrypt\u002F",[30],"nofollow","GitHub",") and funded by major names on the web, like Mozilla for example.",[15,34,35,39],{},[36,37,38],"strong",{},"Info:"," In this article, we'll use our SSL certificate with the Pound reverse proxy and make certificate renewal easier (since it's only valid for 90 days).",[10,41,43],{"id":42},"a-service-thats-simple-to-use","A service that's simple to use",[15,45,46],{},"In every use case, Let's Encrypt requires a prerequisite before deployment. Your domain's (or subdomain's) A record needs to point to the server that will use the certificate(s). Next, we'll get the project's sources via git and move into its directory:",[48,49,54],"pre",{"className":50,"code":51,"language":52,"meta":53,"style":53},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","git clone https:\u002F\u002Fgithub.com\u002Fletsencrypt\u002Fletsencrypt && cd letsencrypt\n","bash","",[55,56,57],"code",{"__ignoreMap":53},[58,59,62,66,70,73,77,81],"span",{"class":60,"line":61},"line",1,[58,63,65],{"class":64},"sBMFI","git",[58,67,69],{"class":68},"sfazB"," clone",[58,71,72],{"class":68}," https:\u002F\u002Fgithub.com\u002Fletsencrypt\u002Fletsencrypt",[58,74,76],{"class":75},"sMK4o"," &&",[58,78,80],{"class":79},"s2Zo4"," cd",[58,82,83],{"class":68}," letsencrypt\n",[15,85,86],{},"Let's Encrypt requires that the http and https ports not be listening on the server, so let's stop the Pound service:",[48,88,90],{"className":50,"code":89,"language":52,"meta":53,"style":53},"service pound stop\n",[55,91,92],{"__ignoreMap":53},[58,93,94,97,100],{"class":60,"line":61},[58,95,96],{"class":64},"service",[58,98,99],{"class":68}," pound",[58,101,102],{"class":68}," stop\n",[15,104,105],{},"Here's a usage example for generating certificates with the main domain and a single subdomain:",[48,107,109],{"className":50,"code":108,"language":52,"meta":53,"style":53},".\u002Fletsencrypt-auto --standalone certonly -d kassianoff.fr -d www.kassianoff.fr --rsa-key-size 4096\n",[55,110,111],{"__ignoreMap":53},[58,112,113,116,119,122,125,128,130,133,136],{"class":60,"line":61},[58,114,115],{"class":64},".\u002Fletsencrypt-auto",[58,117,118],{"class":68}," --standalone",[58,120,121],{"class":68}," certonly",[58,123,124],{"class":68}," -d",[58,126,127],{"class":68}," kassianoff.fr",[58,129,124],{"class":68},[58,131,132],{"class":68}," www.kassianoff.fr",[58,134,135],{"class":68}," --rsa-key-size",[58,137,139],{"class":138},"sbssI"," 4096\n",[15,141,142],{},"For reference:",[144,145,146,150,153],"ul",{},[147,148,149],"li",{},"certonly: this only generates the certificate and its keys in the \u002Fetc\u002Fletsencrypt\u002Flive\u002F directory.",[147,151,152],{},"-d (or --domains): this lets you pass domains and subdomains as arguments.",[147,154,155],{},"--rsa-key-size: the RSA key size is 4096 bits (2048 bits by default, not recommended).",[15,157,158],{},"The result should look like this:",[48,160,162],{"className":50,"code":161,"language":52,"meta":53,"style":53},"Requesting root privileges to run letsencrypt...\n   \u002Froot\u002F.local\u002Fshare\u002Fletsencrypt\u002Fbin\u002Fletsencrypt --standalone certonly -d kassianoff.fr -d www.kassianoff.fr --rsa-key-size 4096\n\nIMPORTANT NOTES:\n - Congratulations! Your certificate and chain have been saved at\n   \u002Fetc\u002Fletsencrypt\u002Flive\u002Fkassianoff.fr\u002Ffullchain.pem. Your cert will\n   expire on 2016-07-24. To obtain a new version of the certificate in\n   the future, simply run Let's Encrypt again.\n - If you like Let's Encrypt, please consider supporting our work by:\n\n   Donating to ISRG \u002F Let's Encrypt:   https:\u002F\u002Fletsencrypt.org\u002Fdonate\n   Donating to EFF:                    https:\u002F\u002Feff.org\u002Fdonate-le\n",[55,163,164,184,206,213,222,255,269,307,330,362,367,388],{"__ignoreMap":53},[58,165,166,169,172,175,178,181],{"class":60,"line":61},[58,167,168],{"class":64},"Requesting",[58,170,171],{"class":68}," root",[58,173,174],{"class":68}," privileges",[58,176,177],{"class":68}," to",[58,179,180],{"class":68}," run",[58,182,183],{"class":68}," letsencrypt...\n",[58,185,187,190,192,194,196,198,200,202,204],{"class":60,"line":186},2,[58,188,189],{"class":64},"   \u002Froot\u002F.local\u002Fshare\u002Fletsencrypt\u002Fbin\u002Fletsencrypt",[58,191,118],{"class":68},[58,193,121],{"class":68},[58,195,124],{"class":68},[58,197,127],{"class":68},[58,199,124],{"class":68},[58,201,132],{"class":68},[58,203,135],{"class":68},[58,205,139],{"class":138},[58,207,209],{"class":60,"line":208},3,[58,210,212],{"emptyLinePlaceholder":211},true,"\n",[58,214,216,219],{"class":60,"line":215},4,[58,217,218],{"class":64},"IMPORTANT",[58,220,221],{"class":68}," NOTES:\n",[58,223,225,228,231,234,237,240,243,246,249,252],{"class":60,"line":224},5,[58,226,227],{"class":64}," -",[58,229,230],{"class":68}," Congratulations!",[58,232,233],{"class":68}," Your",[58,235,236],{"class":68}," certificate",[58,238,239],{"class":68}," and",[58,241,242],{"class":68}," chain",[58,244,245],{"class":68}," have",[58,247,248],{"class":68}," been",[58,250,251],{"class":68}," saved",[58,253,254],{"class":68}," at\n",[58,256,258,261,263,266],{"class":60,"line":257},6,[58,259,260],{"class":64},"   \u002Fetc\u002Fletsencrypt\u002Flive\u002Fkassianoff.fr\u002Ffullchain.pem.",[58,262,233],{"class":68},[58,264,265],{"class":68}," cert",[58,267,268],{"class":68}," will\n",[58,270,272,275,278,281,284,287,290,293,296,299,302,304],{"class":60,"line":271},7,[58,273,274],{"class":64},"   expire",[58,276,277],{"class":68}," on",[58,279,280],{"class":68}," 2016-07-24.",[58,282,283],{"class":68}," To",[58,285,286],{"class":68}," obtain",[58,288,289],{"class":68}," a",[58,291,292],{"class":68}," new",[58,294,295],{"class":68}," version",[58,297,298],{"class":68}," of",[58,300,301],{"class":68}," the",[58,303,236],{"class":68},[58,305,306],{"class":68}," in\n",[58,308,310,313,316,319,321,324,327],{"class":60,"line":309},8,[58,311,312],{"class":64},"   the",[58,314,315],{"class":68}," future,",[58,317,318],{"class":68}," simply",[58,320,180],{"class":68},[58,322,323],{"class":68}," Let",[58,325,326],{"class":75},"'",[58,328,329],{"class":68},"s Encrypt again.\n",[58,331,333,336,338,341,344,347,350,353,356,359],{"class":60,"line":332},9,[58,334,335],{"class":68}," - If you like Let",[58,337,326],{"class":75},[58,339,340],{"class":68},"s",[58,342,343],{"class":68}," Encrypt,",[58,345,346],{"class":68}," please",[58,348,349],{"class":68}," consider",[58,351,352],{"class":68}," supporting",[58,354,355],{"class":68}," our",[58,357,358],{"class":68}," work",[58,360,361],{"class":68}," by:\n",[58,363,365],{"class":60,"line":364},10,[58,366,212],{"emptyLinePlaceholder":211},[58,368,370,373,375,378,381,383,385],{"class":60,"line":369},11,[58,371,372],{"class":64},"   Donating",[58,374,177],{"class":68},[58,376,377],{"class":68}," ISRG",[58,379,380],{"class":68}," \u002F",[58,382,323],{"class":68},[58,384,326],{"class":75},[58,386,387],{"class":68},"s Encrypt:   https:\u002F\u002Fletsencrypt.org\u002Fdonate\n",[58,389,391],{"class":60,"line":390},12,[58,392,393],{"class":68},"   Donating to EFF:                    https:\u002F\u002Feff.org\u002Fdonate-le\n",[15,395,396],{},"Once successful, our certificate is now available in the kassianoff.fr folder:",[48,398,400],{"className":50,"code":399,"language":52,"meta":53,"style":53},"cd \u002Fetc\u002Fletsencrypt\u002Flive\u002Fkassianoff.fr\u002F\n",[55,401,402],{"__ignoreMap":53},[58,403,404,407],{"class":60,"line":61},[58,405,406],{"class":79},"cd",[58,408,409],{"class":68}," \u002Fetc\u002Fletsencrypt\u002Flive\u002Fkassianoff.fr\u002F\n",[15,411,412],{},"So we have the following files:",[48,414,416],{"className":50,"code":415,"language":52,"meta":53,"style":53},"cert.pem  chain.pem  fullchain.pem  privkey.pem\n",[55,417,418],{"__ignoreMap":53},[58,419,420,423,426,429],{"class":60,"line":61},[58,421,422],{"class":64},"cert.pem",[58,424,425],{"class":68},"  chain.pem",[58,427,428],{"class":68},"  fullchain.pem",[58,430,431],{"class":68},"  privkey.pem\n",[15,433,434],{},"The two files we're interested in are privkey.pem and cert.pem, which we'll concatenate for Pound:",[48,436,438],{"className":50,"code":437,"language":52,"meta":53,"style":53},"cat \u002Fetc\u002Fletsencrypt\u002Flive\u002Fkassianoff.fr\u002Fprivkey.pem \u002Fetc\u002Fletsencrypt\u002Flive\u002Fkassianoff.fr\u002Ffullchain.pem > \u002Fetc\u002Fpound\u002Fkassianoff.pem\n",[55,439,440],{"__ignoreMap":53},[58,441,442,445,448,451,454],{"class":60,"line":61},[58,443,444],{"class":64},"cat",[58,446,447],{"class":68}," \u002Fetc\u002Fletsencrypt\u002Flive\u002Fkassianoff.fr\u002Fprivkey.pem",[58,449,450],{"class":68}," \u002Fetc\u002Fletsencrypt\u002Flive\u002Fkassianoff.fr\u002Ffullchain.pem",[58,452,453],{"class":75}," >",[58,455,456],{"class":68}," \u002Fetc\u002Fpound\u002Fkassianoff.pem\n",[15,458,459],{},"For this to work, let's add the following to Pound's configuration file, \u002Fetc\u002Fpound\u002Fpound.cfg:",[48,461,463],{"className":50,"code":462,"language":52,"meta":53,"style":53},"Cert \"\u002Fetc\u002Fpound\u002Fkassianoff.pem\"\n",[55,464,465],{"__ignoreMap":53},[58,466,467,470,473,476],{"class":60,"line":61},[58,468,469],{"class":64},"Cert",[58,471,472],{"class":75}," \"",[58,474,475],{"class":68},"\u002Fetc\u002Fpound\u002Fkassianoff.pem",[58,477,478],{"class":75},"\"\n",[15,480,481],{},"The Pound service can then be started:",[48,483,485],{"className":50,"code":484,"language":52,"meta":53,"style":53},"service pound start\n",[55,486,487],{"__ignoreMap":53},[58,488,489,491,493],{"class":60,"line":61},[58,490,96],{"class":64},[58,492,99],{"class":68},[58,494,495],{"class":68}," start\n",[15,497,498],{},"We now have a valid, signed 90-day certificate in place on our domains and subdomain!",[10,500,502],{"id":501},"simplified-creation-or-renewal","Simplified creation or renewal",[15,504,505],{},"I'll admit having a certificate with Let's Encrypt is convenient. However, it can be worth creating and renewing your certificates even more simply. In my case, I created my own script:",[48,507,509],{"className":50,"code":508,"language":52,"meta":53,"style":53},"git clone https:\u002F\u002Fgithub.com\u002Fffonaissak\u002Fletsencrypt-pound.git && cd letsencrypt-pound\n",[55,510,511],{"__ignoreMap":53},[58,512,513,515,517,520,522,524],{"class":60,"line":61},[58,514,65],{"class":64},[58,516,69],{"class":68},[58,518,519],{"class":68}," https:\u002F\u002Fgithub.com\u002Fffonaissak\u002Fletsencrypt-pound.git",[58,521,76],{"class":75},[58,523,80],{"class":79},[58,525,526],{"class":68}," letsencrypt-pound\n",[15,528,529],{},"You just need to make the script executable:",[48,531,533],{"className":50,"code":532,"language":52,"meta":53,"style":53},"chmod +x letsencrypt-pound.sh\n",[55,534,535],{"__ignoreMap":53},[58,536,537,540,543],{"class":60,"line":61},[58,538,539],{"class":64},"chmod",[58,541,542],{"class":68}," +x",[58,544,545],{"class":68}," letsencrypt-pound.sh\n",[15,547,548],{},"Then:",[48,550,552],{"className":50,"code":551,"language":52,"meta":53,"style":53},".\u002Fletsencrypt-pound.sh\n",[55,553,554],{"__ignoreMap":53},[58,555,556],{"class":60,"line":61},[58,557,551],{"class":64},[15,559,560],{},"An error can occur if, for example, another service is listening on port http or https, such as, in this case, a Docker container:",[48,562,564],{"className":50,"code":563,"language":52,"meta":53,"style":53},"The program docker (process ID 5427) is already listening on TCP port 80. This\nwill prevent us from binding to that port. Please stop the docker program\ntemporarily and then try again.\n-------------------------------------------------------------------------------\nPress Enter to Continue\nAt least one of the (possibly) required ports is already taken.\ncat: \u002Fetc\u002Fletsencrypt\u002Flive\u002Fkassianoff.fr\u002Fprivkey.pem: No such file or directory\ncat: \u002Fetc\u002Fletsencrypt\u002Flive\u002Fkassianoff.fr\u002Ffullchain.pem: No such file or directory\n[....] Starting reverse proxy and load balancer: poundstarting...\n. ok\n",[55,565,566,590,628,644,649,662,680,703,720,734],{"__ignoreMap":53},[58,567,568,571,574,577,581,584,587],{"class":60,"line":61},[58,569,570],{"class":64},"The",[58,572,573],{"class":68}," program",[58,575,576],{"class":68}," docker",[58,578,580],{"class":579},"sTEyZ"," (process ",[58,582,583],{"class":68},"ID",[58,585,586],{"class":138}," 5427",[58,588,589],{"class":579},") is already listening on TCP port 80. This\n",[58,591,592,595,598,601,604,607,609,612,615,618,621,623,625],{"class":60,"line":186},[58,593,594],{"class":64},"will",[58,596,597],{"class":68}," prevent",[58,599,600],{"class":68}," us",[58,602,603],{"class":68}," from",[58,605,606],{"class":68}," binding",[58,608,177],{"class":68},[58,610,611],{"class":68}," that",[58,613,614],{"class":68}," port.",[58,616,617],{"class":68}," Please",[58,619,620],{"class":68}," stop",[58,622,301],{"class":68},[58,624,576],{"class":68},[58,626,627],{"class":68}," program\n",[58,629,630,633,635,638,641],{"class":60,"line":208},[58,631,632],{"class":64},"temporarily",[58,634,239],{"class":68},[58,636,637],{"class":68}," then",[58,639,640],{"class":68}," try",[58,642,643],{"class":68}," again.\n",[58,645,646],{"class":60,"line":215},[58,647,648],{"class":64},"-------------------------------------------------------------------------------\n",[58,650,651,654,657,659],{"class":60,"line":224},[58,652,653],{"class":64},"Press",[58,655,656],{"class":68}," Enter",[58,658,177],{"class":68},[58,660,661],{"class":68}," Continue\n",[58,663,664,667,670,673,675,677],{"class":60,"line":257},[58,665,666],{"class":64},"At",[58,668,669],{"class":68}," least",[58,671,672],{"class":68}," one",[58,674,298],{"class":68},[58,676,301],{"class":68},[58,678,679],{"class":579}," (possibly) required ports is already taken.\n",[58,681,682,685,688,691,694,697,700],{"class":60,"line":271},[58,683,684],{"class":64},"cat:",[58,686,687],{"class":68}," \u002Fetc\u002Fletsencrypt\u002Flive\u002Fkassianoff.fr\u002Fprivkey.pem:",[58,689,690],{"class":68}," No",[58,692,693],{"class":68}," such",[58,695,696],{"class":68}," file",[58,698,699],{"class":68}," or",[58,701,702],{"class":68}," directory\n",[58,704,705,707,710,712,714,716,718],{"class":60,"line":309},[58,706,684],{"class":64},[58,708,709],{"class":68}," \u002Fetc\u002Fletsencrypt\u002Flive\u002Fkassianoff.fr\u002Ffullchain.pem:",[58,711,690],{"class":68},[58,713,693],{"class":68},[58,715,696],{"class":68},[58,717,699],{"class":68},[58,719,702],{"class":68},[58,721,722,725,728,731],{"class":60,"line":332},[58,723,724],{"class":75},"[",[58,726,727],{"class":579},"....",[58,729,730],{"class":75},"]",[58,732,733],{"class":579}," Starting reverse proxy and load balancer: poundstarting...\n",[58,735,736,739],{"class":60,"line":364},[58,737,738],{"class":79},".",[58,740,741],{"class":68}," ok\n",[15,743,744],{},"To fix this temporary problem before deploying my patch, locate the service:",[48,746,748],{"className":50,"code":747,"language":52,"meta":53,"style":53},"ps aux | grep \"5427\"\nroot      5427  0.0  0.1 116292 11672 ?        Sl   18:45   0:00 docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 80 -container-ip 172.17.0.72 -container-port 80\n",[55,749,750,771],{"__ignoreMap":53},[58,751,752,755,758,761,764,766,769],{"class":60,"line":61},[58,753,754],{"class":64},"ps",[58,756,757],{"class":68}," aux",[58,759,760],{"class":75}," |",[58,762,763],{"class":64}," grep",[58,765,472],{"class":75},[58,767,768],{"class":68},"5427",[58,770,478],{"class":75},[58,772,773,776,779,782,785,788,791,794,797,800,803,806,809,812,815,818,821,824,827,830,833],{"class":60,"line":186},[58,774,775],{"class":64},"root",[58,777,778],{"class":138},"      5427",[58,780,781],{"class":138},"  0.0",[58,783,784],{"class":138},"  0.1",[58,786,787],{"class":138}," 116292",[58,789,790],{"class":138}," 11672",[58,792,793],{"class":68}," ?",[58,795,796],{"class":68},"        Sl",[58,798,799],{"class":68},"   18:45",[58,801,802],{"class":68},"   0:00",[58,804,805],{"class":68}," docker-proxy",[58,807,808],{"class":68}," -proto",[58,810,811],{"class":68}," tcp",[58,813,814],{"class":68}," -host-ip",[58,816,817],{"class":138}," 0.0.0.0",[58,819,820],{"class":68}," -host-port",[58,822,823],{"class":138}," 80",[58,825,826],{"class":68}," -container-ip",[58,828,829],{"class":138}," 172.17.0.72",[58,831,832],{"class":68}," -container-port",[58,834,835],{"class":138}," 80\n",[15,837,838],{},"Docker is holding onto the http port with a running container, let's stop it:",[48,840,842],{"className":50,"code":841,"language":52,"meta":53,"style":53},"docker stop my_container\n",[55,843,844],{"__ignoreMap":53},[58,845,846,849,851],{"class":60,"line":61},[58,847,848],{"class":64},"docker",[58,850,620],{"class":68},[58,852,853],{"class":68}," my_container\n",[15,855,856],{},"Just run the script again like this:",[48,858,862],{"className":859,"code":860,"language":861,"meta":53,"style":53},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight",".\u002Fletsencrypt-pound.sh\nYour first domain (ex:kassianoff.fr)\nkassianoff.fr\nYour second domain (ex:www.kassianoff.fr)\nwww.kassianoff.fr\nYour third domain (ex:www2.kassianoff.fr)\nwww2.kassianoff.fr\nYou domains are : [kassianoff.fr] [www.kassianoff.fr] [www2.kassianoff.fr], Do you want to continue ? [Y\u002FN]\nY\nCloning into 'letsencrypt'...\nremote: Counting objects: 34827, done.\nremote: Total 34827 (delta 0), reused 0 (delta 0), pack-reused 34827\nReceiving objects: 100% (34827\u002F34827), 9.30 MiB | 6.53 MiB\u002Fs, done.\nResolving deltas: 100% (24741\u002F24741), done.\n[ ok ] Stopping reverse proxy and load balancer: pound.\nYour email contact for the certificat (ex:postmaster@kassianoff.fr)\npostmaster@kassianoff.fr\nChecking for new version...\nRequesting root privileges to run letsencrypt...\n   \u002Froot\u002F.local\u002Fshare\u002Fletsencrypt\u002Fbin\u002Fletsencrypt --text --email postmaster@kassianoff.fr --domains kassianoff.fr -d www.kassianoff.fr -d www2.kassianoff.fr --agree-tos --standalone certonly --rsa-key-size 4096\n\nIMPORTANT NOTES:\n - Congratulations! Your certificate and chain have been saved at\n   \u002Fetc\u002Fletsencrypt\u002Flive\u002Fkassianoff.fr\u002Ffullchain.pem. Your\n   cert will expire on 2016-07-24. To obtain a new version of the\n   certificate in the future, simply run Let's Encrypt again.\n - If you like Let's Encrypt, please consider supporting our work by:\n\n   Donating to ISRG \u002F Let's Encrypt:   https:\u002F\u002Fletsencrypt.org\u002Fdonate\n   Donating to EFF:                    https:\u002F\u002Feff.org\u002Fdonate-le\n\n[....] Starting reverse proxy and load balancer: poundstarting...\n. ok\n","yaml",[55,863,864,868,873,878,883,888,893,898,935,941,946,962,971,982,993,1012,1018,1024,1030,1036,1042,1047,1056,1064,1070,1076,1082,1092,1097,1108,1119,1124,1141],{"__ignoreMap":53},[58,865,866],{"class":60,"line":61},[58,867,551],{"class":68},[58,869,870],{"class":60,"line":186},[58,871,872],{"class":68},"Your first domain (ex:kassianoff.fr)\n",[58,874,875],{"class":60,"line":208},[58,876,877],{"class":68},"kassianoff.fr\n",[58,879,880],{"class":60,"line":215},[58,881,882],{"class":68},"Your second domain (ex:www.kassianoff.fr)\n",[58,884,885],{"class":60,"line":224},[58,886,887],{"class":68},"www.kassianoff.fr\n",[58,889,890],{"class":60,"line":257},[58,891,892],{"class":68},"Your third domain (ex:www2.kassianoff.fr)\n",[58,894,895],{"class":60,"line":271},[58,896,897],{"class":68},"www2.kassianoff.fr\n",[58,899,900,904,907,910,913,915,917,920,922,924,927,929,932],{"class":60,"line":309},[58,901,903],{"class":902},"swJcz","You domains are",[58,905,906],{"class":75}," :",[58,908,909],{"class":75}," [",[58,911,912],{"class":68},"kassianoff.fr",[58,914,730],{"class":75},[58,916,909],{"class":75},[58,918,919],{"class":68},"www.kassianoff.fr",[58,921,730],{"class":75},[58,923,909],{"class":75},[58,925,926],{"class":68},"www2.kassianoff.fr",[58,928,730],{"class":75},[58,930,931],{"class":579},", ",[58,933,934],{"class":68},"Do you want to continue ? [Y\u002FN]\n",[58,936,937],{"class":60,"line":332},[58,938,940],{"class":939},"sfNiH","Y\n",[58,942,943],{"class":60,"line":364},[58,944,945],{"class":68},"Cloning into 'letsencrypt'...\n",[58,947,948,951,954,957,959],{"class":60,"line":369},[58,949,950],{"class":902},"remote",[58,952,953],{"class":75},":",[58,955,956],{"class":902}," Counting objects",[58,958,953],{"class":75},[58,960,961],{"class":68}," 34827, done.\n",[58,963,964,966,968],{"class":60,"line":390},[58,965,950],{"class":902},[58,967,953],{"class":75},[58,969,970],{"class":68}," Total 34827 (delta 0), reused 0 (delta 0), pack-reused 34827\n",[58,972,974,977,979],{"class":60,"line":973},13,[58,975,976],{"class":902},"Receiving objects",[58,978,953],{"class":75},[58,980,981],{"class":68}," 100% (34827\u002F34827), 9.30 MiB | 6.53 MiB\u002Fs, done.\n",[58,983,985,988,990],{"class":60,"line":984},14,[58,986,987],{"class":902},"Resolving deltas",[58,989,953],{"class":75},[58,991,992],{"class":68}," 100% (24741\u002F24741), done.\n",[58,994,996,998,1001,1004,1007,1009],{"class":60,"line":995},15,[58,997,724],{"class":75},[58,999,1000],{"class":68}," ok",[58,1002,1003],{"class":75}," ]",[58,1005,1006],{"class":902}," Stopping reverse proxy and load balancer",[58,1008,953],{"class":75},[58,1010,1011],{"class":68}," pound.\n",[58,1013,1015],{"class":60,"line":1014},16,[58,1016,1017],{"class":68},"Your email contact for the certificat (ex:postmaster@kassianoff.fr)\n",[58,1019,1021],{"class":60,"line":1020},17,[58,1022,1023],{"class":68},"postmaster@kassianoff.fr\n",[58,1025,1027],{"class":60,"line":1026},18,[58,1028,1029],{"class":68},"Checking for new version...\n",[58,1031,1033],{"class":60,"line":1032},19,[58,1034,1035],{"class":68},"Requesting root privileges to run letsencrypt...\n",[58,1037,1039],{"class":60,"line":1038},20,[58,1040,1041],{"class":68},"   \u002Froot\u002F.local\u002Fshare\u002Fletsencrypt\u002Fbin\u002Fletsencrypt --text --email postmaster@kassianoff.fr --domains kassianoff.fr -d www.kassianoff.fr -d www2.kassianoff.fr --agree-tos --standalone certonly --rsa-key-size 4096\n",[58,1043,1045],{"class":60,"line":1044},21,[58,1046,212],{"emptyLinePlaceholder":211},[58,1048,1050,1053],{"class":60,"line":1049},22,[58,1051,1052],{"class":902},"IMPORTANT NOTES",[58,1054,1055],{"class":75},":\n",[58,1057,1059,1061],{"class":60,"line":1058},23,[58,1060,227],{"class":75},[58,1062,1063],{"class":68}," Congratulations! Your certificate and chain have been saved at\n",[58,1065,1067],{"class":60,"line":1066},24,[58,1068,1069],{"class":68},"   \u002Fetc\u002Fletsencrypt\u002Flive\u002Fkassianoff.fr\u002Ffullchain.pem. Your\n",[58,1071,1073],{"class":60,"line":1072},25,[58,1074,1075],{"class":68},"   cert will expire on 2016-07-24. To obtain a new version of the\n",[58,1077,1079],{"class":60,"line":1078},26,[58,1080,1081],{"class":68},"   certificate in the future, simply run Let's Encrypt again.\n",[58,1083,1085,1087,1090],{"class":60,"line":1084},27,[58,1086,227],{"class":75},[58,1088,1089],{"class":902}," If you like Let's Encrypt, please consider supporting our work by",[58,1091,1055],{"class":75},[58,1093,1095],{"class":60,"line":1094},28,[58,1096,212],{"emptyLinePlaceholder":211},[58,1098,1100,1103,1105],{"class":60,"line":1099},29,[58,1101,1102],{"class":902},"   Donating to ISRG \u002F Let's Encrypt",[58,1104,953],{"class":75},[58,1106,1107],{"class":68},"   https:\u002F\u002Fletsencrypt.org\u002Fdonate\n",[58,1109,1111,1114,1116],{"class":60,"line":1110},30,[58,1112,1113],{"class":902},"   Donating to EFF",[58,1115,953],{"class":75},[58,1117,1118],{"class":68},"                    https:\u002F\u002Feff.org\u002Fdonate-le\n",[58,1120,1122],{"class":60,"line":1121},31,[58,1123,212],{"emptyLinePlaceholder":211},[58,1125,1127,1129,1131,1133,1136,1138],{"class":60,"line":1126},32,[58,1128,724],{"class":75},[58,1130,727],{"class":138},[58,1132,730],{"class":75},[58,1134,1135],{"class":902}," Starting reverse proxy and load balancer",[58,1137,953],{"class":75},[58,1139,1140],{"class":68}," poundstarting...\n",[58,1142,1144],{"class":60,"line":1143},33,[58,1145,1146],{"class":68},". ok\n",[15,1148,1149,1150,1153],{},"While my script is still young and has a few bugs, I'd like to improve my code!",[1151,1152],"br",{},"\nFeel free to share your feedback with me. I hope this article has helped you secure your domains.",[10,1155,1157],{"id":1156},"conclusion","Conclusion",[1159,1160,1161],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":53,"searchDepth":186,"depth":186,"links":1163},[1164,1165,1166,1167,1168],{"id":12,"depth":186,"text":13},{"id":20,"depth":186,"text":21},{"id":42,"depth":186,"text":43},{"id":501,"depth":186,"text":502},{"id":1156,"depth":186,"text":1157},null,"\u002Fimages\u002Fblog\u002Flets-encrypt-certificat-gratuit-valide\u002F021b61a5a9.jpg","2016-04-25","As part of protecting your domains, choose Let's Encrypt! Discover how to easily use it to generate your certificates.","md",{},"\u002Fen\u002Fblog\u002Flets-encrypt-certificat-gratuit-valide",{"title":5,"description":1172},"lets-encrypt-certificat-gratuit-valide","en\u002Fblog\u002Flets-encrypt-certificat-gratuit-valide","dcFEGYYaEvQijm91D21tL3uVwGq_mTYa93rEVu2MgIM",[1181,1187,1193,1199,1208,1214,1220,1226],{"title":1182,"path":1183,"stem":1184,"date":1185,"cover":1186,"categories":1169,"children":-1},"Control the Use of Your Personal Data","\u002Fen\u002Fblog\u002Fcertificat-controlez-utilisation-vos-donnees-personnelles","en\u002Fblog\u002Fcertificat-controlez-utilisation-vos-donnees-personnelles","2016-05-02","\u002Fimages\u002Fblog\u002Fcertificat-controlez-utilisation-vos-donnees-personnelles\u002Faa606ad523.png",{"title":1188,"path":1189,"stem":1190,"date":1191,"cover":1192,"categories":1169,"children":-1},"Understanding the Web","\u002Fen\u002Fblog\u002Fcertificat-comprendre-web","en\u002Fblog\u002Fcertificat-comprendre-web","2016-04-30","\u002Fimages\u002Fblog\u002Fcertificat-comprendre-web\u002F9e7020c860.jpg",{"title":1194,"path":1195,"stem":1196,"date":1197,"cover":1198,"categories":1169,"children":-1},"Browse the Internet Incognito with the Tor Network","\u002Fen\u002Fblog\u002Fcertificat-surfez-incognito-sur-internet-avec-reseau-tor","en\u002Fblog\u002Fcertificat-surfez-incognito-sur-internet-avec-reseau-tor","2016-04-28","\u002Fimages\u002Fblog\u002Fcertificat-surfez-incognito-sur-internet-avec-reseau-tor\u002F647d68fc59.png",{"title":1200,"path":1201,"stem":1202,"date":1203,"cover":1204,"categories":1205,"children":-1},"Manage Your Code with Git and GitHub","\u002Fen\u002Fblog\u002Fcertificat-gerer-son-code-avec-git-github","en\u002Fblog\u002Fcertificat-gerer-son-code-avec-git-github","2016-04-26","\u002Fimages\u002Fblog\u002Fcertificat-gerer-son-code-avec-git-github\u002F00706bb178.png",[1206,1207],"Certifications","Code",{"title":1209,"path":1210,"stem":1211,"date":1212,"cover":1213,"categories":1169,"children":-1},"Learn to Browse the Internet Safely","\u002Fen\u002Fblog\u002Fcertificat-apprenez-naviguer-securite-sur-internet","en\u002Fblog\u002Fcertificat-apprenez-naviguer-securite-sur-internet","2016-04-08","\u002Fimages\u002Fblog\u002Fcertificat-apprenez-naviguer-securite-sur-internet\u002F29fef6bda4.png",{"title":1215,"path":1216,"stem":1217,"date":1218,"cover":1219,"categories":1169,"children":-1},"Protect All Your Data on Your Computer","\u002Fen\u002Fblog\u002Fcertificat-protegez-ensemble-vos-donnees-sur-votre-ordinateur","en\u002Fblog\u002Fcertificat-protegez-ensemble-vos-donnees-sur-votre-ordinateur","2016-04-06","\u002Fimages\u002Fblog\u002Fcertificat-protegez-ensemble-vos-donnees-sur-votre-ordinateur\u002Fb4c7d4ec05.png",{"title":1221,"path":1222,"stem":1223,"date":1224,"cover":1225,"categories":1169,"children":-1},"Introduction to Containers","\u002Fen\u002Fblog\u002Fcertificat-introduction-aux-conteneurs","en\u002Fblog\u002Fcertificat-introduction-aux-conteneurs","2016-04-03","\u002Fimages\u002Fblog\u002Fcertificat-introduction-aux-conteneurs\u002Fb36ecfb03e.png",{"title":1227,"path":1228,"stem":1229,"date":1230,"cover":1231,"categories":1232,"children":-1},"Installing a Gandi Certificate on Zimbra","\u002Fen\u002Fblog\u002Finstallation-certificat-gandi-sous-zimbra","en\u002Fblog\u002Finstallation-certificat-gandi-sous-zimbra","2016-03-23","\u002Fimages\u002Fblog\u002Finstallation-certificat-gandi-sous-zimbra\u002F832221cad6.png",[1233],"Linux",[],1786644888742]