通过 acme.sh 获取 Let's Encrypt 免费证书

Tue 12 February 2019

配置 Nginx 正确处理 Webroot 验证

在证书签发过程中 Let's Encrypt 会验证你拥有当前域名,最基本的方式在你的网站根目录创建一个文件,并通过域名在外部进行请求,如能请求到则认为你拥有该网站的控制权。假设你有一个域名 example.com, 验证步骤大体如下:

  1. 通过工具在网站根目录下创建 .well-known/acme-challenge/some-random-letters
  2. 工具将创建的路径告知 Let's Encrypt
  3. Let's Encrypt 通过域名请求该文件,如 http://example.com/.well-known/acme-challenge/some-random-letters
  4. 若能请求到则确认拥有该网站的控制权颁发证书,否则拒绝颁发

为了简化多个域名颁发证书需指定不同的 Webroot,我们可以将所有域名的验证统一放在一个目录下,并新增一个配置片段供需要启用 HTTPS 的网站引用,新增 /etc/nginx/snippets/letsencrypt-acme-challenge.conf ,并填充如下内容

#############################################################################
# Configuration file for Let's Encrypt ACME Challenge location
#############################################################################
#
# This config enables to access /.well-known/acme-challenge/xxxxxxxxxxx
# on all our sites (HTTP), including all subdomains.
# This is required by ACME Challenge (webroot authentication).
# You can check that this location is working by placing ping.txt here:
# /var/www/letsencrypt/.well-known/acme-challenge/ping.txt
# And pointing your browser to:
# http://xxx.domain.tld/.well-known/acme-challenge/ping.txt
#
# Sources:
# https://community.letsencrypt.org/t/howto-easy-cert-generation-and-renewal-with-nginx/3491
#
#############################################################################

# Rule for legitimate ACME Challenge requests (like /.well-known/acme-challenge/xxxxxxxxx)
# We use ^~ here, so that we don't check other regexes (for speed-up). We actually MUST cancel
# other regex checks, because in our other config files have regex rule that denies access to files with dotted names.
location ^~ /.well-known/acme-challenge/ {

    # Set correct content type. According to this:
    # https://community.letsencrypt.org/t/using-the-webroot-domain-verification-method/1445/29
    # Current specification requires "text/plain" or no content header at all.
    # It seems that "text/plain" is a safe option.
    default_type "text/plain";

    # This directory must be the same as in /etc/letsencrypt/cli.ini
    # as "webroot-path" parameter. Also don't forget to set "authenticator" parameter
    # there to "webroot".
    # Do NOT use alias, use root! Target directory is located here:
    # /var/www/common/letsencrypt/.well-known/acme-challenge/
    root         /var/www/letsencrypt;
}

# Hide /acme-challenge subdirectory and return 404 on all requests.
# It is somewhat more secure than letting Nginx return 403.
# Ending slash is important!
location = /.well-known/acme-challenge/ {
    return 404;
}

在需要启用验证的网站的 Nginx 配置中增加如下内容即可

server {
   ...

   include /etc/nginx/snippets/letsencrypt-acme-challenge.conf;
}

创建相应目录重启 Nginx

sudo mkdir -p /var/www/letsencrypt/
sudo chown $(whoami).$(whoami) /var/www/letsencrypt/
sudo /etc/init.d/nginx configtest && sudo /etc/init.d/nginx reload

获取证书

  1. 安装 acme.sh

    curl https://get.acme.sh | sh
    
  2. 获取证书

    acme.sh --issue -d example.com -d www.example.com -w /var/www/letsencrypt
    

安装证书

获取的证书因为在用户家目录下,所以不能直接使用,需要通过如下命令安装到系统中

sudo mkdir -p /etc/nginx/certs/example.com
sudo chown root.$(whoami) /etc/nginx/certs/example.com
sudo chmod g+w /etc/nginx/certs/example.com
acme.sh --install-cert -d example.com \
    --cert-file /etc/nginx/certs/example.com/cert.pem \
    --key-file /etc/nginx/certs/example.com/key.pem \
    --fullchain-file /etc/nginx/certs/example.com/fullchain.pem \
    --reloadcmd "service nginx reload"

安装后可以配置 Nginx 启用 HTTPS

server {
  listen  80;
  server_name     www.example.com;
  server_name     example.com;
  return         301 https://$server_name$request_uri;
}

server{
        listen 443 ssl;
        server_name     www.example.com;
        server_name     example.com;

        ssl_certificate /etc/nginx/certs/example.com/fullchain.pem;
        ssl_certificate_key /etc/nginx/certs/example.com/key.pem;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_dhparam /etc/ssl/certs/dhparam.pem;
        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';
        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:50m;
        ssl_stapling on;
        ssl_stapling_verify on;
        add_header Strict-Transport-Security max-age=15768000;

        access_log      /var/log/nginx/www.example.com.log;

        location / {
                root    /var/www/html;
                index   index.html index.htm;
        }

        include /etc/nginx/snippets/letsencrypt-acme-challenge.conf;
}

Category: Linux Tagged: SSL HTTPS

comments


记一次 zsh 产生僵尸进程解决

Fri 21 March 2014

问题描述

今天使用 vmplayer 运行了 xp 系统, 关闭后在 zsh 里继续敲命令就阻塞了, 然后就关闭了终端重新打开, 还是阻塞, 重复几次依然如此. 然后使用 gVim 将 shell 切换到 bash, 终端可以正常打开, 然后运行

$ ps aux | grep zsh
wh       27552  0.0  0.1  47244  5164 ?        Ss   09:38   0:00 zsh
wh       27553  0.0  0.1  47244  5156 ?        Ss   09:38   0 …

Category: Linux Tagged: zsh 进程 阻塞 命令 D 僵尸

comments

Read More

解决一直崩溃的 Adobe Flash Player

Wed 12 March 2014

1月份的时候决定从 Ubuntu 换到 Archlinux, 换完之后 Flash Player 就一直没正常过. 一打开视屏就 crash. 从那之后就一直用手机看视屏, 很别扭, 放着大屏不用一直盯着手机看看. 今天下定决心找找原因. google 了一阵也没有啥结果, 所以我决定卸载现有的, 手动安装一个试试.

$ sudo pacman -R flashplugin

结果卸载的时候输出段信息:

warning: /etc/adobe/mms.cfg saved as /etc/adobe/mms.cfg.pacsave

然后我看了下文件内容

$ cat /etc/adobe/mms.cfg.pacsave
#Hardware video decoding
EnableLinuxHWVideoDecode=1

瞬间觉得可能是这个选项引起的, 所以我又装上了 flashplugin …

Category: Linux Tagged: archlinux flash player crash 解决

comments

Read More

grep挽救了我一个下午: 恢复rm -f删除的代码

Thu 25 April 2013

今天对代码进行重构, 新添加了一个logics.py模块, 但并没有加入到git库中, 然后对代码进行清理, 有一个logs文件夹是不需要的所以我打算清掉它, 但是zsh将补全定位到logics.py, 手上的动作快过了脑子,直接按了回车, 做完心想完了, 一上午白费了, 还要花一下午的时间来重新写出这个代码, 虽然明知没有希望,但是我还是不想放弃, 于是就google一下有无解决办法,意外的是找到一篇文章:用grep恢复误删的文本

好吧虽然不知道能不能用, 但是我要试试, 因为我不想再花一个下午来重写这个模块, 我在模块里定义了一个Logics类并且上面差不多30行, 往下差不多300行的样子, 我删除logics.py所在的分区是/dev/sda7, 所以我运行了下面命令:

grep -a -B 50 -A 400 "class Logics(object):" /dev/sda7 …

Category: Linux Tagged: Linux grep rm -f 恢复

comments

Read More

Awesome+tmux+gnomeDo打造高效Linux桌面环境

Tue 04 December 2012

引言

近期一直在Linux下工作,使用Ubuntu 11.10,经过一段时间的使用和磨合,终于打造出一套适合自己的高效Linux桌面环境,之前也在博客中零散的写了几篇文章分享,在此做一番总结.

首先先放出桌面截图 Awesome 桌面截图

Awesome

使用Ubuntu 11.10不习惯默认搭载的Unity,Gnome 3也不尽人如意,也使用xfce/openbox,但使用都不是很好,没有Windows的体验好,然后接触了Awesome,Awesome是一款平铺式窗体管理器,Awesome会去除窗口的标题栏等.会使窗口尽量小的占用桌面空间,而且大部分窗口操作都可以通过键盘来进行操作,免除了各位身为键盘高手的码农们频繁拿鼠标的烦恼.

安装

Awesome Ubuntu下安装十分简单:

sudo apt-get install awesome

配置

拷贝配置文件

Awesome 的配置文件使用lua脚本,所以如果你会lua配置起来会得心应手,我们先拷贝一个基础配置文件,然后在这个基础上进行更改:

cp /etc/xdg/awesome/rc.lua ~/.config/awesome #  ~/.confg下如没有awesome则手动创建

配置自动启程序 …

Category: Linux Tagged: 高效 桌面 Tmux Linux gnome do awesome

comments

Read More

AppArmor引起的无法启动Evince

Thu 15 November 2012

今天在Ubuntu上使用文档查看器(Evince),总是打开没有响应,在命令行下使用命令: evince 却提示:

No protocol specified
Cannot parse arguments: 无法打开显示:

google说是$XAUTHORITY权限的问题,于是查看:

ls -l $XAUTHORITY
-rw------- 1 vim vim 51 2012-11-15 12:12 /data/home/vim/.Xauthority

更改为如下:

chmod +rw $XAUTHORITY

还是不行,这时候猛然想起查看日志,日志有如下一行:

Nov 15 15:48:53 Vostro kernel: [13010.203241] type=1400 …

Category: Linux Tagged: Ubuntu evince apparmor

comments

Read More

Linux高效工作----平铺式窗体管理器Awesome

Thu 25 October 2012

在Linux桌面环境下开发,总想更高效的工作,我已经装备了Gnome Do和terminator,但是我还是觉得不够快我更加希望能解放右手(当然不是找个妹子戒撸,只是右手的鼠标),而且terminator在跑的东西过多的时候开多个terminator不太好管理,这时候一个词进入了我的眼睛平铺式窗体管理器,与传统窗体管理器不同的是平铺式窗体管理器的窗口不会重叠,窗口会被自动调整成正好铺满全屏的尺寸,也就是说无论开多少窗口都会把屏幕占满,如果想象力贫乏就装一个试试吧:

Awesome是一款运行在Unix和类Unix(Linux/FreeBSD)等系统上的一款平铺式窗体管理器,有占用资源小,易于管理和操作等等有点,这里不罗嗦这些说说安装,Ubuntu安装很简单

sudo apt-get install awesome

安装好后登出会话选择awesome登录,然后你是否茫然无知没办法工作了?先简单介绍下使用方法:

Win键+1~9可以切换桌面,

没有菜单对吧 其实再右上角点一下就会出来一个菜单,打开程序会发现标题栏状态栏什么都木有了大大节省了桌面空间,可问题来了,怎么关闭啊不用担心

Win键+Shift+C可以关闭当前窗口

打开默认终端 Win键+Enter就可以打开终端

可以按住 Win键+Shift …

Category: Linux Tagged: 高效 管理器 窗体 桌面 平铺式 Linux awesome

comments

Read More

部署Tornado时iptables引发的的一个问题

Sat 29 September 2012

今天在CentOS上部署了一个Tornado,使用nginx做代理,

tornado使用8888,端口,使用nginx作为反向代理,配置文件如下:

server {
    listen 80;
    server_name www.linuxzen.com;

    location / {
        proxy_pass_header Server;
        proxy_redirect off;
        proxy_set_header X-Real_IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_pass http://127.0.0.1:8888;
    }
}

iptables filter表的INPUT链是DROP的,所以添加如下规则:

iptables -A INPUT -p tcp  -s 127.0.0.1 --dport 8888 -j ACCEPT

但是访问nginx总是返回502 Bad …

Category: Linux Tagged: tornado nginx iptables bad gateway 502

comments

Read More

Linux桌面高效工作----使用Gnome DO

Sat 01 September 2012

不知大家是否和我一样在win下系统win+r输入命令来快速启动程序,这两天在Linux下碰到一个比这更爽,更快的软件,Gnome Do.

Gnome Do能根据用户键入的内容进行自动匹配,从而快速打开系统中已有的程序、文件、书签等。不仅如此,GNOME Do 还包括插件,从而能够做更多事,

比如你安装了pidgin插件只需输入联系人的名字即可打开与他/她的会话,安装了file这个插件输入文件/目录的名字即可打开目录或文件,

当然还有一个不足就是不支持中文

ubuntu用户可以按照下面安装:

sudo apt-get install gnome-do

启动之后Gnome do不会停留任务栏或通知栏只需按Win(ubuntu下称为super)+Space即可启动,输入你想启动的应用程序名字即可打开/关闭等操作.是不是很酷提高不少的工作效率

Category: Linux Tagged: 高效 桌面 Linux gnome do

comments

Read More

推荐两款不错的终端软件

Wed 29 August 2012

一直在Linux下做开发,一个好用的终端软件能帮你节省很多时间和精力

作为一个经常喜欢敲命令的人,可能要同时做很多操作,Linux各个桌面的窗口切换有多那啥,这里就不吐槽了, 我总是在想要做另外一个操作,但又不想结束当前的工作,之前我习惯于再打开一个终端,但是后来终端越来越多导致我想找回原来的工作的时候就变的很费力,而且对桌面有洁癖的人不允许任务栏太杂 后来发现了一款终端软件terminator,它支持分割终端,并可以在终端中快速切换.还有一款下拉式的终端软件Guake可以随意呼出隐藏.下面就一一介绍一下.

1 安装Terminator

sudo apt-get install terminator

2 使用

打开Termintor按Ctrl-E(注意是大E要按住Shift)可以垂直分割终端 Ctrl-O 可水平分割终端 按住Alt然后按上下左右可以在不同的分割窗中切换 Ctrl-D 可以关闭分割窗

2.1 配置

terminator配置文件在~/.config/terminator/config 可以通过这个配置文件配置terminator的字体和颜色

font = Monaco 10  #设置体字
background_color = "#204070" # 背景颜色 …

Category: Linux Tagged: 终端 分割 terminator Linux guake

comments

Read More
Page 1 of 3

Next »

Fork me on GitHub