ASUSのルータからDDNSのSSL/TSL証明書をエクスポートしてラズパイで使う
ASUSルータのDDNSサービスを使って自宅サーバを公開しようと思います。DDNSの認証局にはLet's Encryptを使ってみます。このSSL/TSL証明書をエクスポートしてラズパイで使うまでを紹介します。
ASUSのルータではLet's Encryptを認証局としたDDNSサービスを使うことができます。ドメインの取得をしなくとも自宅サーバをインターネットへ公開できます。
関連記事:ASUSのルータでSSL/TLSサーバ証明書を無料で取得できるようになりました
今まではWindows Home ServerのDDNSサービスを使っていました。これだけのためにWindows Home Serverを動かしていました。セキュリティ的にもWindows Home Serverをいいかげん廃止しないといけないと思っていました。
DDNSサービスはASUSルータのものを使うつもりでいましたがSSL/TSL証明書をどうやってエクスポートすれば良いのかイマイチ分かっていませんでした。
もちろん手動ではWeb画面からエクスポートボタンを押せばダウンロードできます。
エクスポートでcert.pemとkey.pemが取得できます。サーバ証明書と秘密鍵です。しかしながらLet's Encryptの証明書の有効期間は90日と短く手動で更新作業をやってはいられません。スクリプトでSSL/TSL証明書を取得したいです。
ASUSルータはSSHで接続することができます。SSHを使えばファイルをコピーして持ってくる事ができるはずです。まずはASUSルータにSSHの設定をします。
SSH接続をするにはユーザ名とパスワードが必要です。これはルータの管理者と同じものが使えます。
ラズパイからSSHでASUSルータのファイルをコピーするにはscpコマンドを使えば良さそうなのですが、scpコマンドはパスワードを指定する事ができません。scpコマンドを動かした時にパスワードの入力が求められます。つまり自動実行ができません。これを避けるために公開鍵認証方式を使う設定をします。
次にパスワードを求められます。
ファイルを確認します。
ASUSルータに先程作った公開鍵を設定します。
ルータの設定画面の"管理"→"システム"タブを開きます。下の方にサービス項があります。
ラズパイでid_rsa.pubをエディタで開いて中身をコピーします。そして認証キーの欄へペーストします。
"SSHを有効にする"はLan onlyを選びます。
SSHポートはデフォルトの22から違う番号に変えておきます。例えば"2022"にします。
これで"適応"を押せば公開鍵が登録されます。
WEB画面でエクスポートしたcert_key.tarというファイルは/tmpにできているようです。
/rom/etc/sslにもそれっぽいファイルがありますが更新日時を見ると本命ではないようです。
結論を言いますとLet's Encryptの場合、/jffs/.le/にSSL/TSL証明書があります。フラッシュメモリ上にあるようですね。そこにDDNSで取得したドメイン名のディレクトリがあります。
ファイルの更新日時と中身を確認した所、次のようになっているようです。
【2020/3/31追記:秘密鍵はdomain.keyへと変更されたようです】
Let's Encryptの場合はここで説明されています。
関連記事:自宅サーバをnginxで公開するときのssl設定はどうすればいいの?
サーバによって設定の仕方は全く異なりますのでこの記事の説明はこれで終わります。
私はLet's Encryptのサービスを使ってみましたがDDNSの証明書ってどうなんでしょう?SSL/TSL証明書のテストをしてみました。上の関連記事に書いた次のサイトでテストします。
”A”でした。自宅サーバで使うなら何も問題なさそうです。
Nextcloudで公開した画像をfacebookでシェアするとサムネイルも付きました。
Let's Encryptの場合、証明書の有効期限が90日と短いです。定期的に証明書をコピーするスクリプトは簡単に作れるのでラズパイで動かすサーバにも使えそうです。
Let's Encryptでも本来はドメインを自分で別途取得しなければなりません。ASUSのルータの場合、asuscomm.comドメインのサブドメインとして取得してくれるので自分のドメインを用意しなくてもLet's Encryptが使えます。
ドメイン取るのも簡単なのでさっさと取ってしまうのが一番よいです。Let's Encryptの自動取得プログラムはたくさん公開されているのでルータでやらずそれらを使った方が面倒は少なくなります。
ASUSのルータではLet's Encryptを認証局としたDDNSサービスを使うことができます。ドメインの取得をしなくとも自宅サーバをインターネットへ公開できます。
関連記事:ASUSのルータでSSL/TLSサーバ証明書を無料で取得できるようになりました
今まではWindows Home ServerのDDNSサービスを使っていました。これだけのためにWindows Home Serverを動かしていました。セキュリティ的にもWindows Home Serverをいいかげん廃止しないといけないと思っていました。
DDNSサービスはASUSルータのものを使うつもりでいましたがSSL/TSL証明書をどうやってエクスポートすれば良いのかイマイチ分かっていませんでした。
もちろん手動ではWeb画面からエクスポートボタンを押せばダウンロードできます。
エクスポートでcert.pemとkey.pemが取得できます。サーバ証明書と秘密鍵です。しかしながらLet's Encryptの証明書の有効期間は90日と短く手動で更新作業をやってはいられません。スクリプトでSSL/TSL証明書を取得したいです。
Raspberry PiにASUSルータの証明書をコピーする方法
ラズパイを使ってASUSルータにある証明書をコピーしてくる手順を作っていくことにします。ラズパイに限るわけではありませんけど。ASUSルータはSSHで接続することができます。SSHを使えばファイルをコピーして持ってくる事ができるはずです。まずはASUSルータにSSHの設定をします。
SSH接続をするにはユーザ名とパスワードが必要です。これはルータの管理者と同じものが使えます。
ラズパイからSSHでASUSルータのファイルをコピーするにはscpコマンドを使えば良さそうなのですが、scpコマンドはパスワードを指定する事ができません。scpコマンドを動かした時にパスワードの入力が求められます。つまり自動実行ができません。これを避けるために公開鍵認証方式を使う設定をします。
公開鍵認証の設定
SSH公開鍵認証方式の公開鍵と秘密鍵を作る
Linuxで簡単に作ることができますのでラズパイで作ります。RaspbianでもDebianでもかまいません。次のコマンドで公開鍵と秘密鍵のペアを作れます。ssh-keygenすると次のように表示されます。
Generating public/private rsa key pair. Enter file in which to save the key (/home/xxxx/.ssh/id_rsa):鍵を保存するディレクトリを指定できます。何も入れなくてもOKです。その時はホームディレクトリ下の".ssh"ディレクトリに作られます。
次にパスワードを求められます。
Enter passphrase (empty for no passphrase):今回はパスワードを必要としない鍵を作りますので何も入れずにエンターを押します。
Enter same passphrase again:もう一度聞かれます。エンターだけ押します。何やら表示されて鍵が作られます。
ファイルを確認します。
ls -al ~/.sshid_rsaが秘密鍵、id_rsa.pubが公開鍵です。
ASUSルータに公開鍵を設定する
ASUSルータに公開鍵をラズパイに秘密鍵を使うことで互いに相手を信用する事ができます。パスワードを省略できる理由です。ASUSルータに先程作った公開鍵を設定します。
ルータの設定画面の"管理"→"システム"タブを開きます。下の方にサービス項があります。
ラズパイでid_rsa.pubをエディタで開いて中身をコピーします。そして認証キーの欄へペーストします。
"SSHを有効にする"はLan onlyを選びます。
SSHポートはデフォルトの22から違う番号に変えておきます。例えば"2022"にします。
これで"適応"を押せば公開鍵が登録されます。
ラズパイから秘密鍵でASUSルータに接続する
SSHでASUSルータに接続する際に先程作った秘密鍵を指定すれば接続できます。
ssh -i id_rsa -p <ポート番号> <ユーザ名>@<ルータのIPアドレス>
パスワードを聞かれなければ準備完了です。
ASUSルータのどこにDDNSのSSL/TSL証明書があるのか?
ASUSルータにSSHでターミナルを開いてみますが肝心のSSL/TSL証明書がどこにあるのかわかりません。多くのファイルは/tmp以下にあります。WEB画面でエクスポートしたcert_key.tarというファイルは/tmpにできているようです。
/rom/etc/sslにもそれっぽいファイルがありますが更新日時を見ると本命ではないようです。
結論を言いますとLet's Encryptの場合、/jffs/.le/にSSL/TSL証明書があります。フラッシュメモリ上にあるようですね。そこにDDNSで取得したドメイン名のディレクトリがあります。
cd /jffs/.le/xxxx.asuscomm.com
中を見るといろいろな証明書ファイルがあります。どれを使えば良いのでしょうか?ファイルの更新日時と中身を確認した所、次のようになっているようです。
【2020/3/31追記:秘密鍵はdomain.keyへと変更されたようです】
- 秘密鍵
- domain.key (以前はxxxx.asuscomm.com.key)
- サーバ証明書
- xxxx.asuscomm.com.cer
- 中間CA証明書(クロス署名)
- ca.cer
- サーバ証明書+中間CA証明書
- fullchain.cer
これらのファイルをラズパイへコピーすれば良いようです。
ASUSルータからSSL/TSL証明書をラズパイへコピーする
ASUSルータにSSH接続できファイルの場所もわかったので、あとはラズパイにコピーしてくるだけです。カレントディレクトリにコピーするにはscpコマンドで秘密鍵のファイルを指定します。ルータから秘密鍵をコピー
scp -p -i id_rsa -P <port-No.> <user>@<router-IP>:/jffs/.le/xxxx.asuscomm.com/domain.key . (注意以前はxxxx.asuscomm.com.key)
ルータからサーバ証明書をコピー
scp -p -i id_rsa -P <port-No.> <user>@<router-IP>:/jffs/.le/xxxx.asuscomm.com/xxxx.asuscomm.com.cer .
ルータから中間CA証明書をコピー
scp -p -i id_rsa -P <port-No.> <user>@<router-IP>:/jffs/.le/xxxx.asuscomm.com/ca.cer .
ルート証明書をダウンロードする
ASUSルータの中にルート証明書はありませんでした。これはDDNSのサービス会社からダウンロードできます。Let's Encryptの場合はここで説明されています。
Chain of Trust | Let's Encryptラズパイでは次のようにしてダウンロードします。
wget https://letsencrypt.org/certs/isrgrootx1.pem.txt -O ./root.cerファイル名はroot.cerとしてダウンロードしました。
SSL/TSL証明書をサーバに設定して動かしてみる
必要なSSL/TSL証明書はすべて揃いました。あとはサーバに設定すれば良いでしょう。関連記事:自宅サーバをnginxで公開するときのssl設定はどうすればいいの?
サーバによって設定の仕方は全く異なりますのでこの記事の説明はこれで終わります。
私はLet's Encryptのサービスを使ってみましたがDDNSの証明書ってどうなんでしょう?SSL/TSL証明書のテストをしてみました。上の関連記事に書いた次のサイトでテストします。
SSL Server Test | Qualys SSL Labs結果は・・・
”A”でした。自宅サーバで使うなら何も問題なさそうです。
Nextcloudで公開した画像をfacebookでシェアするとサムネイルも付きました。
まとめ
ASUSルータからLet's EncryptのSSL/TSL証明書をSSH経由でコピーしてみました。SSL/TSL証明書は/jffs/.leディレクトリ下にあります。Let's Encryptの場合、証明書の有効期限が90日と短いです。定期的に証明書をコピーするスクリプトは簡単に作れるのでラズパイで動かすサーバにも使えそうです。
Let's Encryptでも本来はドメインを自分で別途取得しなければなりません。ASUSのルータの場合、asuscomm.comドメインのサブドメインとして取得してくれるので自分のドメインを用意しなくてもLet's Encryptが使えます。
ドメイン取るのも簡単なのでさっさと取ってしまうのが一番よいです。Let's Encryptの自動取得プログラムはたくさん公開されているのでルータでやらずそれらを使った方が面倒は少なくなります。
コメント
コメントを投稿