Windows で Letsencrypt.sh を使う-#2

投稿アップデート情報  追記(9/19) 追記2(10/26)

[2017/10/20 時点の話] ApacheLounge 2.4.x 版でも mod_md が使えるようになったので、 dehydrated ( 旧 Letsencrypt.sh) の代わりに、今はこれを使っている。この件に関する記事→「Let’s Encrypt 証明書の更新方法を dehydrate から mod_md に」。
========================================================
[10/26 時点の話] 鍵交換に Elliptic curve Diffie–Hellman を使うようにしたので,その件についての記事を書いた。「Windows で Letsencrypt.sh を使う-#4
========================================================
[9/19 時点の話] 無事,証明書の自動更新が成功したので,その件についての記事を書いた。☞「Windows で Letsencrypt.sh を使う-#3
 また,当該スクリプトのプロジェクト名が letsencrypt.sh から dehydrated に変わり,リポジトリも https://github.com/lukas2511/dehydrated/releases になったので,記事内の letsencrypt.sh は dehydrated に読み替えてほしい。
========================================================
 承前
 さて, Letsencrypt.sh を使って自動更新するという問題について書こうと思う。前にも, bat を作ったが, letsencrypt-win-simple の制限のせいでうまくいかなかった。しかし, letsencrypt-win-simple に関係していないところは,ちゃんと動いていたわけだ。

 今回, Letsencrypt.sh での Cygwin 上の強制更新はうまくいくことを確認したので,またもや, bat を作り, ‘LetEncryptsh.bat’ と呼ぶことにした。これは, cmd.exe から Cygwin の bash.exe を呼び出して,タスクスケジューラで動かす形をとる。
 

【LetEncryptsh.bat】
@echo off
setlocal enabledelayedexpansion

copy \pathto\letsencrypt.sh\list.txt \pathto\letsencrypt.sh\list-old.txt>>null

pushd \pathto\[Cygwin's bin directory]
bash --login -i -c "/usr/local/letsencrypt.sh/letsencrypt.sh -c"

pushd \pathto\[Cygwin's bin directory]
bash --login -i -c "/usr/local/letsencrypt.sh/letsencrypt.sh -gc"
pushd C:\Users\UserID\AppData\Roaming\archive\YourDomain
del /Q *.*

pushd C:\Users\UserID\AppData\Roaming\certs\YourDomain
forfiles /m *.pem /C "cmd /c echo @file @fsize @fdate @ftime" >\pathto\letsencrypt.sh\list.txt
fc /L \pathto\letsencrypt.sh\list.txt \pathto\letsencrypt.sh\list-old.txt
if %errorlevel%==0 goto not_do_anything
if %errorlevel%==1 goto cpy
exit

:not_do_anything
exit

:cpy
pushd C:\Users\UserID\AppData\Roaming\certs\YourDomain
forfiles /m *-*.pem >\pathto\letsencrypt.sh\new.txt

for /f %%a in (\pathto\letsencrypt.sh\new.txt) do (
SET STR=%%~a
SET STR1=!STR:~0,7!
Pushd C:\Users\UserID\AppData\Roaming\certs\YourDomain
if !STR1! EQU fullcha (copy !STR! \pathto\server.crt>>null)
if !STR1! EQU privkey (copy !STR! \pathto\server.key>>null)
)
\pathto\bin\httpd -k stop
\pathto\bin\httpd -k start
exit

Let's Encrypt.sh 用タスク
Let’s Encrypt.sh 用タスク
 LetEncryptsh.bat は ‘bash –login -i -c “~~”‘ 以外のところについては, bat のフォーマットで書かないといけない。 list.txt と list-old.txt, new.text は letsencrypt.sh のディレクトリに作るようにしてある。

 LetEncryptsh.bat を作ったら,タスクスケジューラに登録して, 1 日 1 回実行する。
 使う前の準備としては,以下のことが必要である。

cmd.exe を起動して,以下のコマンドを実行する。

>pushd \pathto\[Cygwin's bin directory]
>bash --login -i -c "/usr/local/letsencrypt.sh/letsencrypt.sh -gc"
>pushd C:\Users\UserID\AppData\Roaming\certs\YourDomain
>forfiles /m *.pem /C "cmd /c echo @file @fsize @fdate @ftime" >\pathto\letsencrypt.sh\list.txt

 以上。

「Windows で Letsencrypt.sh を使う-#2」への12件のフィードバック

  1. こんにちは

    batからshellと証明書を更新するのに以前より
    複雑になってしまいましたね。
    gitのコードみましたが1000行とかすごいな。
    俺なんか12行ですよ(w

    FSがEXT3だったのでサーバー移転は中止。
    現サーバーを改造。
    なんかあんまりかわりません(w

    脆弱性は様子見中です。
    apacheやphpはニューバージョンがでてもよさそうなんですけどね。
    またバージョンアップかな・・・w

    1. くりくりさん,こんにちは。

      > 俺なんか12行ですよ(w
      そうかあ!! sh を Win 上で動かすんだったら,自前のコードを書いてもいいんですね。なんか exe で使うことの延長として, sh へ行ったので,自前で書くってことがすっかり頭から抜け落ちてました。 sh には詳しくないので,どんなふうに書けばいいのかピンときません。くりくりさんのコードを拝見できませんか?よろしければ,お願いいたします。

      本記事に貼り忘れたので,ここに今回の更新後の SSL Labs のテストの結果を貼っておこう(笑)。☞これです。

      ところで,7/7 に永六輔が亡くなったんですが, 7/12 には巨泉も亡くなっていたんですねぇ。そういう年齢の方たちではあるんですが,なんかがっくり来ます。

  2. 昭和はとっくに終ってるんですが、
    昭和を代表される方がなくなると本当におわったみたい感じく寂しい限りです。
    ご冥福をお祈りしてます。

    >本記事
    疑問なんですが、これ100点取れるサイトあるんですか?
    みたことがないんです。

    シェルスクリプトはこんな感じです。
    複数のサーバーで証明書を使っていますから、for文でサーバを止めて更新for文でサーバーのスタートこんだけですよ。

    #!/bin/sh

    # cronで動かすのでパスを通す
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

    # サーバーのストップ
    for i in nginx postfix dovecot vsftpd vsftpd@vsftpdipv6
    do
    service $i stop
    done

    # 証明書の更新
    cd /root/certbot/

    ./certbot-auto renew

    # サーバーのスタート
    for i in nginx postfix dovecot vsftpd vsftpd@vsftpdipv6
    do
    service $i start
    done

    1. くりくりさん,再度こんにちは。

      > 疑問なんですが、これ100点取れるサイトあるんですか?
      公開されて普通に動いているサーバでは,ないのではないでしょうか。というのが, 100 点にするための設定は,今のところ,実働サイトとしては現実的じゃないと思うんです,その面では大変に安全にはなるんでしょうが……。中の人も, 100 点を取ってもらうことは期待していないんじゃないかと,私は思っていますけど。

      シェルスクリプト,ペーストありがとうございます。
      > gitのコードみましたが1000行とかすごいな。
      > 俺なんか12行ですよ(w
      とお書きだったので,大きな勘違いをしてしまいました。公式クライアントの certbot をお使いですね。 certbot の代わりが letsencrypt.sh になるわけで,くりくりさんのお書きのシェルスクリプトは,私のバッチのようなものかもと思います。

      公式クライアントが,まだ Let’s Encrypt クライアントと呼ばれていた時代に試したのですが, Cygwin 上では,うまく動かせなかったんです。あの後やってませんから,仕様が変わったかもしれませんが, System Requirements がこんな感じのままなので,今回は,初めから certbot の動きは未確認のまま, letsencrypt.sh に行ってしまいました(爆)。

  3. こんにちは

    通勤途中学生がいないなと思ったら、
    今日から夏休み。うらやましい。
    でも、折角の夏休みも曇りじゃね。
    早く梅雨があければいいのに
    そちらは天気いかがでしょうか?

    >私のバッチ
    なるほど

    >certbot
    cronでcertbotをうごかしていますが何かしらバージョンアップがありますよ。検証してみるのもいいかもしれません。

    1. くりくりさん,こんばんは。

      世は,夏休みですねぇ。来週末は,ウナギさん受難の日であります。

      今日も,大変,暑かったです。天気も良くて,夕立でも来ないかなと思っているのですが,今週は今のところ,夕立らしい夕立にはなっていません。午後は出かけましたが,車の中で待っていると,大変でした。日頃は,エンジンを停めて待っているのですが,本日はさすがに,それでは耐えられませんでしたです。

      > 検証してみるのもいいかもしれません。
      そうですねぇ。そのうち,も一度やってみますかね。

  4. おはようございます。

    夏らしい天気でうらやましい。
    こちらは雨ばかりでうんざり。
    お日様が恋しい。

    >本日はさすがに,それでは耐えられませんでしたです。
    自分はまってても平気でつけています。
    所でphp7.0.9が出ましたね。
    php5.5はこれでおわり、php7.1のbetaも出ていました。
    http_proxyの対応バージョンですが、
    apacheの方はでないのかな?
    毎日一応確認しています。

    1. くりくりさん,こんばんは。

      > こちらは雨ばかりでうんざり。お日様が恋しい。
      なんか梅雨が遅れて来たみたいなんですね。
      でも,それだと給水制限は免れそうですね。

      > 所でphp7.0.9が出ましたね。
      ありがとうございます。早速やりました。

      こんな Tweet ,見ました。近頃,一気に伸びてますねぇ, HTTPS。

  5. こんにちは

    カナリア使ってapacheのsever pushをやってみました。
    pushできるのはjsとcssのみですが、これ他ファイルもpushできるようになると相当サイト表示が速くなりそうですな。
    早く,nginxに実装されてほしい。

    >近頃,一気に伸びてますねぇ, HTTPS

    個人的には50パーになってほしいです(w

    1. くりくりさん,こんばんは。

      > カナリア使ってapacheのsever pushをやってみました。
      Canary を使うと,プッシュされているものが簡単にわかるんですね。
      プッシュされたもののキャッシュ状況はいかがでしたか。前にやったときに,うちの非力なサーバだと,初回に時間がかかり過ぎの感じでしたが……。私,このあたりについて,まだよくわかっていないのですが,この初回キャッシュをどうにかすることができるんでしょうか?

      しかし, HTTP/2 Server Push も着々と進歩しているようですねぇ。スゴイ!!

  6. こんにちは

    >この初回キャッシュをどうにかすることができるんでしょうか?

    server pushはまだまだこれから検証の予定。
    あの記事は単純にカナリアで出力結果をみただけです。
    webサーバーの方もnginxからapache単体にするか
    h2oと連携させるか考え中です。
    俺自身はnginxとバックエンドのapache間の通信をhttp/2とserver pushを使えるようするのが目標です。

    でもその前にclamdをコードでインストールできるか検証します。もしくはepelのclamavに変更できるかですね。
    先にこっちを決着つけてからです。

    1. くりくりさん,こんにちは。

      日々,ブログを拝見しています。
      着々と,進んでおられますねぇ。
      尊敬と羨望。 まぶしい!!

      そういえば, Let’s Encrypt は Full Support for IPv6 だそうですよ。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください