2016/09/15

Let's Encrypt を・・・

・・・WindowsServer2008R2 の IIS7.5 で使う。


■ 前書き(すっとばし可)
◆ しかし
このサービス、主たるはLinux系向けの色合いが濃く、公式ツール certbot は 元々 Windows版がナイ。

それでも WindowsSerer2012以降なら 有志提供の Certify for Windows が使え、
シンプルなUI操作だけで導入も更新もラクだと思う。

しかし おきつねインフラに2012鯖はナイ、因って 無難に letsencrypt-win-simple を用いる事となる・・・
◆ が、ぢつは、
最初コレさえ面倒で、設定支援サイトSSLなぅを用いて導入したのが 3ヶ月前。 そして、丁度今日が更新日・・・ マズい(´ヘ`;)

更新するにも SSLなぅを用いただけでは自動更新のタスクスケジューラ登録まで完結しない、更新都度面倒が多いのも判っていた。
で、ちまちま下調べしていた letsencrypt-win-simple を 利用する事にした。
◆ だが、
数多あるTipsも WindowsServer と IIS で SAN を利用する事に特化したサイトは少ない。

そのような現状でも、恐らく 以下2箇所の併読 ▼ が、
IISでLet's Encrypt を利用してSSLサイトを構築する (letsencrypt-win-simple クライアントを利用) - iPentecWindows 上の Apache に SAN 対応の Let’s Encrypt 製証明書を導入する。- o6asan.com
最も理解し易いレイアウトに近い Tips と 呼べるコンテンツだろう。 寄って、一旦これを補足する程度に説明しようと目論んだのだが、それでは、 エラーを1度も発生させるコトなく登録と更新処理定義を完結される方法 とはならない為 中止。
★ Important
ちょっと待て、タスクスケジューラへの登録が滅茶苦茶だ。

TLSサービスで 90日更新と云うのは、確かに長い期間ではないのだが、だからと云って毎日更新させるバカがドコに居る!

・・・対策として後日、アーカイブとコマンドラインを纏めてアップ予定。
■ 手順
※ 色分けと解説は後日、一旦 一部伏せただけの エラーなしで成功した場合の流れのみ貼っておく。
Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. All rights reserved. *:\Users\******>*: *:\>cd *:\Program Files (Free)\SystemExtensions\Network\BryanLivingston\letsencrypt-win-simple *:\Program Files (Free)\SystemExtensions\Network\BryanLivingston\letsencrypt-win-simple>letsencrypt.exe --san Let's Encrypt (Simple Windows ACME Client) Renewal Period: 60 Certificate Store: WebHosting ACME Server: https://acme-v01.api.letsencrypt.org/ Config Folder: %AppData%\letsencrypt-win-simple\httpsacme-v01.api.letsencrypt.org Certificate Folder: %AppData%\letsencrypt-win-simple\httpsacme-v01.api.letsencrypt.org Loading Signer from %AppData%\letsencrypt-win-simple\httpsacme-v01.api.letsencrypt.org\Signer Getting AcmeServerDirectory Loading Registration from %AppData%\letsencrypt-win-simple\httpsacme-v01.api.letsencrypt.org\Registration Scanning IIS Sites 1: SAN - IIS www.*****.*** (*:\*****\*****\inetpub\wwwroot) 2: SAN - IIS www.*****.com (*:\*****\*****\*****\Root) 3: SAN - IIS ***.*****.net (*:\*****\*****\*****\*****) 4: SAN - IIS ***.*****.com (*:\*****\*****\*****\*****\*****) 5: SAN - IIS ***.*****.com (*:\*****\*****\*****\*****) 6: SAN - IIS ***.*****.com (*:\*****\*****\*****\*****) 7: SAN - IIS ***.*****.com (*:*****\*****\*****\*****) 8: SAN - IIS ***.*****.com (*:\*****\****\*****\*****\*****) W: Generate a certificate via WebDav and install it manually. S: Generate a single San certificate for multiple sites. F: Generate a certificate via FTP/ FTPS and install it manually. M: Generate a certificate manually. A: Get certificates for all hosts Q: Quit Which host do you want to get a certificate for: s Running IISSiteServer Plugin Enter all Site IDs seperated by a comma S: for all sites on the server 2,8 Authorizing Identifier www.*****.com Using Challenge Type http-01 Writing challenge answer to *:\*****\*****\*****\Root\.well-known/acme-challenge/******************************************* Writing web.config to add extensionless mime type to *:\*****\*****\*****\Root\.well-known\acme-challenge\web.config Answer should now be browsable at http://www.*****.com/.well-known/acme-challenge/******************************************* Submitting answer Refreshing authorization Authorization Result: valid Deleting answer Authorizing Identifier *****.com Using Challenge Type http-01 Writing challenge answer to *:\*****\*****\*****\Root\.well-known/acme-challenge/******************************************* Writing web.config to add extensionless mime type to *:\*****\*****\*****\Root\.well-known\acme-challenge\web.config Answer should now be browsable at http://*****.com/.well-known/acme-challenge/******************************************* Submitting answer Refreshing authorization Authorization Result: valid Deleting answer Authorizing Identifier ***.*****.com Using Challenge Type http-01 Writing challenge answer to *:\*****\*****\*****\*****\*****\.well-known/acme-challenge/******************************************* Writing web.config to add extensionless mime type to *:\*****\*****\*****\*****\*****\.well-known\acme-challenge\web.config Answer should now be browsable at http://***.*****.com/.well-known/acme-challenge/******************************************* Submitting answer Refreshing authorization Authorization Result: valid Deleting answer Requesting Certificate Request Status: Created Saving Certificate to %AppData%\letsencrypt-win-simple\httpsacme-v01.api.letsencrypt.org\2,8-crt.der Saving Issuer Certificate to %AppData%\letsencrypt-win-simple\httpsacme-v01.api.letsencrypt.org\ca-********************************-crt.pem Saving Certificate to %AppData%\letsencrypt-win-simple\httpsacme-v01.api.letsencrypt.org\2,8-all.pfx Opened Certificate Store "My" Adding Certificate to Store Closing Certificate Store Adding https Binding Adding https Binding Committing binding changes to IIS Opened Certificate Store "My" Removing Certificate from Store Closing Certificate Store Updating Existing https Binding IIS will serve the new certificate after the Application Pool Idle Timeout time has been reached. Committing binding changes to IIS Opened Certificate Store "My" Removing Certificate from Store Closing Certificate Store Creating Task letsencrypt-win-simple httpsacme-v01.api.letsencrypt.org with Windows Task Scheduler at 9am every day. Do you want to specify the user the task will run as? (Y/N) Enter the username (Domain\username): ***********.***\***** Enter the user's password: ************ Renewal Scheduled IISSiteServer 2,8 () Renew After 2016/11/14 Press enter to continue. *:\Program Files (Free)\SystemExtensions\Network\BryanLivingston\letsencrypt-win-simple>
%AppData%
は Windowsの環境変数で、
*:\Users\{ユーザー名}\AppData\Roaming
フォルダを著す。
<<< 20161025 214948 >>>

★ コメントを貰っていた様だが、このログに限らず いつも気付くの遅れる傾向(^_^;)


■ 未だ未編集のままだが 一応添えておくと、
このログの内容は 多くのサーバ管理者が行っている Linux系各種サーバを WindowsServerに載せる運用向けではない。
何故なら、そういった内容であれば 巷に多くの良いTipsが存在しており、ココで改めて扱う必要性も無いからだ。
■ 大前提として、
おきつね鯖は あくまで 全てのサーバ機能を、1機の物理鯖で、
可能な限り WindowsServer2008R2で提供されている機能のみで 処理させる実験鯖。

ActiveDirectoryでドメイン環境を構成、DMZにレイアウトしRRASを用いてルーターとしても機能させた状態で、
IIS7.5 を 中核に稼働させ、ライブ配信鯖(rtmp)のみ nginxに担当させると云う歪な構成だ。

常識的な運用者なら、こんなサーバは立てないだろう。 

だからこそ判り易い資料が無く 模索するしかない、その結果のメモが このログである。
■ 因って
そうした WindowsServerの ないし MS製品の機能のみ で、
ほぼ全てのサーバ処理を完結させているケースを扱うスタンスで纏める予定だ()

メモだけに、読み物として完成させるかは未定とも云える()

8 件のコメント:

  1. こんにちは。

    我が家へのリンクありがとうございます。

    ところで,記事を拝見して,「★ Important」にお書きのことで,少し気になることがありまして。

    公式に下記の記述があります。 (https://certbot.eff.org/all-instructions/)
    Note:
    if you're setting up a cron or systemd job, we recommend running it twice per day (it won't do anything until your certificates are due for renewal or revoked, but running it regularly would give your site a chance of staying online in case a Let's Encrypt-initiated revocation happened for some reason). Please select a random minute within the hour for your renewal tasks.

    というわけで, letsencrypt-win-simple のデフォルトタスクも毎日実行されます。ただ,証明書の更新そのものは,最低 60 日を経過するまでは起こりません。 Let's Encrypt の証明書の売りは自動更新ですから,自動で更新されないとうまみが減ります。しかし,相手先の証明書発行サーバの状態によっては,更新が一度でうまくいかないことがあるでしょうし,仕様の変更とか compromise による破棄とかもあるでしょうから,そういうことへの対処手段ではないのかと,私は思っております。上記のノート内の記述もそのように読めます。

    もっとも, letsencrypt-win-simple の自動更新は, Windows 上の Apache では 2016.6.23 の時点ではうまく動きませんでした。その後,バグが取れているらしい情報をもらいましたが,現在私は別のスクリプトを使わせてもらっているので,情報通りかどうかは,未確認です。

    返信削除
    返信
    1. (^_^)/

      コメントのスパム解除方法が判ったので、漸く返信出来る様に。
      滅多にコメント貰わないので、使用方法確認して無くて・・・(;^ω^)


      ・・・さて、頂いた件について、

      失効直前に更新実行しても有効になっていない様に診えるのが改善され 且つ、
      Let's Encrypt側鯖の負担にならないと云うのなら、

      別段 更新処理が毎日実行される事を忌諱する理由も無かったりします。

      ・・・しかし、ケチな日本のサービスを基準に考えてしまうと、
      その頻度でBANされかねないような気もしたと云うのが あの項を記述した理由だったりします。

      真偽は未確認ですが、Let's Encryptからのエラーメッセージで
      BANとは行かないまでも、警告と取れなくもない一文があったような話もあるようで。

      まぁ気にする様な事では無かったのかも知れませんが・・・


      また なにより、有効期間が90日あるのであれば、
      80日前後経過した辺りから 毎日更新を処理するスケジュールを設定し、
      更新処理成功時点でタスクスケジュールの内容を変更するようにしたほうが 合理的なハズ。
      10回やってダメなら、結局別の問題があるでしょうからね。

      その点も踏まえると、問答無用で毎日実行と云うのは、少し雑で乱暴過ぎると考えた次第。

      削除
    2. しかし そうなると、単純に SchTasks の 記述を配布しても成立しないのか・・・
      letsencrypt-win-simple側でそのように動くよう改良されない限りは面倒が多い(´ヘ`;)

      VBScriptで管理者権限動作する場合確認画面が不可避だから自動更新には流用不能、

      タスクスケジューラ側で、TLS更新に成功したコトを検出出来れば、日付を自動定義するような記述の
      bat叩いて対応出来なくはなさそうだが、果たして UACがドウ動くか・・・

      万民の環境で無難に動くモノになるとは思えないが、一応模索してみるしかないか(´ヘ`;)

      削除
    3. こんにちは。

      返信ありがとうございます。私の方も,返信に今日気づきまして。

      > 真偽は未確認ですが、Let's Encryptからのエラーメッセージで
      > BANとは行かないまでも、警告と取れなくもない一文があったような話もあるようで。

      偽じゃないでしょうか?少なくともまともに動いている更新確認に対しては, ban はきません。
      まともに動いていなかったり,正当な期限後の更新ではないもの(強制更新を何度もかけるとか)には,下記の rate limits に則って ban が来ることがあります。
      https://letsencrypt.org/docs/rate-limits/

      また, Let's Encrypt アプリの開発用には, staging server が用意されていて,そちら(下記)を使ってくれとなっています。動作チェックにもこちらを使うべきだろうと思います。こちらの rate は制限がかなり緩和されています。
      https://letsencrypt.org/docs/staging-environment/

      削除
    4. > 偽じゃないでしょうか?~

      まぁ 英文を完全に理解しての上と云うより、念の為 過度なアクセスはしない程度に設定するほうが無難かな、と云う雑な判断で、
      皆が ナニか意識しなければならないと云う話では無いのも事実ではあります。

      ぶっちゃけ 最初のコメント貰った時点で、本文を書き換えても良かったかもなぁ とは思うモノの、
      ここでの やり取りとの整合性が破綻しそうだったので、あのまま放置して、本文に追記したと云う経緯も。

      また 動作としては、2週イチ程度の頻度で WindowsUpdateに伴う再起動の機会があり、
      ログオン時のみ動作するスケジュールで、充分 TLS更新の 用を成していますね。

      具体的には、90日期限前でも ある程度期間が経過した後の 再起動に伴うスケジュールで 処理が受け付けられ、
      適宜TLSが更新されるのを確認しています。


      > まともに動いていなかったり~
      それは WindowsServer や letsencrypt-win-simple の出来の良さにガッツリ依存してますね。
      WindowsServerに含まれるサーバ機能のみを活用した運用であれば、全く不安の無い動作してくれてます。

      rtmp鯖だけ nginxを利用してはいますが、そちらのWebサーバで TLS動作させるテストも支障が無かったので、
      letsencrypt-win-simple の他に何か必要となるコトは、今の処無い模様。

      何かしら 余程イレギュラーな向きに凝った事をしようとする ないし、
      サービスの大幅仕様変更でも無い限り、この点は変わらないかと。


      > アプリの開発用には~
      letsencrypt-win-simple だけで充分完結している事もあり、その箇所に関連するモノの制作は予定していません。
      適宜TLS動作してくれれはオンの字と云う状況。

      ただ、初期導入補助アーカイブ と schtasks.exeのコマンドラインは、気が向いたら掲載する予定ではありますが、
      前者はともかく後者は、毎日アクセスする事を容認出来る利用者なら不要ではあるので。

      そもそも 拡張子のみのフォルダの準備などを、サーバ管理経験の無い向きに説明するのは面倒で、
      そうした準備のみ済ませるアーカイブの提供くらいなら、どこにもサーバアクセスは無いので支障が無いと考えています。

      何かしら導入開始して いきなりエラーが出ると、初心者は焦って とんでもナイ行動をとるケースが少なくない現実を
      多く診てきているので、それを回避する為だけの 転ばぬ先の杖 程度のモノになると考えています。

      手練れには、サーバ新設導入都度の手抜き用か 全く無用の長物にしかならないでしょうね(^_^;)

      削除
    5. 尚、Apache に関しては ほぼ創世期の Debian 2.x.x系 で触った程度。
      486SX機で導入重くて、結局使い物にならなかったので捨てましたw

      その後は、WindowsServer/IIS/SQLserver に MS-Office連携と云う典型的な運用ばかり。
      因って 生まれがLinux系のブツには殆ど関わっていません。

      rtmp鯖として特化された版の nginx が 久々に触った そう云う系かも・・・

      今はUIのみに頼らなければ、Apacheで出来る事は ほぼIISでも実現可能で、
      VisualStudioとの連携のし易さもあり、IISのみでの稼働になってますね。

      ただ、Apacheより面倒な点が多いのも 事実ではありますがね・・・(^_^;)
      ナニよりIISだと、読み解かずにラクして使える資料が ほぼ無いw

      削除
  2. しかし、やっぱりイマドキの鯖管理者は、WindowsServerの機能だけで
    Web含むサーバ機能全般を構築するなんて事はしないのかな・・・

    おきつねさまは、Windows2000 や WindowsServer2003 の頃から、
    GNUな鯖にならある機能が無くて 不便しながらも、他は使わなかったんだがなぁ(´ヘ`;)
    制約はあっても実現は出来たからねぇ、欲しい機能は。

    返信削除
    返信
    1. WindowsServer2003の頃から比べたら 2008R2なんて便利過ぎてぬるま湯なくらいなんだがw、

      削除