「LetsEncrypt」タグアーカイブ

INDIGOのVPN/メモリ1GBが販売開始になっています(2021/10/17更新)

さっき(21/07/27 15時過ぎ)お知らせが来たんですが、月350円弱でVPSが借りられる、NTTPCのINDIGO/メモリ1GB版が補充されたとのことで、販売開始になっています。

2021/10/17追記 無くなったり追加されたりしているようです。メモリ1GBはパワー不足にも思われがちですが、結構使えます(SWAP利用)。

無くなっちゃう前にどうぞ。



 

すぐ無くなると思うのでお早めに。

 

Let’sEncrypt がUpdate後におかしくなったら

どうもこんにちは、さんぺいです。

皆さんは、「本来、別にやりたいことがあったのに、気づいたら違うことをしてた」って経験、ありませんか。今の僕がまさにそれです。

 

ふと見たらlet’sencyptのバージョンアップが出てた

よせばいいのに、ふと叩いてみたコマンド。

 

yum check-upgrade

 

これは簡単に言えばWindowsPCでWindows-Updateを実行するようなもので、入っているアプリケーションの更新が出てるかどうかをみるものです。

いつもなら

 

yum check-upgrade zabbix-*

 

のようにアプリケーションを特定してみるんですが、たまに指定がめんどくさくなって

 

yum check-upgrade

 

を叩いちゃいます。

んで、Linux系ってupdateが多くて、頻繁に更新されて且つ互換性がなかったりして古いものが動かなくなっちゃうこともあったりで、ほったらかしにしているものも実は結構あるのです。

ただ中には脆弱性が発見されたりアプリ側から強く言われたりしてupdateすることもあるんですが、大半は放置なんです。

で、放置してきた山のようなupdateの中で見つけてしまったのがこれ

 

certbot.noarch

 

これが何かといいますと、このサイトを含む、僕が契約しているサーバ用に作成した証明書を管理しているアプリケーションなんです。

 

 

 

で、ここで新しもの好きの僕の心がざわつきます。

 

僕の心
おい、新しいのがでてるぞ、さっさと手を付けろボケ
いや、ほかにやりたいこといっぱいあるんだから、やめとこうよ
僕の心
やってみてうまくいけばブログに書いてウハウハだぞ
やりましょう(意志弱w)

 

Update実行、そして失敗

以下、ログごと貼り付けます(めんどくさいの避けるの、ここに極まれり)

# yum upgrade certbot
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* epel: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* remi-php71: ftp.riken.jp
* remi-safe: ftp.riken.jp
* updates: ftp.iij.ad.jp
Resolving Dependencies
–> Running transaction check
—> Package certbot.noarch 0:0.37.2-1.el7 will be updated
—> Package certbot.noarch 0:1.0.0-1.el7 will be an update
–> Processing Dependency: python2-certbot = 1.0.0-1.el7 for package: certbot-1. 0.0-1.el7.noarch
–> Running transaction check
—> Package python2-certbot.noarch 0:0.37.2-1.el7 will be updated
—> Package python2-certbot.noarch 0:1.0.0-1.el7 will be an update
–> Processing Dependency: python2-acme >= 0.40.0 for package: python2-certbot-1 .0.0-1.el7.noarch
–> Processing Dependency: python2-distro for package: python2-certbot-1.0.0-1.e l7.noarch
–> Running transaction check
—> Package python2-acme.noarch 0:0.37.2-1.el7 will be updated
—> Package python2-acme.noarch 0:1.0.0-1.el7 will be an update
—> Package python2-distro.noarch 0:1.2.0-3.el7 will be installed
–> Finished Dependency Resolution

Dependencies Resolved

==============================================================================
Package Arch Version Repository Size
==============================================================================
Updating:
certbot noarch 1.0.0-1.el7 epel 41 k
Installing for dependencies:
python2-distro noarch 1.2.0-3.el7 epel 29 k
Updating for dependencies:
python2-acme noarch 1.0.0-1.el7 epel 74 k
python2-certbot noarch 1.0.0-1.el7 epel 358 k

Transaction Summary
==============================================================================
Install ( 1 Dependent package)
Upgrade 1 Package (+2 Dependent packages)

Total download size: 502 k
Is this ok [y/d/N]: y
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
(1/4): certbot-1.0.0-1.el7.noarch.rpm | 41 kB 00:00
(2/4): python2-acme-1.0.0-1.el7.noarch.rpm | 74 kB 00:00
(3/4): python2-certbot-1.0.0-1.el7.noarch.rpm | 358 kB 00:00
(4/4): python2-distro-1.2.0-3.el7.noarch.rpm | 29 kB 00:00
——————————————————————————–
Total 520 kB/s | 502 kB 00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : python2-distro-1.2.0-3.el7.noarch 1/7
Updating : python2-acme-1.0.0-1.el7.noarch 2/7
Updating : python2-certbot-1.0.0-1.el7.noarch 3/7
Updating : certbot-1.0.0-1.el7.noarch 4/7
Cleanup : certbot-0.37.2-1.el7.noarch 5/7
Cleanup : python2-certbot-0.37.2-1.el7.noarch 6/7
Cleanup : python2-acme-0.37.2-1.el7.noarch 7/7
Verifying : certbot-1.0.0-1.el7.noarch 1/7
Verifying : python2-acme-1.0.0-1.el7.noarch 2/7
Verifying : python2-distro-1.2.0-3.el7.noarch 3/7
Verifying : python2-certbot-1.0.0-1.el7.noarch 4/7
Verifying : python2-certbot-0.37.2-1.el7.noarch 5/7
Verifying : python2-acme-0.37.2-1.el7.noarch 6/7
Verifying : certbot-0.37.2-1.el7.noarch 7/7

Dependency Installed:
python2-distro.noarch 0:1.2.0-3.el7

Updated:
certbot.noarch 0:1.0.0-1.el7

Dependency Updated:
python2-acme.noarch 0:1.0.0-1.el7 python2-certbot.noarch 0:1.0.0-1.el7

Complete!

 

と、始まるともう止まらず一気に最後まで走っちゃうんですが、とりあえずエラー無く終わっています。

 

終わったら間違いなく動くか確認します。

 

とりあえず当たり障りのないところでヘルプファイルをみようとします

 

# certbot –help
An unexpected error occurred:
AttributeError: ‘module’ object has no attribute ‘TLSSNI01’
Please see the logfile ‘/tmp/tmpfnMveA/log’ for more details.

※原文ママ。エラーも赤く出てきました。プロンプトは黒と白だけじゃないんですよ?

 

 

 

 

 

なんかわかんねーけど出てる・・・

 

 

沼に入ってしまった感おおありなんですが、どうしようもないのでエラーをまるごとコピーして先生に聞いてみます。

幸いにもテラテールで全く同じ症状の人を見かけます。

 

こういうのって見つけた瞬間、「あ、この人は僕の運命の人だ」とか思っちゃいません?一緒に飲んだら楽しいのかな、とか、趣味は同じかな、とか。

いざ会うと話もできない人見知りのくせに。

 

閑話休題、TeraTailでは簡単な問診の後にこう書かれていました。

 

ggrks

 

 

 

ではなく

yum update python2-certbot*

 

を実行してみるといいよ、と。TeraTailには天使がいたようです。

 

詳しい理由を確認することなく、そのまま打ち込む僕47歳。

そんな自分が好きな典型的B型です(どうでもいい)。

 

# yum update python2-certbot*
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* epel: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* remi-php71: ftp.riken.jp
* remi-safe: ftp.riken.jp
* updates: ftp.iij.ad.jp
Resolving Dependencies
–> Running transaction check
—> Package python2-certbot-apache.noarch 0:0.37.2-1.el7 will be updated
—> Package python2-certbot-apache.noarch 0:1.0.0-1.el7 will be an update
–> Finished Dependency Resolution

Dependencies Resolved

==============================================================================
Package Arch Version Repository Size
==============================================================================
Updating:
python2-certbot-apache noarch 1.0.0-1.el7 epel 107 k

Transaction Summary
==============================================================================
Upgrade 1 Package

Total download size: 107 k
Is this ok [y/d/N]: y
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
python2-certbot-apache-1.0.0-1.el7.noarch.rpm | 107 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Updating : python2-certbot-apache-1.0.0-1.el7.noarch 1/2
Cleanup : python2-certbot-apache-0.37.2-1.el7.noarch 2/2
Verifying : python2-certbot-apache-1.0.0-1.el7.noarch 1/2
Verifying : python2-certbot-apache-0.37.2-1.el7.noarch 2/2

Updated:
python2-certbot-apache.noarch 0:1.0.0-1.el7

Complete!

 

なんだかよくわかっていませんが何かをUpdateしたようです。

こういうのってたまにあるんですが、言われたとおりにそのままやってると、いつの間にかすごい数のアプリが入っていたり。しかもどれも有効なものじゃなかったり。

 

今回については幸いにも効果あったようです。

 

# certbot –version
certbot 1.0.0

↑エラーが出て見れなかったバージョンが見えるように

 

# certbot renew
Saving debug log to /var/log/letsencrypt/letsencrypt.log
※以下略

↑更新コマンドも問題なく通りました。

 

結論(まとめ)

新しいものにとびつくとろくなことがない

 

ではなく、

 

・Let’sEncryptのスクリプト更新後に下記エラーが出たらUpdate内容に不足がある可能性が考えられるので以下を試してみること

エラー内容:
An unexpected error occurred:
AttributeError: ‘module’ object has no attribute ‘TLSSNI01’
Please see the logfile ‘/tmp/tmp43xFwy/log’ for more details.

 

対処用コマンド:

yum update python2-certbot*

※今回は”python2-certbot-apache”のアップデートが必要だったが、yumの依存性確認で漏れてしまったためにUpdateできておらず、差分が出てしまってエラーになっていたものと思われる。

Updating:
certbot noarch 1.0.0-1.el7 epel 41 k

↑Update指定したスクリプト

Installing for dependencies:
python2-distro noarch 1.2.0-3.el7 epel 29 k

↑上記Update後に必要な追加分の自動インストール

Updating for dependencies:
python2-acme noarch 1.0.0-1.el7 epel 74 k
python2-certbot noarch 1.0.0-1.el7 epel 358 k

↑既にインストールされていたが、更新が必要なので自動的に更新されるもの(ここにはいっているべきだったが、抜けてしまった模様)

 

以上、解決してよかったよかった。

 

マルチサイトのワードプレスでSSL対応したときの記録

[jin-fusen3 text=”この記事はこんな人向け”]

  • マルチサイトのワードプレスでSSL対応しようとしている
  • 大半のサイトは変えられたけど、メインサイトだけ変えられない
  • そもそもブログなんかやってないけど内容が知りたい

どうもこんにちは。さんぺいっち(@3pei_tw)です。今回は割とまじめな話です。

はじめに結論を書いておきますが、マルチサイトの主サイトをプラグイン抜きで完全HTTPS化するには、簡単な方法はありません。これから書く方法は結構危険な作業です。失敗してもいいなら参考にしていただいて全くかまいませんが、失敗しても僕は責任をとれません。悪いことはいいませんからおとなしくプラグインに頼っておいたほうが楽ですよ。

マルチサイトのメインだけSSL化できない!

おっ、読まれるんですね。いばらの道かもしれませんがいいですか?ってくどいかw

 

さて、どういうことかと言いますと、ワードプレスっていうこのブログを形作っているものがあるんですが、そのwordpressには中級者以上向けの機能的なもので「マルチサイト」っていうものがあります。

「マルチサイト」っていうのは読んで字のごとく1つのインストールで複数のサイトが構築できる機能になります

[box05 title=”ここが詳しい”]
WordPressマルチサイトのメリット・デメリット・設定方法
https://www.vektor-inc.co.jp/post/wordpress-multi/
[/box05]
※なお専用のプラグインを使うことにより、サイトごとに独自ドメインをあてがうこともできたりします

[box05 title=”ここが詳しい”]
複数サイト運用方法(複数ドメイン型)
https://www.templateking.jp/practical/build/multi_dom.html
[/box05]

 

通常は1つのサーバのスペースに1つのシングルサイトを構築して運用する人が多いんでしょうが、僕ははじめから複数サイト建てたいなと思ってましたので、こういうことができると知ったら即座に飛びついてました。

で、マルチサイトを建てるにあたっては、メインとなるサイトが必要になります。それがこのブログです。

え、メインのくせにくだらないことばっかり書いてて恥ずかしくないのかって?

はい。ちょっぴり恥ずかしいですね(素直)。

 

問題発覚までの経緯

昨年だったか、Google先生がSSLマンセーとか言い出したので皆が慌ててSSL化しだします。

そりゃ現状広く使わてれるchromeで「保護されていない」とか書かれた日には誰も来てくれなくなるかもしれないわけですし、ちょうど無料の証明書がもらえるサービスもはじまっていたことで、一気にブログ界隈ではHTTPからHTTPSへシフトすることとなりました。

 

[box05 title=”ここが詳しい”]
アドレスバーに「保護されていません」が出るのはどんな時?
https://zenlogic.jp/aossl/browser/safety-indicator_light/
[/box05]

 

で、うちもそのサービス “Let’sEncrypt” を使って証明書をいただき、それをwordpressのプラグインを使って適用させておりました。

それが先日、実はプラグインなんて使わずに設定をちょいちょいいじるだけでSSL化できちゃう、というのを知ったんです。

プラグインっていうのは便利な反面、入れすぎるとサイトの負担になるとよく言われています(要は表示が遅くなる)。そのあたりはあんまり気にしていなかったのですが、重すぎて、せっかく来てくださった方々に不快な思いをさせるのも本意ではないので、簡単に対処できるならプラグインは使う必要もないな、と思い設定を変更してみました。

設定作業はあっさり終わり、プラグインを無効にしても問題なくHTTPS表示ができているようにみえました。

ええ。そうだと思っていたんです・・・

 

予兆

ここんところ以下のような悩みが出ていました

①無効にしたはずの自サイトリンクでリンクされました通知が来るようになった
②パーマリンクがhttp://3pei.info~(非SSL)で出てきていた(実害無し)

②は実害ないので見て見ぬふり。①はちょっと気になるなー。Wordpressの仕様でも変わったのかなー ぐらいに考えてました。

しかし検索してもそれらしいものはヒットせず。それなりに使われている方法だろうからおかしくなったらすぐ誰かが気づいて対策おしえてくれたりするよなー、と他力本願丸出しの僕だったんですが、目立つ検索結果がない=僕んとこの環境特有という事実に向き合うことになりました。

いろいろ可能性を考えます。そして熟考を重ねた結果、一見バラバラに見える悩みが1つにまとまります。推理小説マニアなら点が線でつながるってやつでしょうかね。

 

そうだSSL化だ!

 

わかってしまえばなんてことはない話なんですが、ここに行きついた自分をほめてあげたい気分です。

 

①自サイトリンクの通知
→設定でSSL化することによりHTTPサイトからHTTPSサイトへのリンクの扱いとなり、他サイトからリンクされたと思ったうちのワードプレスがご丁寧に通知してくれていた

②パーマリンク
→WPのマルチサイト環境における制限(下記参照)によるもの。設定でHTTPをHTTPSに直すことで改善した

 

根本原因解説

原因はSSL化の設定をプラグインから.htaccessでの処理に変えたことなんですが、根本的な原因はWordPressのマルチサイトの仕様によるものでした

有志作成のドキュメントには次のような記述があります

注: 以下の手順はシングルインストールの WordPress 向けのものです。WordPress マルチサイトをお使いの場合は、データベースを手動で編集する必要があります。

https://wpdocs.osdn.jp/%E3%82%B5%E3%82%A4%E3%83%88_URL_%E3%81%AE%E5%A4%89%E6%9B%B4

 

通常、ほとんどのシングルサイトはこのような設定画面になっています

※同一VPS内にある、マルチサイトの1つなんですが、ほぼシングルサイトと同じような表記なので参考まで。

 

これがマルチサイトのメインになっているとこうなります。

はい。見事にいじれなくなってます。
※作業後に取ったSSなので既にHTTPS化済みですが

こうなることには恐らくですがこんな理由が考えられます。

マルチサイト環境のメインサイトは基幹サイトなため、変更されにくくしておくべき

ということで簡単には変えられません。DBをいじる必要があります。

[box05 title=”データベースのデータをいじる方法”]
①phpmyadminを使って置換する
②MySQLにコンソールで入って置換する
③WP-CLIを使って置換する
[/box05]

①の一括置換はやったこともあるので簡単にできそうなところなんですが、諸事情により消した過去があります
※いれとくと海外の方がいろんなワードでログインしようとアタックしてくるんですよw
まぁ大丈夫かとは思ったんですが消しといたほうが精神衛生上良いかと思って。

②はうっかり間違ったら大惨事になりかねないのでやめとこうかと
※③も正直ほとんど変わらんけど

③使ったことない。使う機会は今しかない。迷わずこれに決定

 

WP-CLIとは

だいぶ長くなったので端折りますが、コンソール画面からコマンド入力でワードプレスの設定を変えるものです(はしょりすぎ)。

 

①WP-CLIをインストール

②データ一括置換コマンドを入れて一括置換
wp-cli.phar search-replace 'http://3pei.info(変更前のアドレス)' 'https://3pei.info(変更後のSSLアドレス)' --path=/var/www/html/ --skip-columns=guid --allow-root

③実行してうまくいけば一気にすべてが解決
※サイトURL指定箇所以外にも検索ワードに合致するものは根こそぎ変更されます

 

まとめ

マルチサイトの主サイトについてはGUIでのURL設定変更ができません。コマンドラインのみの対応です。PHPMYADMINを使うのが一番でしょう

くどいようですが危険な作業です。コピペでできるもんじゃありません。コマンドの意味、使い方が判らない方は絶対に避けるべきです

作業についてはすべて自己責任でおねしゃす。

 

以上、長いことお付き合いいただきありがとうございました。

FreenomのAPI

FreenomのAPIはフリーではありません

 

無料でどこまでできるかを検証すべく ここ にサイトを開設してみたんですが、さすがにドメイン更新をミスってサイト停止になるようなことは避けたいと考え、どうにか自動的に更新できないもんかとググっておりました

自動処理とくればAPI。さっそくAPIで検索してみると、意外や意外、あるじゃないですか。

ドキュメントもかなりしっかりしてるし、もう9割がたできた気でいるぼく47歳。

 

 

試してみました

サンプルとして死活監視用のコマンドを叩いてみます。

 

# curl -X GET https://api.freenom.com/v2/service/ping.xml
<freenom>
<result>PING REPLY</result>
<status>OK</status>
<timestamp>2019-10-06 03:55:44 UTC</timestamp>
</freenom>

 

おぉ、レスポンスあるじゃん。期待に夢が膨らみます。膨らみ過ぎてはちきれそうです。

 

続いてアカウント情報を埋め込んだコマンドを叩いてみます。とりあえず取得ドメインの一覧を出すやつ。

※コマンドは載せていません。Responseも表示させるため多少加工してあります。

 

<freenom>
<error>Login credentials do not match any account</error>
<status>error</status>
</freenom>

 

あれあれ?

アカウント間違ったかな、と思いあらためて入力したり、サンプルは複数行だったのを1行にしてみたり、文字列を”’”でくくってみたり、いろいろやるもののレスポンスは

<freenom>
<error>Login credentials do not match any account</error>
<status>error</status>
</freenom>

のまま。

 

原因判明

海外サイトをGoogle翻訳を使いみてみるとこんな記載が。

 

 

 

ちくしょう、変に期待持たせやがって・・・

 

 

結論

無料でドメインが取得できる「Freenom」ですが、APIは無償提供していません。

APIを使いたいのであれば有償(提携)契約を結んでください。

そうでなければ手動更新してください。

一応解説しておくと、PINGで応答があったのは誰でも実行可能なものだったのでレスポンスがあったと思われます。アカウント情報が必要なAPIはリセラー契約を結んでAPI利用を許可してもらわなきゃだめってことでしょう。

 

よければ僕のサイトでもみてやってください。おトク情報満載です。

 

また、ほかにもFreenomのことを書いてますのでよかったらどうぞ

無料ドメインの”Freenom”でドメイン更新に困ったら

年間0円で独自ドメインが持ててしまう”Freenom”の更新方法の話です。

Freenomは取るのは簡単なんですが、いざ使い始めて期限が来ると更新の仕方がわからなくて放置→失効して使えなくなってた、という人も中にはいるんじゃないでしょうか
(僕だけとは思いたくない・・・・・)

 

まずはFreenomについて

そもそもフリーナムって何よ、という方が多いと思います。

 

 

公式サイトでの説明によれば、世界初そして唯一の無料ドメインプロバイダだそうです。

ここでも使っていてちょっと前にご紹介していた、無料のサイト証明書を提供する ”Let’sEncrypt” と合わせると、とんでもない低価格で独自ドメインのサイトが開設できることになります。
※あとはサーバだけなのでサーバも無料で独自ドメインを使えるやつを見つければ「完全無料」で始められます。
※そのうちどこかで「無料尽くしで作るWordPressサイト」の記事でも書こうと思います

作りました↓

 

本日のお題は「Freenomのドメイン更新方法」

ということで本題からそれてしまいましたが、今日の案件はそのFreenomの更新方法です。

えっ、そこにあるの?というような箇所に設定項目があるのでお間違えなく。

 

①期限切れ通知

期限が切れる2週間ほど前になると下のようなメールが届きます。

〇意訳:

いついつにお前がとったドメイン切れっからいるなら更新しろよ!
更新の仕方は~だからな!忘れんなよ!

 

②サイトにログインし、コンパネを確認します

ログインしたら”Renew Domain”を選びます。”My Domains”を押したい気持ちはわかりますがぐっとこらえてください。

 

続く画面で取得ドメインの一覧が出てきますので”Renew This Domain”を押します。

期限については@FREEと書かれた最大値、即ち12か月を選択してください。

・FREEとなっていること

・更新対象のドメイン名であること

これを普通にMyDomainからやろうとすると、たとえ1年未満でも費用が掛かるようになります。注意しましょう。

 

これで完了です。念のためMyDomainsで期限が延びていることを確認しておいてください。なお記載上はメールが届くようなことが書かれてますが届きません(汗

 

まとめ&補足

以上で無料のドメイン”Freenom”の更新作業は完了です。お疲れ様でした。

なお、仮に期限が切れてしまって利用停止になっても、しばらくするとまた無料提供枠で出てきます(気づいたら出てたので、またとったw)

証明書の話

こんにちは、さんぺい(3pei_tw)です。夢ははてなブックマークのTOPに記事が載ることです。

最近梅雨というとなんだか微妙な感じで突入したかと思うといつの間にか明けて夏に入ってた、なんてことが多かったので、どんよりとしたこの空気はある意味全力で梅雨感を出してくれてる良い演出、と言えたりしますかね。

えっ違うだろボケって?はいそうですか失礼しました。。。

 

突然ですが、証明書っていうと何を思い出しますか?

古くは(今もあるけど)印鑑証明とか、戸籍謄本なんていうのも証明書の1つですね。今日のお題は証明書。中でもメジャーな「遅延証明書」について書いてみたいと思います。

遅延証明書とは主にJRなどの・・・・

 

そんな訳はない

はい。嘘です。鉄道の遅延証明を語っても何も得るものはないです(たぶん)。誰もつっこんでくれないのであぶなく語るところでした。←

 

今回の証明書は「電子証明書」です。

 

えっ、閉じちゃうんですか?もしかして遅延証明書のほうがよかったですか?

ってしつこいですね。。

 

なんで電子証明書?

[box03 title=”なんで?”]
①この間オンラインで確定申告しようとしてあぶなくロックを掛けるところだったのが電子証明書をつかった「公的個人認証サービス」であった

②ちょっと前に配置換えで別な担当に配属になったらメールの設定をするのに証明書が必要だったのに気づかず半日以上潰したことがあった
[/box03]

です。電子証明書を代表する2つの形式の証明書に翻弄された腹いせの記事です。よければ御覧ください。それではどうぞ。

 

1.公開鍵と秘密鍵

この手の話題で避けて通れないのが「鍵」のハナシ。

思えば今から10年以上も前、.comマスター★★を取得するのにこの話が出てきて吐きそうになったっけ(遠い目)

 

[box03 title=”前提条件”]

①公開鍵による暗号化は対になる秘密鍵でしか複号できない

②秘密鍵による暗号化は対になる公開鍵でしか複号できない

③秘密鍵は隠して保管し、公開鍵は広く公開する

[/box03]

 

このような前提条件のもとで今日のディジタル化された世界は正しく運用されているといえます(もちろん上で挙げた以外にもいろいろ条件はあるけど)

どういうことかといいますと、

①はそこらへんに落ちてた鍵で閉じた部屋は落ちてる鍵で開けることはできない
その部屋の鍵を持つ者だけが鍵を開けることができる
ブラウザにあらかじめいれておけばサーバに送る情報を暗号化することができる

②が隠し持った鍵で暗号化したものは落ちてた鍵でもついになるものなら開けられる
サーバ側から不特定多数のメンバーに対し「これは僕だよ!」と表すのに使われる

③はそのまま。隠しとくか玄関にはっておくか。

 

ほんとはマンガでも書けばさらに理解が深まるんだろうけど、不幸にも僕には絵心がない。ごめんなさいね。

 

2.ディジタル証明書(電子証明書)

公開鍵、秘密鍵の存在理由がわかればこの鍵の話も大体理解できるといえます。

この2つの鍵のたとえ話としてはやっぱりWikipediaが秀逸でしょうかね。載せておきます。

 

仮に僕が「俺だよ!オレオレ!」といくら言ったとしても誰もそれを証明できなければおまわりさんあの人です言われて連れていかれるだけなんですが、例えばそれをみていたすずさん(仮名)が、あ、私あの人知ってます、と言ったとすればそこでとりあえずは証明してくれる人がいたことになります。

で、疑り深い人が「あれはほんとうにすずんぬなのか」と考えたとします。

そこで出てくるのが知人のはるー(仮名)。はるさんがすずんぬさんの素性を保証したとすれば、晴れてすずさんはすずさんであることを保証されるんです。はるさんは某オンラインサロンのオーナーでもあり、ある程度知名度も高く、「あの人の言うことならば間違いない」と思われていればそれ以上の確認は不要=ルート証明書による証明が成立、ということになるでしょう。ちなみにここではるさんが僕を知ってても知らなくてもそんなことはどうでもよくなっています。

この場合のすずんぬさんが言うなれば「中間証明書」、はるさんが「ルート証明書」と例えることができます。


※一応許可は取っています。一応(震え。

ルートとか中間とかよく知らないよ、という方はご利用のPCの証明書をみてみてください。Windowsならインターネットオプション➡コンテンツ➡証明書でいろいろ出てきます。これらが主要なブラウザにあらかじめ埋め込まれた公開鍵証明書となります。
公開鍵方式なので事前に出しておいてOKなもの。あとから追加もできますのでオンライン上で出すこともできます。

 

3.オレオレ証明書

たまに聞いたことがあるかもしれませんが、”CA”と言われる認証局(Certification Authority)に認められていない、自分で勝手に作った証明書というものが存在します。それが自己証明書(別名:オレオレ証明書)。

これは読んで字のごとく自分で「これは俺だ!文句あるか!」と宣言したものなので効力はとっても弱いんですが、クライアント側に秘密鍵を入れることができれば立派な証明書として成り立ってしまいます(でもChromeの目はごまかせないけどw)

なので企業の社内LANなどで比較的規模が大きい場合はオレオレ証明書でもクライアント側に鍵をインストールさせておけば立派にサーバの証明にはなるってことになります。
※今回僕はここにはまりました。変だと思ったんですよね、ネットは普通に見えるのに社内サーバ見ようとすると証明書がどうとか毎回怒られてたので。これを入れなさいっていう証明書を入れたらエラーがなくなりメールも受信できるようになったんです。

 

ということで証明書周りの話をかなりざっくりと表現してみました。

おい馬鹿そこは違うだろ、という場合はご指摘いただけますと幸いです。

以上、夢ははてブTOP掲載のさんぺいがお伝えしました。ご精読ありがとうございました。

 

 

友情出演

すずんぬさん(@MimosaSuzu

はるさん(@yurupura_haru)※アイコンは@MitsuPongPong

 

 

LetsEncryptで証明書を消したいとき(2019.12:少し更新しました)

証明書を消すとき

 

certbot revoke –cert-path=/etc/letsencrypt/live/消したいドメイン/cert.pem

 

でOKです。

要は消したいドメインの証明書が保存されているPathを指定するだけ。簡単です。

 

パスを知りたいとき

特にいじってなければ↓の場所にドメインごとに格納されていると思います

ll /etc/letsencrypt/live/

ここにあるディレクトリ単位で削除が可能です

 

注意点

・1つの証明書で複数ドメインをまとめている場合はご注意ください
(私はまとめてたけど分けました。)

・同じドメインで消したり作ったりを繰り返すと制限かかって詰んじゃいますので気をつけて。
※もしそうなったら一時的に別なドメインをつけると回避できるのでそれで逃げて。

 

追記

先日こういうメールが届きました。

Let’s Encrypt certificate expiration notice for domain “3pei.info”

まぁ読んで字のごとく「おい!そろそろ証明書の有効期限が切れるぞ!」というありがたいものなんですが、うちでは1か月に1回、月の最初に自動的に確認・更新をするように設定しています(cronが使える環境ならやるべき)

 

一応仕様を書いておこうと思いますが、LetsEncryptは90日で切れる証明書を発行しています。

更新ができるようになるのは残り30日になるとできます。

そして残りが10日になると今回のようなお知らせが届きます。

 

今回は12月6日に切れますよ、というお知らせだったのですが、この場合更新できるようになるのは11月6日から。

うちは毎月1日に自動更新しているので、11月1日の時点ではまだ更新できなかったのでskipした記録がありました。で、11月27日に「あと10日しかねえぞ!いいのか!」というメールが届くことになりました。

このようなメールもみたくない、ということなら更新間隔をもっと狭めて、例えば10日おきに自動更新させておけば避けられたと思うんですが、そこまでガチガチにスケジューリングするのもどうかと思いますし、悩ましいところです。
※なお、この件については予定通り12月1日の自動更新で無事更新される予定だったのですが、心配性な僕は28日の日に手動更新してしまったのでした。。

 

Let’s Encryptで切れそうにないのに証明書が切れる通知が届く

事象

今日下のようなメールが届きました。

 

Let’s Encrypt certificate expiration notice for domain “3pei.info”

Hello,

Your certificate (or certificates) for the names listed below will expire in 10 days (on 19 Oct 18 01:09 +0000). Please make sure to renew your certificate before then, or visitors to your website will encounter errors.

We recommend renewing certificates automatically when they have a third of their
total lifetime left. For Let’s Encrypt’s current 90-day certificates, that means
renewing 30 days before expiration. See
https://letsencrypt.org/docs/i ntegration-guide/ for details.

簡単に言えば

「お前が取った証明書、あと10日できれっから早めに更新しろよ!」

っていう感じ。

 

調査

で、確認してみた。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

来月まで大丈夫みたい・・・・

 

 

 

 

一応コマンドラインでもみてみた

※サイトを格納しているVPSから直接実行してみた

# openssl x509 -in /etc/letsencrypt/live/3pei.info/cert.pem -noout -dates
notBefore=Aug 20 01:22:18 2018 GMT
notAfter=Nov 18 01:22:18 2018 GMT

 

うん、ブラウザの表示と一緒だな

 

結論

LetsEncryptは同じ証明書で取り直したりしてると、最初に取得したタイミングの通知が有効になってしまうらしい。

本家サイトのフォーラムでも”certificate expiration notice”で検索すると結構な数の記事がヒットした。

 

回答としては、

要はブラウザで見えてるのが正しいよ、と。

 

 

 

そういえば僕、このあたりで何度も失敗して取り直してロックかけたぐらいだった(ロックがかかると1週間再取得ができない)

きちんと確認できないのはなんだかもやもやするが、まぁしゃーない。

結局何もせず10月18日を迎えたが、証明書は失効することなく使い続けられています。

 

まとめ

Let’s Encrypt certificate expiration notice が届いたら、まず日時を確認。

・ブラウザで見た日時と違っているようであれば、過去の別作業のタイミングで通知してきている可能性が考えられる

・なのでブラウザ表示が重要。それによって対処用日が決まる

Let’sEncryptでエラーがでたら

はじめに

無料のSSL証明書が発行できるLet’sEncrypt。

Chromeの話もあって使う人が急増してると思いますが、エラーがでて発行できない!って人も出てきてるんじゃないかと。

ここでは私がだした2つのエラーの対応方法をかいておきます

 

①archive directory exists for

コマンド実行後、「archive directory exists for ドメイン名」とでて発行に至らない場合があります(主に取得をやり直した場合だと思います)。

設定するドメインが1つなら /etc/letsencrypt の下をざっくり消しちゃうという話もあるようですが、たとえば複数ドメインで残りはいじりたくないときなんかは下記フォルダを削除されるといいかと思います

/etc/letsencrypt/live/消したいドメイン名のフォルダ

/etc/letsencrypt/renewal/消したいドメイン名.conf

/etc/letsencrypt/archive/消したいドメイン名のフォルダ

※削除作業は慎重に&自己責任で!

 

原因と対策

もうお気づきかもしれませんが、「archive directory exists for ドメイン名」は上記3つ目の

/etc/letsencrypt/archive/消したいドメイン名のフォルダ

があるから発行できませんよ、っていう意味です。

すなおに”rm -Rf 対象のフォルダ”で消しちゃいましょう。

怖いときはmvでどっか別なフォルダに移しといてもいいかも

 

②too many certificates ~

これも何度か発行をしてると出ると思います。

①は通常色のメッセージなので気づきにくいですが、こっちは数行赤くなるのですぐ気づくかと思います

こんな感じ↓

# certbot certonly –webroot -w /var/www/html/ -d ドメイン名
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for ドメイン名
Using the webroot path /var/www/html for all unmatched domains.
Waiting for verification…
Cleaning up challenges
An unexpected error occurred:
There were too many requests of a given type :: Error creating new cert :: too many certificates already issued for exact set of domains: ドメイン名: see https:/ /letsencrypt.org/docs/rate-limits/
Please see the logfiles in /var/log/letsencrypt for more details.

 

原因と対策

お前作りすぎだよ。もう当分あげない(意訳)

っていうことです。

https://letsencrypt.org/docs/rate-limits/

We also have a Duplicate Certificate limit of 5 certificates per week. A certificate is considered a duplicate of an earlier certificate if they contain the exact same set of hostnames, ignoring capitalization and ordering of hostnames. For instance, if you requested a certificate for the names [www.example.comexample.com], you could request four more certificates for [www.example.comexample.com] during the week. If you changed the set of names by adding [blog.example.com], you would be able to request additional certificates.

同じドメインで発行できるのは1週間で5回だそうです。失敗したら翌週まで待ちましょう

 

まてない場合(apacheとめちゃってサイトが死んでるよ!とか)、以下をお試しください

 

●サブディレクトリ、別ドメインと合わせて発行コマンドをいれると受け付けてくれる

当サイト”3pei.info”は2018年8月17日現在、単独での証明書の再発行ができなくなっています。(だから例文が載せられる。。)

なので別ドメインを包含させて無理やり再発行しています

 

# certbot certonly –webroot -w /var/www/html/ -d 3pei.info -d 3pei.ml

 

無理やりあてがったのは↓で取得した無料ドメイン。

サブディレクトリでやればこれは必要ありません
※ただしいずれにしても名前解決はできるようにしておかないとだめ

 

 

とりあえずこんな感じで。

一時的にサーバが停止していました

サイト証明書の分割作業で実は失敗してたことに気づきまして、あれこれいじってたらどんどんひどくなってしまいにはサイト閉鎖まで行ったんですが、どうにか修復しました

停止期間にもしアクセスされてたらすみませんでした

書くネタが増えたと喜ぶ反面、二度と壊したくないともおもってまして、いやはやまいりました

LetsEncryptのSSL証明書をドメインごとに(追記あり)

概要

当サイトも一応SSL化したんでChromeで恥ずかしい表示は出ないとおもうんですが、1つ問題がありました。

 

複数ドメインで1枚の証明書だけだった

 

ブログを始めたきっかけが不労所得倍増計画だったんで、ここ以外にもあと2つほど独自ドメインを持っています(うち1つはまだ準備中) ←202003現在、7ドメイン保持中w

で、SSL証明書っていうのは1つのグローバルIPに対して1枚が一般的で、中にははてなとかよくあるレンタルサーバなんかでまとめて証明書を使ってたりするわけですが、無料でSSL証明書を出してくれるLetsEncryptではそういうサービスまではやってないようでした。

したがって1枚の証明書発行時に複数ドメインを全部明示して作成するんですが、それだと載せた証明書をよく見ると他のドメインがバレバレなわけで、テレ屋の私としてはそれがちょっと引っかかっていました

 

対応の前提

で、ずっとそれを気にしていたのですが、どうやらLetsEncryptでも1つのIPで複数の証明書を作れるという記載を見つけたのでとびついてみました

 

 

おせわになりました。

 

・1つのIPで複数のドメインの証明書に対応させるにはSNIという機能を使う

(これまで使ってた機能はSAN=Subject Alternative Name

SNIを使うにはVirtualhostの技術を使って1つのIPに対し複数のドメインがあるように振る舞わせることで実現できる

・古いブラウザではこのSNIに対応していないために表示できないケースもあるが、現時点で出ているブラウザはほとんどが対応していると思われる

 

ということでした

 

作業内容

さきほどやってみました

※途中失敗して何度となくサーバーエラーを出しました。見てた方ごめんなさい。。

【注意】トラブルが発生したときにすぐ戻せるような状態でやってください

 

従来の証明書取得コマンド(3サイト分:1枚の証明書に複数サイトを証明するデータが保管されている)

certbot certonly –webroot -w /var/www/html/ -d ドメイン① -d ドメイン② -d ドメイン③

 

今回の変更点

証明書取得コマンド(3サイト分:1つ1つが独立した証明書になっている)

certbot certonly –webroot -w /var/www/html/ -d ドメイン②

certbot certonly –webroot -w /var/www/html/ -d ドメイン③

 

/etc/letsencrypt/live/配下にドメイン名フォルダができて中に証明書が格納される

 

/etc/httpd/conf.d にメインじゃない2サイト分のconfigファイルを作成、個別にとった証明書のパスを指定

<VirtualHost *:443>
ServerAdmin webmaster@ドメイン名
ServerName ドメイン名
DocumentRoot /var/www/html
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride None → All #20180814追記
Order allow,deny
allow from all
</Directory>

SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM

SSLCertificateChainFile /etc/letsencrypt/live/ドメイン名/chain.pem
SSLCertificateFile /etc/letsencrypt/live/ドメイン名/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/ドメイン名/privkey.pem

</VirtualHost>

これを2サイト分作って保存

終わったらapacheをリロード

systemctl reload httpd

 

これでサブサイトで証明書の詳細を見たときに「なにこのサイト?」ってことがなくなる

まぁそこまで見る人も多くないだろうから別にそのままでもよかったんだけど、要するに自己満足ってやつですね

あとは自動更新させるスクリプトを組んでいるのでそれをちょっと直さないとだめかも

疲れたからまたこんど、っつーことで。。。

 

お疲れ様でした。

 

20180814追記)

.htaccessがあるディレクトリは AllowOverride All にすること!

HTTPS化に成功(含:LetsEncriptの導入方法)(2020/02更新)

 

もうちょっとするとGoogleChromeで非HTTPSサイトに警告がでるようになるっていうのはニュースにもなっててご存知の方も多いかと思います。


※かくいう@itもまだSSL化してなかったのね・・・・。

さすがに「安全じゃないよ」って出されるのは書いてる側としても本意ではないのでSSL化させることにしました。

 

条件は下記

・極力お金はかけない(というかかけられない)
・1つのサーバで複数のドメインを使っているのでまとめて適用させたい(いずれもwordpress)
・何よりめんどくさくない方法で。

 

で、みつかったのが無料のサーバ証明書を発行してくれる「Let’s encrypt」。
※StartSSLっていうのも前まではあったみたいだけど提供終了したみたい

 

当方の環境は以下
・OS:CentOS7.5
・http:Apache2.4
・SSL化したいドメイン:3pei.info, 〇〇.net

 

で、以下が作業手順です。難しそうに見えるかもしれませんが、案外簡単です

 

①証明書作成用のアプリをインストール

yum install certbot python-certbot-apache

 

②登録したいドメインを付けて実行
※下記は1つの証明書に複数のドメインを入れる場合です。特に理由がなければ別々にしたほうがきれいだと思います

certbot certonly --webroot -w /var/www/html/ -d 3pei.info -d 〇〇.net

 

③出来上がった証明書をapacheに登録

vim /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/letsencrypt/live/3pei.info/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/3pei.info/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/3pei.info/chain.pem

 

④httpdをReloadしてできあがり

 

⑤Wordpress側を対応させるためプラグインをインストール(Really Simple SSL)
※マルチサイト設定にしてるけど有効化は個別に
※プラグインに頼らなくともできることがわかったので、その後このプラグインは消しました。ただ作業が面倒なのでやめておいたほうがいいです
(後から後から次々と問題が出てくる)

 

⑥GoogleAnaryticsの設定をhttpsに変更

 

⓻3か月で証明書が切れるそうなので毎月初めに自動更新するようcronに登録
 ※/etc/cron.monthlyに以下内容のファイルを保存
certbot renew –webroot-path /var/www/html/ –post-hook “systemctl reload httpd”
 ※上記コマンドに –force-renew をつければ強制更新されるのでそれで動作確認

 

 

できあがり。Really Simple SSLが全部HTTPSにリダイレクトしてくれるので余計な設定不要。

細かい話をすればサブサイト側で証明書の詳細見たときにメインサイトの名前もでてしまうが、まぁいいや(←改善済)

とりあえず何も詰まることなく完了。こううまくいくときはたいてい後で致命的な問題がみつかるんだよな・・・・。

 

補足:自動更新内容はこんな感じです

– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Processing /etc/letsencrypt/renewal/登録済みドメイン名.conf
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Cert not yet due for renewal ←更新の必要ないよの意

※これを登録してあるドメイン数分繰り返す。

登録してある = /etc/letsencrypt/live にファイルがあると登録済みと認識される

– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –

The following certs are not due for renewal yet:
/etc/letsencrypt/live/登録済みドメイン名/fullchain.pem expires on 2020-03-30 (skipped)
No renewals were attempted.
No hooks were run.
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –

これが何もない時。

 

更新されるとこんな感じ(更新失敗例つき)

 

– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Processing /etc/letsencrypt/renewal/更新対象ドメイン名.conf
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Cert is due for renewal, auto-renewing…
Non-interactive renewal: random delay of 282 seconds
Plugins selected: Authenticator webroot, Installer None
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for 更新対象ドメイン名
Using the webroot path サーバのWebRoot for all unmatched domains.
Waiting for verification…
Cleaning up challenges

– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
new certificate deployed without reload, fullchain is
/etc/letsencrypt/live/更新対象ドメイン名/fullchain.pem
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –

– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Processing /etc/letsencrypt/renewal/更新失敗ドメイン名.conf
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Cert is due for renewal, auto-renewing…
Plugins selected: Authenticator webroot, Installer None
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for 更新失敗ドメイン名
Using the webroot path /var/www/html for all unmatched domains.
Waiting for verification…
Challenge failed for domain 更新失敗ドメイン名
http-01 challenge for 更新失敗ドメイン名
Cleaning up challenges
Attempting to renew cert (更新失敗ドメイン名) from /etc/letsencrypt/renewal/更新失敗ドメイン名.conf produced an unexpected error: Some challenges have failed.. Skipping.

– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –

The following certs could not be renewed:
/etc/letsencrypt/live/更新失敗ドメイン名/fullchain.pem (failure)

– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
The following certs are not due for renewal yet:
/etc/letsencrypt/live/更新不要ドメイン名/fullchain.pem expires on 2020-03-30 (skipped)

The following certs were successfully renewed:
/etc/letsencrypt/live/更新対象ドメイン名/fullchain.pem (success)

The following certs could not be renewed:
/etc/letsencrypt/live/更新失敗ドメイン名/fullchain.pem (failure)
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Running post-hook command: systemctl reload httpd ←更新されたドメインがあるときは自動的にreloadが走る
なおreloadはWEB表示には影響しないので安心(restartは影響する)

1 renew failure(s), 0 parse failure(s)
IMPORTANT NOTES:
– The following errors were reported by the server:

Domain: 更新失敗ドメイン名
Type:   unauthorized
Detail: Invalid response from
http://更新失敗ドメイン名/.well-known/acme-challenge~

To fix these errors, please make sure that your domain name was
entered correctly and the DNS A/AAAA record(s) for that domain
contain(s) the right IP address.

 

ちなみにここで出てくる「更新失敗ドメイン名」はFreenumで取得してたのをうっかり忘れてて使えなくなってしまったもの。

つまり更新時に名前解決ができない状態だったために、自動更新が機能しなかったんだと考えられます。

以上、何かの参考になれば幸いです。