
çªç¶ãã®å
šäœã®è©±ãããªãããæž¡ãããå Žåã Let's Encryptã¯éå¶å©çµç¹ISRGã®èªèšŒã»ã³ã¿ãŒã§ãããEFFããã³å€ãã®äŒæ¥ã®æ¯æŽãåããŠååšããŸãã èšŒææžãæå·åããŠããã§ã«1,000äžãè¶
ãããã¡ã€ã³ã§äœ¿çšããŠããŸã ã
æããã«ç¡æã§ããããšã«å ããŠãLet's Encryptã®èšŒææžã«ã¯ãä»ã®åçšèªèšŒã»ã³ã¿ãŒã«ã¯ãªãç¹å¥ãªå©ç¹ããããŸããLet's EncryptããèšŒææžãåãåã£ãå Žåããã¹ãŠãåãã§ããã°ãããã¯æ°žé ã«ç¶ããŸãã 1ã2幎ã«1åãèšŒææžãæåã§æŽæ°ããå¿
èŠã¯ãããŸããã èšŒææžãã©ããã«ååšããããšãèŠããŠããå¿
èŠã¯ãããŸããã åä¿¡ãèšå®ãããã³å¿ããŸããïŒ
æ°é
ãã®ããèªè
ã¯ããã«ç°è°ãç³ãç«ãŠãŸããèšŒææžã¯3ãæã®æå¹æéã§çºè¡ãããããšãããã£ãŠããã®ã§ãã©ãããŠãããªã®ã§ããããã åé¡ã¯ãèšŒææžã®èªåæŽæ°ã«ãããŸããããã¯ã人éã®è¡åããªãå Žåã«å¯èœã§ãã
ãã®èšäºã®èªåèšŒææžæŽæ°ã®çµç¹ã¯ãLet's Encryptã®ãã®åºæ¬çãªå©ç¹ãååã«çè§£ã§ããããã«çްå¿ã®æ³šæãæããŸããã
ãã®èšäºã¯ãªãã§ãã
EFF Webãµã€ãã«ã¯ãèšŒææžãååŸããããã®æšå¥šããã°ã©ã ã§ããCertbotã®äœ¿ç𿹿³ã«é¢ããç°¡åãªèª¬æããããŸããã絶察ã«å¿
èŠãªå Žåã«ã®ã¿SSHãä»ããŠãµãŒããŒã«ã¢ã¯ã»ã¹ãã人ã«é©ããŠããŸãã ãã詳现ãªããã¥ã¡ã³ãããããŸããããããŸã§ã®ãšããããã¹ãŠãèªãã§ãæ¬åœã«ç¥ã£ãŠããå¿
èŠã®ãããã¹ãŠã®ãã®ãèŠã€ããŸã...ããã«ãèšŒææžã®äœ¿çšã«é¢ããããã€ãã®éèŠãªæŠç¥çåé¡ã«å¯ŸåŠããŠããŸããã
æããã«ããµãŒããŒã³ã³ãœãŒã«ã«æ
£ããŠããããããŸãæéããããã«ãããçè§£ããã人ã«ã¯ãçããŠããããããæç€ºãå¿
èŠã§ãã
å
容
ãã®èšäºããåŠã¶ããšãã§ããŸã...
- Certbotã宿çã«ã€ã³ã¹ããŒã«ããŠæ§æããæ¹æ³ã
- nginxã«å¿
èŠãªãã®ãšãèšŒææžãåä¿¡ããããã®nginxã®æ§ææ¹æ³ ã
- èšŒææžã®ååŸ æ¹æ³ãšåä¿¡ããèšŒææžã®ç¢ºèªæ¹æ³ ã
- Let's Encryptã®èšŒææžãnginx ã«ã€ã³ã¹ããŒã«ããæ¹æ³ ã
- èšŒææžãèªåçã«æŽæ°ããæ¹æ³ã
泚æäºé
SNIã®ãã¹ãŠãç¥ã£ãŠããŸããïŒ ããã«ã€ã³ã¹ããŒã«ã«ã€ããŠèªãã§ãã ããã
以äžã®æé ã§ã¯ããµã€ãã§SNIã䜿çšãããšæ³å®ããŠããŸãã TLSãããã³ã«ã®ãã®æ¡åŒµã«ããããã©ãŠã¶ãŒã¯ããµãŒããŒããSSLèšŒææžãåãåã£ãŠæ€èšŒããåã«ãç®çã®ãµã€ãåãéä¿¡ã§ããŸãã SNIã®ãããã§ã1ã€ã®IPã§HTTPSãä»ããŠä»»æã®ãµã€ãããã¹ãã§ããŸãã ãããããã¹ãŠãããã»ã©åçŽã§ã¯ãããŸãã-ãããªããã°ããªãããã«ã€ããŠæžãã®ã§ããããïŒ
ååçã«SNIããµããŒãããªãå€ããã©ãŠã¶ãããã€ããããŸãã ãããã«ã¯ã ãã§ã«æŸæ£ãããWindows XPã®IEã®ãã¹ãŠã®ããŒãžã§ã³ã 2010幎ã®Android 2.3ããã³2.2ã®çµã¿èŸŒã¿ãã©ãŠã¶ãŒãããã³JavaããŒãžã§ã³1.6ãããŒãžã§ã³2.7.9ãŸã§ã®Pythonãªã©ã®ãããšããŸããã¯ãªãã©ãŠã¶ãŒãšã©ã€ãã©ãªãå«ãŸããŸã ã
ããã§ãWindows XPã®IEã§ãµã€ããéãããå Žåã¯ãSNIãæŸæ£ããŠããã®åé¡ã¯è§£æ±ºããŸããã æå·ãç¹å¥ãªæ¹æ³ã§éžæããå¿
èŠããããŸã ããã§ã«åæ¹ç§å¿æ§ãæŸæ£ã ãSSL Labsããäœãè©äŸ¡ãåŸããªã¹ã¯ããããŸãã ãæ³åã®ãšããããã®åé¡ã¯å¥ã®è°è«ã«å€ããŸããããã¯ãXPã®IEãŠãŒã¶ãŒã¯åæ
ã§ããããã§ã-ã€ã³ã¿ãŒãããã®ååãéãããªããªã£ãããã§ãïŒ
ããã1幎åãBingãªã©ã®äžéšã®æ€çŽ¢ãããã«ãããã®ãã¯ãããžãŒã®éå®çãªãµããŒãã«ãããSNIãžã®åãæ¿ãã劚ããããå¯èœæ§ããããŸããããSNIãªãã§ã¯éããªãç¡æã®CloudflareèšŒææžãåããæ°åã®ãµã€ããBingãããïŒ æ€èšŒã容æ ïŒãããã³ãããã®åºçŸã«ããã ä»ã®äž»èŠãªæ€çŽ¢ãšã³ãžã³ã¯çŸå®ãšäžèŽããŠããŸãã ä»ããã®ããã«å¿é
ããããšã¯ã§ããŸããã Googlebotã«ã¯ãã®ãããªåé¡ã¯äžåºŠããªãã£ããšæããŸãã
å¿é
ãããã1ã€ã®çç±ã¯ããµã€ãã®APIã«ã¢ã¯ã»ã¹ããããŸããŸãªæ¹æ³ã§ãã é·æéAPIã䜿çšããŠããå Žåãã¯ã©ã€ã¢ã³ãã®äžã«ã¯å€ãããŒãžã§ã³ã®JavaãŸãã¯Pythonã䜿çšããŠããã¯ã©ã€ã¢ã³ããããå¯èœæ§ããããã«ãããŸãã æã£ãŠããªãå Žåãå¿é
ããããšã¯ãããŸããã ããå Žåãç§ã®åconã®æã
SNIã«é Œãæ¹ãè¯ãã®ã¯ãªãã§ããïŒ
ç°¡åã§ãã çºè¡ãããèšŒææžã«é¢ããäºå®ãåžžã«å¿µé ã«çœ®ãå¿
èŠã¯ãããŸããã æåã«èšŒææžãçºè¡ããããã¡ã€ã³ã ãã¡ã€ã³ã远å ããå¿
èŠãããèšŒææžã ãªã©... SNIã§ãã®ãããªããšãèããå¿
èŠã¯ãããŸããã
- ç§å¯ã¯ç§å¯ã®ãŸãŸã§ãã ãã¹ãŠã®ãã¡ã€ã³ã«å¯ŸããŠ1ã€ã®èšŒææžãããå Žåãåžæã«é¢ä¿ãªããã ãã§ãç°¡åã«ãªã¹ãå
šäœã衚瀺ã§ããŸãã åãµã€ãã«ç¬èªã®èšŒææžãããå Žåããã®ãããªåé¡ã¯ãããŸããã
ããšãã°ãThematic MediaèšŒææžã§ãã¡ã€ã³ã確èªã§ããŸãã
true | openssl s_client -showcerts -connect habrahabr.ru:443 2>&1 | openssl x509 -text | grep -o 'DNS:[^,]*' | cut -f2 -d:
å·çæç¹ã§ããã®ã³ãã³ãã¯ãã¹ãŠã®å¯èœãªTMãã¡ã€ã³ã®è©³çްãªãªã¹ãã衚瀺ããŸãã
habrastorage.org api.geektimes.ru api.habrahabr.ru geektimes.ru habrahabr.ru id.tmtm.ru lab.geektimes.ru m.geektimes.ru m.habrahabr.ru special.geektimes.ru special.habrahabr.ru www.geektimes.ru www.habrahabr.ru
ç§å¯ãç§å¯ããããŸããã ãããæ¬²ããïŒ
Certbotãã€ã³ã¹ããŒã«ãã
Certbotããã§ã«è³æ Œãå
責äºé
ã®ãªãDebianå®å®çãšUbuntuã«ããæªæ¥ãããã®ããã¹ããèªãã§ãããªãããã¹ãŠãç°¡åã§ãïŒ
apt-get install certbot
é
åžã«ã¯aptitude
ãŸãã¯å¥ã®ããã±ãŒãžãããŒãžã£ãŒã䜿çšããŠãã ããã
Jessieã§ã®ã€ã³ã¹ããŒã«
2016幎æ«ã®æç¹ã§ãŸã Debianå®å®çãjessieãã䜿çšããŠããå Žåããã¹ãŠãå°ãè€éã§ãã
/etc/apt/sources.list
次ã®è¡ã远å ããŠãDebianããã¯ããŒããæå¹ã«ããå¿
èŠããããŸãã
deb http://ftp.debian.org/debian/ jessie-backports main contrib non-free
ããã§ããœãŒã¹ã䜿çšããŠã€ã³ã¹ããŒã«ã§ããŸãã
apt-get update apt-get install certbot -t jessie-backports
ïŒãã®ã»ã¯ã·ã§ã³ã¯ã ã¹ãã¬ããã®ã¿ãå®å®ãããŸã§é¢é£ããŸããïŒ
16.10ïŒyakketyïŒä»¥äžã®UbuntuããŒãžã§ã³
sudo add-apt-repository ppa:certbot/certbot sudo apt-get update sudo apt-get install
ããã«ã certbot
代ããã«certbot
䜿çšããŠletsencrypt
ã
å¥ã®ååž
ä»ã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ãããå Žåã¯ã远å ã®ã€ã³ã¹ããŒã«æé ãCertbotã®å
¬åŒWebãµã€ãã«ãããŸãã ããã±ãŒãžãããŒãžã£ãŒã䜿çšããªãå Žåãéåžžãã€ã³ã¹ããŒã«ã¯...
wget -O /usr/local/bin/certbot-auto https://dl.eff.org/certbot-auto chmod +x /usr/local/bin/certbot-auto ln -s /usr/local/bin/certbot-auto /usr/local/bin/certbot
以äžã§ã¯ã certbot
ã³ãã³ãã®ä»£ããã«certbot-auto
ã³ãã³ãã䜿çšã§ããŸãã
Certbotãšwebroot
WebãµãŒããŒãåæ§æãŸãã¯åæ¢ããã«webrootã¡ãœããã䜿çšããŠèšŒææžãåãåããŸããã€ãŸããnginxã§ãã certbot
ããã¡ã€ã«ãæžã蟌ããã£ã¬ã¯ããªãå¿
èŠã§ããã ACMEãããã³ã«ã«åŸã£ãŠãããã¯ãŒã¯ããèªèšŒãµãŒããŒã«ã¢ã¯ã»ã¹ã§ããå¿
èŠããããŸãã
ãªãã·ã§ã³ã®é·ãè¡ãæ¯åæžã蟌ãŸãªãããã«ããŸãã¯ããããæãåºããªãããã«ããããã«ã /etc/letsencrypt/cli.ini
èŠã€ããããšãæåŸ
ããæ§æãã¡ã€ã«ã«ã¡ã€ã³èšå®ãæžã蟌ã¿ãŸãã
authenticator = webroot webroot-path = /var/www/html post-hook = service nginx reload text = True
æåŸã®ãã£ã¬ã¯ãã£ãã¯ãncursesã®é
åãšçŸããããç§ãã¡ãæãããã«å¿
èŠã§ããããã¯ãããããã®èšäºããããŠèªå®
ã§ã³ãã³ãã®åºåãæ¯èŒã§ããããã«ããããã«å¿
èŠã§ãã
ãŸããèšŒææžãæ£åžžã«æŽæ°ããå ŽåãnginxãïŒãµãŒãã¹ãäžæããããšãªãïŒç©ããã«åèµ·åããå¿
èŠããããŸãã åä¿¡ããèšŒææžãåæã«äœ¿çšããPostfixãªã©ã®ä»ã®ãµãŒãã¹ã®åèµ·åã劚ãããã®ã¯ãããŸããã ã³ãã³ãã¯ã»ãã³ãã³ã§åºåãããŸãã
ã»ãã³ãã³ããšã©ãŒãåŒãèµ·ããå Žåãã®ãšã©ãŒã衚瀺ãããå ŽåïŒ
letsencrypt: error: Unexpected line 14 in /etc/letsencrypt/cli.ini: post-hook = service nginx reload; service postfix reload
次ã«ã python-configargparse
ãæŽæ°ããå¿
èŠããããŸãã ãšã©ãŒã¯0.11.0ã§ä¿®æ£ãããŸãã ã
Certbotãè¡ãããš
certbot
ã¯ãæå®ãããéå±€ã®äžã®ãµããã£ã¬ã¯ããªã§ãã¡ã€ã³æš©éããã§ãã¯ããããã«å¿
èŠãªãã¡ã€ã«ãäœæããããšãæåŸ
ãããŠããŸãã ãããã®ããã«æãããïŒ
/var/www/html/.well-known/acme-challenge/example.html
ãããã®ãã¡ã€ã«ã¯ãå°ãªããšãHTTPãä»ããŠãã¿ãŒã²ãããã¡ã€ã³äžã®ãããã¯ãŒã¯ããã¢ã¯ã»ã¹ã§ããå¿
èŠããããŸãã
http:
次ã®ãã§ãã¯ã®ããã«ãããçš®ã®ãã¡ã€ã«ãäœæããŸãã
mkdir -p /var/www/html/.well-known/acme-challenge echo Success > /var/www/html/.well-known/acme-challenge/example.html
Let's Encryptã«åå ãã
ç»é²ã¯äžåºŠã ãè¡ãå¿
èŠããããŸãïŒ
certbot register --email me@example.com
ããã§è€éãªããšã¯ãããŸããã
èšŒææžçšã«nginxãæºåãã
äžè¬ã«ãèšŒææžãååŸããã«ã¯ããã¹ãŠã®server
ãããã¯ã®ãã¹ãŠã®location
ãããã¯ã«æ¬¡ã®ãããã¯ã远å ããå¿
èŠãããserver
ã
location /.well-known { root /var/www/html; }
åãµã€ãã«ãã®ãããªãããã¯ãæç€ºçã«å
¥åããã®ã¯/etc/nginx/acme
ã§ããããšã¯æããã§ãããããã£ãŠãäžèšã®ãããã¯ã®å
容ã§ãã¡ã€ã«/etc/nginx/acme
ãäœæããŸãã
# cat /etc/nginx/acme location /.well-known { root /var/www/html; }
次ã«ãèšŒææžãååŸãããã¡ã€ã³ãšãµããã¡ã€ã³ããšã«ã server
ãããã¯ã§ããã¹ãŠã®location
ãããã¯ã®åã«æ¬¡ã®ããã«location
ãŸãã
include acme;
ãªãã€ã¬ã¯ãããããã¹ãïŒããšãã°ã裞ã®ãã¡ã€ã³ããwwwãžïŒã¯ã¹ãããã§ããŸãã ACMEãµãŒããŒã¯ãæšæºè»¢éãèæ
®ããå¿
èŠããããŸãã 詳现ã«ã€ããŠã¯ã以äžãã芧ãã ããã
nginxãåèµ·åãããã¹ããã¡ã€ã«ã衚瀺ãããããšã確èªããŸãã
# service nginx reload # curl -L http:
ãã§ãã¯åŸããã¹ããã¡ã€ã«ãåé€ããããšããcertbot
ãŸãcertbot
ã¯certbot
ãªãã®ããã¹ãŠåé€ããã®ã奜ãã§ããã®ãããªãã¡ã€ã«ã¯å¹²æžããŠãšã©ãŒã¡ãã»ãŒãžïŒãã£ã¬ã³ãžãã£ã¬ã¯ããªãã¯ãªãŒã³ã¢ããã§ããŸããïŒãåŒãèµ·ãããŸãã
rm /var/www/html/.well-known/acme-challenge/example.html
ããã§ãæåã®èšŒææžãåãåãæºåãã§ããŸããã
転éã³ãŒã301ããã³302ã«ã€ããŠ
ãã§ã«è¿°ã¹ãããã«ãACME BoulderãµãŒããŒã¯ã³ãŒã301ããã³302ã§ã®è»¢éãèš±å¯ããŠããŸã ã ãã®æå³ã§ãæçµçã«ã¯ããã§ãã¯ã«åæ Œããããã«å¿
èŠãªãã¡ã€ã«ãã©ãã«ãããã¯åé¡ã§ã¯ãããŸããã æçµçãªHTTPãŸãã¯HTTPSãããã³ã«ã®å¶éãªãã«ã éæšæºããŒãã«ã§ã転éã§ããŸãã ãã¡ã€ã³æš©éããã§ãã¯ããããã®åäžãã€ã³ããäœæããããã«ãªãã€ã¬ã¯ãã䜿çšããããšããå§ãããŸã ã
10åã®ãªãã€ã¬ã¯ããå¶éããŠcurl
ã䜿çšããŠãããã®ãã¡ã€ã«ãååŸã§ããå ŽåãããŒã«ããŒã¯ãããã®ãã¡ã€ã«ã衚瀺ããŸãã IPã¢ãã¬ã¹ã«å¶éã¯ãªãã¯ãã§ãã
curl --location --max-redirs 10 http:
ããã¯ãç°ãªãããŒãžã§ã³ã®ãµã€ãéã«è€éãªãªãã€ã¬ã¯ãæ§é ãããå Žåã«äŸ¿å©ã§ãã ãã®ãããã¯ãã¡ã€ã³ãµã€ãã®ã¿ã®location
ã«æ¥ç¶ããŠãä»ã®å
šå¡ã®èšŒææžãååŸããã ãã§ååãªã¯ãã§ãã
$ curl --head --silent --location --max-redirs 10 http:
æ€èšŒã¯åžžã«ãããŒã80ã®HTTPãããã³ã«èŠæ±ã§éå§ãããŸãã
ãã¹ãŠããã§ã«æå·åãããŠããå Žå...
æ¢ã«ãã¹ãŠã®ãµã€ããHTTPSã§åäœããŠããå ŽåãããŒã80ã§è»¢éãµãŒããŒãæ§æãããšãã¹ããŒã å
šäœãæ©èœããå¿çã§$request_uri
ãä¿åãããŸãã
ãã1ã€ã®ããšã¯ããã¹ãçãããŠããããã¯ãHTTPSãžã®è»¢éãè¡ãããŒã80ã®ããã©ã«ããµãŒããŒã®location
ã«æ¥ç¶ã§ããããšã§ãã ãã®åŸãåã
ã®ãµã€ãã®æ§æã«äœãã远å ããå¿
èŠã¯ãããŸããã
ãã®ãããªãªãŒã«ã€ã³ã¯ã³ããHTTPSãµãŒããŒãžã®è»¢éã®æ§æäŸïŒ
server { listen server.example.com:80 default_server; include acme; location / { return 301 https://$host$request_uri; } }
ãã®ãããªæ§æã¯ãç¹å®ã®ãµã€ãã®æ§æãšã¯å¥ã«ã /etc/nginx/conf.d/default.conf
ã§å®çŸ©ããå¿
èŠããããŸãã
Apacheãå¥ã®ããŒãã«åæ§æããªãããã«ãå€éšIPã§ãµãŒããŒãæç€ºçã«èµ·åããŸãã ãããåé¡ã«ãªããªãå Žåã¯ã listen
ãã£ã¬ã¯ãã£ãã§ãµãŒããŒåã®æå®ãã¹ãããã§ããŸãã
ãµã€ãã®ãªããã¡ã€ã³ã®èšŒææžãååŸããå¿
èŠãããå Žå...
å
žåçãªäŸã¯ããµã€ãããŸã£ãããªãSMTPãŸãã¯IMAPå°çšãµãŒããŒã®èšŒææžã§ãã ããé«ããŠãããŒãµã«ãªãã€ã¬ã¯ã¿ã䜿çšãããã...
server { server_name smtp.example.com imap.example.com; listen server.example.com:80; include acme; location / { return 404; } }
æ®å¿µãªãããACMEãããã³ã«ã§ã¯ãåãã¹ãäžã«ãã®ãããªãµãŒããŒã䜿çšå¯èœã§ããå¿
èŠããããŸãã ããã¯ããµãŒããŒãåèµ·åããã«èšŒææžãååŸããã³æŽæ°ããå¿
èŠããããããç¶ç¶çãªå¯çšæ§ãšã»ãŒåçã§ãã èšŒææžãåãåã£ãåŸããã®ãããªæ§æãåé€ããªãã§ãã ããã
Apache2ãããªãå Žå...
Apache2ããããããæ°ã«å
¥ãã®nginxã«åãæ¿ããæ¹æ³ããªãå Žåã¯ã次ã®è¡ã/etc/apache2/conf-available/certbot.conf
远å ããŸãã
Alias /.well-known/ /var/www/html/.well-known/ <Directory /var/www/html/.well-known/> Satisfy any </Directory>
ãããã
a2enconf certbot mkdir -p /var/www/html/.well-known service apache2 reload
ãããŠããã®ããã«ç¢ºèªããŠãã ããïŒ
mkdir -p /var/www/html/.well-known/acme-challenge echo Success > /var/www/html/.well-known/acme-challenge/example.html curl -L http://localhost/.well-known/acme-challenge/example.html && rm /var/www/html/.well-known/acme-challenge/example.html
Apache2ã§ãã®ãããªã¹ããŒã ãæ©èœããªãçç±ã¯ãããããããŸãã ããã¹ãç»é¢ã®ãã¢ã§ã¯ãããããã¹ãŠã説æããã®ã«ååã§ã¯ãããŸããã æããªãã§ãã ãã-nginxã«é¢ããèšäºã
èšŒææžãååŸããŸã
Let's Encryptã«ã¯èšŒææžã®ãªã¯ãšã¹ãæ°ã«å¶éãããããããŸããã¹ãã¢ãŒãã§å¿
èŠãªèšŒææžãååŸããŠãã ããã
certbot certonly --dry-run -d example.com -d www.example.com
æåŸã«ãããã°ã©ã ã¯æåããäœæ¥ã«ã€ããŠå ±åããå¿
èŠããããŸãã
The dry run was successful.
ããã§ãå®éã«èšŒææžãå®å
šã«ååŸã§ããŸãã wwwãªã©ãå¿
èŠãªãã¹ãŠã®ãµããã¡ã€ã³ãæç€ºçã«æå®ããŠãã ããã
# certbot certonly -d example.com -d www.example.com Saving debug log to /var/log/letsencrypt/letsencrypt.log Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org Obtaining a new certificate Performing the following challenges: http-01 challenge for example.com http-01 challenge for www.example.com Using the webroot path /var/www/html for all unmatched domains. Waiting for verification... Cleaning up challenges Generating key (2048 bits): /etc/letsencrypt/keys/0001_key-certbot.pem Creating CSR: /etc/letsencrypt/csr/0001_csr-certbot.pem IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/example.com/fullchain.pem. Your cert will expire on 2017-04-01. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew"
ãã£ãïŒ èšŒææžã®åãåããå®äºããŸããïŒ
èšŒææžã«ãµããã¡ã€ã³ãŸãã¯ãã¡ã€ã³ã远å ããå¿
èŠãããå Žå
çªç¶www
ãµããã¡ã€ã³ãæå®ããã®ãå¿ããå ŽåããŸãã¯èšŒææžã«å¥ã®ãã¡ã€ã³ãŸãã¯ãµããã¡ã€ã³ã远å ããå¿
èŠãããå ŽåïŒ 1ã€ã®èšŒææžã§æå€§100 ïŒãèšŒææžãåãåã£ãåŸã«ãããè¡ãã®ã¯ç°¡åã§ãã å¿
èŠãªååã远å ããŠãã³ãã³ããå床å®è¡ããã ãã§ãã
certbot certonly -d example.com -d www.example.com -d shop.example.com
ãã®ãã¡ã€ã³ãèšŒææžã«è¿œå ããããã®ä»£æ¿ææ®µã¯ãããŸããã 質åãé¿ãããå Žåã¯ããã®åäœãæ¿èªããããŒãããã«æå®ã§ããŸãã
certbot certonly --expand -d example.com -d www.example.com -d shop.example.com
æäœãç¹°ãè¿ãããšãã§ããŸãã
åä¿¡ããèšŒææžã確èªãã
åãåã£ãèšŒææžãå¿
èŠãªãã®ã§ããããšã確èªããŠãã ããã
# openssl x509 -text -in /etc/letsencrypt/live/example.com/cert.pem Certificate: Signature Algorithm: ... Validity Not Before: Jan 3 06:00:00 2017 GMT Not After : Apr 3 06:00:00 2017 GMT X509v3 extensions: ... X509v3 Subject Alternative Name: DNS:example.com, DNS:www.example.com
ãŸãã¯ã詳现ãå¿
èŠãªãå ŽåïŒ
cat /etc/letsencrypt/live/*/cert.pem | openssl x509 -text | grep -o 'DNS:[^,]*' | cut -f2 -d:
ããŒã ã¯ãèšŒææžã«ãã¡ã€ã³ããªã¹ãããå¿
èŠããããŸãã
èšŒææžãã€ã³ã¹ããŒã«ããŠäœ¿çšãã
Certbotã¯èšŒææžãæžãæããŸããããæåã®èšŒææžãã¡ã€ã³ïŒ CN
ïŒãšåãååã®ç¹å®ã®ãã£ã¬ã¯ããªã«ããææ°ã®èšŒææžãªãã·ã§ã³ãžã®ãªã³ã¯ã«çœ®ãæããŸãã
ã©ããªçš®é¡ã®ãã¡ã€ã«ãããã®ãââèŠãŠã¿ãŸãããã
# find /etc/letsencrypt/live/ -type l /etc/letsencrypt/live/example.com/fullchain.pem /etc/letsencrypt/live/example.com/chain.pem /etc/letsencrypt/live/example.com/privkey.pem /etc/letsencrypt/live/example.com/cert.pem
ãã®ç¥èãããã°ãnginxã®SSLèšå®ãèšå®ã§ããŸãã
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
ã芧ã®ãšããã cert.pem
ã¯æ§æå
ã®ã©ãã§ã䜿çšãããŠããããããã¯ãšã©ãŒã§ã¯ãããŸããã nginxã®å Žåãå¿
èŠãããŸããã
å®å
šã«æ©èœãããµã³ãã«èšå®ïŒ
server { server_name www.example.com; listen www.example.com:443 ssl; # default_server; # default_server SNI ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; ssl_stapling on; ssl_stapling_verify on; resolver 127.0.0.1 8.8.8.8; # http- add_header Strict-Transport-Security "max-age=31536000"; # "" http:// add_header Content-Security-Policy "img-src https: data:; upgrade-insecure-requests"; # #location / { # proxy_pass ...; #} }
wwwãªãã§ãã¢ãã¡ã€ã³ãããªãã€ã¬ã¯ãããããã«æ§æããŸãã
server { server_name example.com; listen example.com:443 ssl; access_log off; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; ssl_stapling on; ssl_stapling_verify on; resolver 127.0.0.1 8.8.8.8; add_header Strict-Transport-Security "max-age=31536000"; expires max; return 301 https://www.example.com$request_uri; }
äœããã®çš®é¡ã®ããŒã«ã«ãµãŒããŒã䜿çšããŠDNSã¯ãšãªããã£ãã·ã¥ããŠããããšãããããŸãã ããã§ãªãå Žåã¯ã resolver
ãã£ã¬ã¯ãã£ãã®127.0.0.1
ã䜿çšããDNSãµãŒããŒã®IPã«çœ®ãæããå¿
èŠããããŸãã
æå·èšå®ãªã©ïŒ ssl_dhparam
ã ssl_session_cache
ïŒãåã
ã®ãµãŒããŒã®æ§æå€ã«ssl_dhparam
ããssl_session_cache
ãŸãã
å®å
šãªç§å¯
CertbotããªãŒãã³ãœãŒã¹ã³ãŒãã«ããããããèšŒææžã®ããŒãçãããšãå¿é
ããŠããå Žåãçè«çã«ã¯ãäžéšã®æªäººããã¹ãŠã®ãã©ãã£ãã¯ãè§£èªã§ããããšãæå³ããŸãã ãµã€ããžã®æ¥ç¶ã«DHEããã³ECDHEãã¡ããªãŒã®æå·ã䜿çšãããŠããå ŽåãããŒãªãŒã¯ã«ãããã©ãã£ãã¯ã®åŸ©å·åãèš±å¯ãããŸããã ãããã®æå·ã§ã¯ãèšŒææžããŒã¯èªèšŒã«ã®ã¿äœ¿çšãããæå·åã®ããŒãšããŠã¯äœ¿çšãããŸããã ææ°ã®ãã©ãŠã¶ã¯ãã¹ãŠããããã®æå·ããµããŒãããŠããŸãã
ECDHEã®æ¥åæ²ç·ã§äœãããå¿
èŠããªãå Žåãæ¡åŒµãã©ã¡ãŒã¿ãŒãDHEã«äœ¿çšã§ããŸãã DHEãå®å
šã«ç¡å¹ã«ããããšããå§ãããŸãã
äœããã®çç±ã§DHEãªãã§ã¯ã§ããªãå Žåäœããã®çç±ã§DHEãªãã§ã¯ã§ããªãå Žåã¯ãæåã«ãã©ã¡ãŒã¿ãŒãäœæããŸãã
openssl dhparam -out /etc/ssl/private/dhparam.pem 2048
次ã«ã /etc/nginx/conf.d/ssl_dhparam.conf
1è¡/etc/nginx/conf.d/ssl_dhparam.conf
æžã蟌ã¿ãŸãã
ssl_dhparam /etc/ssl/private/dhparam.pem;
èšŒææžã®æŽæ°
èšŒææžã¯3ãæéçºè¡ãããŸãã å幎ãã1幎ãã3ãæã ãã§ã¯ãããŸããã åœç¶ãããã«ããçåãçããŸãã 3ãæã§ãã®æé å
šäœãå®è¡ããå¿
èŠããããŸããïŒ æ°äžçŽã®çµãããŸã§ãããè¡ãããšã¯åžžã«å¿
èŠã§ããïŒ ãã¶ããããªãã¯ããããã¹ãŠå¿ããŠãæ°å¹ŽãèŠããŠããªãããã«ããŸã æ¯æãããèšŒææžã«æè³ããã¹ãã§ããïŒ
ãããããããæ¯æãææ®µãæ¢ãããã«æ¥ãã§ã¯ãããŸããïŒ èšäºã®åé ã§çŽæããããã«ãèšŒææžã®æŽæ°ã«åé¡ã¯ãããŸããã
Debianã䜿çšããŠããå Žåã¯ã --allow-subset-of-names
ããŒã/etc/cron.d/certbot
--allow-subset-of-names
åŒã³åºãã«è¿œå ããã ãã§ãã
# /etc/cron.d/certbot # certbot -q renew, certbot -q renew --allow-subset-of-names
Debianãšsystemdã䜿çšããŠããå Žåã¯ã ãããã®æé ã確èªããŠãã ãã ã
Debianããªãå ŽåããŸãã¯ãã¡ã€ã«ããªãå Žåã¯ã root
ããcrontab
1è¡ã ã远å ããŸãïŒ sudo crontab -e
ïŒïŒ
42 */12 * * * certbot renew --quiet --allow-subset-of-names
Let's Encryptã§æšå¥šãããŠããããã«ãèšŒææžã1æ¥ã«2åæŽæ°ããããã«ããŠãã ããã ãã®æéã®ã©ã³ãã ã«éžæãããåã§ãããè¡ãå¿
èŠããããŸããã€ãŸãããã®è¡ã®42
ã0ã59ã®ç¯å²ã®å¥ã®æ°å€ã«çœ®ãæããå¿
èŠããããŸãã ãŸãã¯ã/ /etc/cron.d/certbot
ã§è¡ãããŠãã/etc/cron.d/certbot
å®è¡ã§ããŸãã
ä»çµã¿
ãã®ã³ãã³ãã§ã¯ã --allow-subset-of-names
ããã¡ã€ã³ã®éšåã»ããã®èšŒææžãååŸããããšããããã«ãããŒ--allow-subset-of-names
å¿
èŠã§ãã
ããšãã°ããµãŒããŒãµã€ãã«www.example.comãšshop.example.comããã ã1ã€ã®èšŒææžã®äžãééããŸãããã shop.example.comãå¥ã®ãµãŒããŒã«è»¢éããŸããã ãã®ãããªããŒãæå®ããªãå ŽåãCertbotã¯å€±æããèšŒææžããŸã£ããåãåããã«shop.example.comã®æææš©ã確èªããããšããŸãã èšŒææžã®æå¹æéãåãããµã€ãããªãã©ã€ã³ã«ãªããŸãã ãã®ããŒã䜿çšãããšãå°ãªããšãäžéšã®ãã¡ã€ã³ã»ããã®èšŒææžãåãåãããµã€ãããããã¯ãŒã¯äžã«æ®ããŸãã
ããã ãã§ã
tee
ããã³sed
ã«ç²ŸéããŠããå Žåã¯ã hostname
æ£ããæ§æãããŠããã°ã Let's Encryptããã³nginxãã³ãã«ãã»ããã¢ããããããã®ã¯ããã«çãæç€º hostname
ãŸãã ã³ãã³ããã³ããŒããŠè²Œãä»ããã ãã§ãã
ééããèŠã€ããŸãããïŒ å人çã«æžããŠãã ããã