使用 Let’s Encrypt 和 Ansible 轻松设置 SSL

前言

自从 Let’s Encrypt 服务开始之后,现在可以便捷且免费地将网站启用 SSL 加密。为了提升 SEO 效果和安全性,我们也有常时性 SSL 加密等需求。

最近刚好有机会利用Let’s Encrypt进行SSL设置,并且未来也可能有SSL设置的机会,所以我打算将其自动化。偶然在GitHub上找到了thefinn93/ansible-letsencrypt这个Ansible脚本,所以决定试用一下。

使用 git clone 命令获取代码..听说它支持 ansible-galaxy,所以我打算使用 ansible-galaxy 进行获取和执行。

目标是自动执行繁琐的SSL获取步骤的所有命令。

以下列举了一些内容,简单总结起来:

创建Ansible的配置文件(hosts,playbook.yml),并执行后,您可以在/etc/letsencrypt目录下获取证书,然后可以根据需要自由使用。

只是这个内容而已。也就是这样的。

这个问题的内容

    • 前提条件

 

    • 自動化の内容

 

    • Ansible で Let’s Encrypt の SSL 証明書の取得

 

    • Nginx の設定

 

    まとめ

前提条件 (Qian ti tiao jian)

    • Ansible バージョン2.0以上 がインストールされている

ansible –version コマンドで確認できます

すでにドメインの取得が終わっていて、サーバに割り当てられている

如果执行nslookup example.com, 并且显示如下结果:
Name: example.com
Address: 123.456.789.012 (不存在这样的IP)

那我认为是正常的。

我只尝试过 Ubuntu 14.04,但似乎也可以在其他操作系统上运行。

自动化的内容

    • SSL 証明書などを Let’s Encrypt を利用して取得し、/etc/letsencrypt 以下に設置する

 

    証明書自動更新用の cron タスクの追加

使用Ansible来获取Let’s Encrypt的SSL证书。

获取代码

ansible-galaxy install thefinn93.letsencrypt -p ~/ansible

请随意选择一个目录来下载ansible脚本。

在hosts文件中描述目标服务器的IP地址。

[web]
123.456.789.0

编辑playbook.yml

- hosts: web
  remote_user: ubuntu # サーバアクセス時の SSH ユーザ名
  roles:
    - thefinn93.letsencrypt
  vars:
    letsencrypt_webroot_path: /var/www/html
    letsencrypt_email: your-username@something.com # メールアドレス。通知がくることがある(?)
    letsencrypt_cert_domains: # 証明書を取得したいドメインのリスト
      - example.com
      - www.example.com
    letsencrypt_renewal_command_args: '--renew-hook "systemctl restart nginx"'

执行 Ansible

cd ~/ansible
ansible-playbook playbook.yml -i hosts

如果运行了像Nginx这样的服务器,如果不先停止进程,可能会出现错误。

请确认操作是否成功完成。

/etc/letsencrypt

如果上述目录已经被创建,并且/etc/letsencrypt/live目录中相应的证书也被生成,则表示成功。

此外,还要确保已添加了用于自动更新证书的cron任务。

sudo crontab -l
#Ansible: Let's Encrypt Renewal
0 0 * * * /usr/local/share/letsencrypt/env/bin/letsencrypt renew --renew-hook "systemctl restart nginx" > /dev/null

Nginx的设置 (Nginx de she zhi)

这只是一个没有进行动作确认的例子。

server {
    # http リクエストを https にリダイレクト (1/3)
    listen 80 default_server;
    server_name sample.com www.sample.com;
    return 301 https://$host$request_uri;
}

server {
  # SSL を取得したドメイン名を記述 (2/3)
  server_name sample.com www.sample.com;
  root /var/www/sample.com/;

  # これはログなので SSL と関係ないです
  access_log /var/log/nginx/sample.com.access;
  error_log /var/log/nginx/sample.com.error;

  # Lets Encrypt で取得した証明書などを指定 (3/3)
  listen 443 ssl;
  ssl_certificate /etc/letsencrypt/live/sample.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/sample.com/privkey.pem;
}

总结

使用Ansible自动获取Let’s Encrypt证书。

我以前在认证服务的网页表单上办理证书获取手续或使用SSL相关命令(尽管经常忘记并每次都要查找)进行操作。但得益于Let’s Encrypt,这些步骤得到了简化,而且可以通过Ansible等工具进行自动化,感觉轻松愉快得多。

我本人在使用Ansible时不必担心脚本命令的内容,直接完成了全部操作。然而,如果想更深入地理解,我认为Let’s Encrypt综合门户网站等可能是一个很好的参考。

广告
将在 10 秒后关闭
bannerAds