更新日:2017年04月30日

0.環境

[CentOS] 6.4 (64bit版カーネル)
[Apache] 2.2.15

1.セットアップ

  • 個人利用のレンタルサーバーでは有料のSSL証明書を使っていたのですが、 有効期限切れを機にフリーのものに乗り換えてみました。

  • Let’s Encrypt というサービスを利用します。

    Let's Encryptトップ

    下記のマニュアルに沿って進めました。(その他の参考ページは末尾に記載)

    Let’s Encrypt 操作方法

    まずは、任意のディレクトリに Let’s Encrypt クライアントをダウンロード。

    # cd /usr/local/src
    # git clone https://github.com/letsencrypt/letsencrypt
    # cd letsencrypt
    # ./letsencrypt-auto --help
    
  • お! helpだから使い方が表示されるかと思いきや、依存関係のあるパッケージがダウンロードされた・・・

    しかも下記メッセージによると、どうやらPythonのバージョンが古くて失敗してるっぽい。

      :
    (省略)
      :
    Complete!
    WARNING: Python 2.6 support is very experimental at present...
    if you would like to work on improving it, please ensure you have backups
    and then run this script again with the --debug flag!
    
  • ググってみると同じ問題で悩んでる人がいました。

    letsencrypt-autoは Python 2.6では動かない

  • さらに調べると下記ページに解決方法がありました。

    CentOS 6系は Python 2.7をインストールする必要あり

    実行コマンドは下記の通り。

    # yum install python27 python27-python-devel python27-python-setuptools python27-python-tools python27-python-virtualenv
    
  • pythonのバージョンを調べる。

    # python --version
    Python 2.6.6
    

    (注) 2.6のままですが気にせず続行します。

    (yum管理外でPythonをソースからビルドしてインストールすると letsencrypt-auto が動かなくなりました)

  • コマンドを再実行すると、Pythonが古い旨のメッセージはもう出なくなりました。

    # ./letsencrypt-auto --help
    
  • 続けてドメイン認証を試みます。(以降【】内は読み替えて下さい)

    # ./letsencrypt-auto --apache -d 【ドメイン名】
    
  • エラーメッセージが・・・

    Updating letsencrypt and virtual environment dependencies.......
    Running with virtualenv: /root/.local/share/letsencrypt/bin/letsencrypt --apache -d 【ドメイン名】
    Version: 1.1-20080819
    Version: 1.1-20080819
    The apache plugin is not working; there may be problems with your existing configuration.
    The error was: NoInstallationError()
    

    ユーザーガイドによるとApache2.2系だとapacheプラグイン(–apache)は使えないようです。

    となると、下記の通りstandaloneかwebrootのいずれかを実行しないといけません。

    If you want to use a webserver that doesn't have full plugin support yet, you can still use "standalone" or "webroot" plugins to obtain a certificate: (ユーザーガイド抜粋)

    僕の環境では、1つのサーバーに複数のvirtual hostを立てているので、webrootプラグインを選択しました。

    さらにwebrootプラグインだとApache無停止でいけるそうです。

  • 念のため、既に書いてあったSSL用のvirtual hostはコメントアウトしてApacheを再起動します。

    #<VirtualHost *:443>
    #    :
    # 【省略
    #    :
    #</VirtualHost>
    
  • 下記コマンド実行。

    # ./letsencrypt-auto certonly --webroot -w 【ドキュメントルート】 -d 【ドメイン名】
    
  • 連絡用e-mailを入力し、利用規約を確認します。

    email入力

    利用規約

  • 下記のエラーが出ました。

    Updating letsencrypt and virtual environment dependencies.......
    Running with virtualenv: /root/.local/share/letsencrypt/bin/letsencrypt certonly --webroot -w 【ドキュメントルート】 -d 【ドメイン名】
    Version: 1.1-20080819
    Version: 1.1-20080819
    Failed authorization procedure. 【ドメイン名】 (http-01): urn:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from http://【ドメイン名】/.well-known/acme-challenge/【省略】 [【サーバーIP】]: 401
    
    IMPORTANT NOTES:
     - The following 'urn:acme:error:unauthorized' errors were reported by
       the server:
    
       Domains: 【ドメイン名】
       Error: The client lacks sufficient authorization
    
  • ドキュメントルートにファイルを配置して、インターネットからアクセスを試みているけど失敗してるっぽい・・・

    試しにブラウザから上記URLにアクセス。

    どうやら、port80(http)からport443(https)へのリダイレクト設定を入れていたことが原因のようです。

    リダイレクトを無効にした後、ブラウザから上記URLにアクセスできることを確認した上で、再度サーバー上で下記を実行。

    # ./letsencrypt-auto certonly --webroot -w 【ドキュメントルート】 -d 【ドメイン名】
    
  • 下記メッセージが表示され認証が成功!

    Updating letsencrypt and virtual environment dependencies.......
    Running with virtualenv: /root/.local/share/letsencrypt/bin/letsencrypt certonly --webroot -w 【ドキュメントルート】 -d 【ドメイン名】
    Version: 1.1-20080819
    Version: 1.1-20080819
    
    IMPORTANT NOTES:
     - Congratulations! Your certificate and chain have been saved at
       /etc/letsencrypt/live/【ドメイン名】/fullchain.pem. Your cert will
       expire on 2016-03-04. To obtain a new version of the certificate in
       the future, simply run Let's Encrypt again.
     - If like Let's Encrypt, please consider supporting our work by:
    
       Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
       Donating to EFF:                    https://eff.org/donate-le
    
  • この後どうすれば・・・?

  • ユーザーガイドによると、apahceプラグインなら全自動で設定してくれるようですが、今回は使ってないので手動で証明書ファイルを設定しないといけません。

  • 上記メッセージのパスを覗いてみると、必要なファイル一式がありました。

    # ll /etc/letsencrypt/live/【ドメイン名】
    #
    lrwxrwxrwx 1 root root 38 12月  6 03:43 2015 cert.pem -> ../../archive/【ドメイン名】/cert1.pem
    lrwxrwxrwx 1 root root 39 12月  6 03:43 2015 chain.pem -> ../../archive/【ドメイン名】/chain1.pem
    lrwxrwxrwx 1 root root 43 12月  6 03:43 2015 fullchain.pem -> ../../archive/【ドメイン名】/fullchain1.pem
    lrwxrwxrwx 1 root root 41 12月  6 03:43 2015 privkey.pem -> ../../archive/【ドメイン名】/privkey1.pem
    
  • fullchainを除く3ファイルをport443のvirtual hostに設定して、

    <VirtualHost *:443>
        ServerAdmin  【メールアドレス】
        DocumentRoot "【ドキュメントルート】"
        ServerName   【ドメイン名】
        SSLEngine on
        SSLCertificateFile      /etc/letsencrypt/live/【ドメイン名】/cert.pem
        SSLCertificateKeyFile   /etc/letsencrypt/live/【ドメイン名】/privkey.pem
        SSLCertificateChainFile /etc/letsencrypt/live/【ドメイン名】/chain.pem
    
        ErrorLog  logs/【ドメイン名】-error_log
        CustomLog logs/【ドメイン名】-access_log common
    </VirtualHost>
    
  • Apache再起動。

    # service httpd restart
    
  • httpからhttpsへのリダイレクト設定も元に戻します。

  • ブラウザでサイトにアクセスするとSSLマークが表示されました!(ドメイン名はマスク済み)

    ブラウザSSL表示

  • Let’s Enctyptの証明書は有効期間が短いので、ついでに自動更新の設定もしておきましょう。(下記リンク参照)

    Let’s Encrypt - 証明書の更新と自動化

  • 組織の実在証明はありませんが、個人で暗号化メインならこれで十分ですね。何より無料がうれしいです。

参考ページ