質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.75%

移行先サーバでcertbotのSAN証明書発行を旧サーバのFQDN込で行えますか?

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 577

kedama

score 11

前提・実現したいこと

サーバ移行を控えています。移行元サーバではcertbotを入れられなかったためLet's Encryptを使用していませんが、移行先サーバはSNI対応のnginxを導入しましたのでcertbotをインストールし、webrootで証明書を発行したいと考えています。

下記のように複数ドメインが存在しており、エイリアスを設定しています。

www.example.com  エイリアス: example.com, new.example.com
www.example2.com エイリアス: example2.com, new.example2.com
www.example3.com エイリアス: example3.com, new.example3.com

※実際使用するのは、www.とwww.なしで、new.は新サーバの確認用に追加しているだけです。
※DNSの設定では、www.とwww.なしは旧サーバ、new.は新サーバへ向けています。

その状態でSAN証明書発行をcertbotで行うと

# certbot certonly --webroot -w /var/www/example.com/public_html/ -d example.com -d www.example.com -d new.example.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for example.com
http-01 challenge for www.example.com
http-01 challenge for new.example.com
Using the webroot path /var/www/example.com/public_html for all unmatched domains.
Waiting for verification...
Cleaning up challenges
Failed authorization procedure. www.example.com (http-01): urn:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from http://www.example.com/.well-known/acme-challenge/yVVUu-ZAHZNKirFivyNPpR1U_Y-cFzIZFjS-GvBD3Qc: "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
  <HEAD>
    <META http-equiv="Content-Type" content="tex", example.com (http-01): urn:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from http://example.com/.well-known/acme-challenge/xjcWuI7zGaZVaD8FXFtiFkoywN1SRGn5bG2Ej-36hN8: "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
  <HEAD>
    <META http-equiv="Content-Type" content="tex"

IMPORTANT NOTES:
 - The following errors were reported by the server:

   Domain: www.example.com
   Type:   unauthorized
   Detail: Invalid response from
   http://www.example.com/.well-known/acme-challenge/yVVUu-ZAHZNKirFivyNPpR1U_Y-cFzIZFjS-GvBD3Qc:
   "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
   <HTML>
     <HEAD>
       <META http-equiv="Content-Type" content="tex"

   Domain: example.com
   Type:   unauthorized
   Detail: Invalid response from
   http://example.com/.well-known/acme-challenge/xjcWuI7zGaZVaD8FXFtiFkoywN1SRGn5bG2Ej-36hN8:
   "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
   <HTML>
     <HEAD>
       <META http-equiv="Content-Type" content="tex"

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


上記のようにwww.とwwwなしはhttpでアクセスできませんのでエラーになります。

これはサーバ移行完了後(DNS設定をwww.もwwwなしも新サーバへ向けたあと)でないとやはりできないものでしょうか。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

www.とwwwなしはhttpでアクセスできません
というのは、http(ポート 80)で、Webページを公開していないということでしょうか?

http(ポート80)で、Webサーバを使っていない(ポート80にアクセスできない)ということのであれば、確認方法がないので Let's Encrypt では、発行できないと思います。

Let's Encrypt の場合、確認ファイルを置いて、そのファイルにアクセスできることを確認して所有者と判断している以上、確認ファイルを確認できない状況で、SSL証明書を発行できてしまうとドメインの所有者以外が不正に証明書を取得できることになりますので、確認できない状況での発行は無理でしょう。


ドメインが、http(ポート80) を使っている(アクセスできる)ということであれば、対応方法はいくつかあると思いますが、思いついた方法を書いておきます。(サーバー環境の記載がないので、一般論になります。)

  • 新サーバで、稼働している分(new.example.com)だけを作成する。 DNS を旧サーバから切り替えたタイミングで、移転するドメイン(www.example.com, example.com)を順次追加していく。ただし、タイミングによっては、HTTPSで接続できない(警告が表示される)時間が生じることがある。 
    (通常は、これが正規の方法でしょう。)
     

  • DNS で、www.example.com, example.com は 旧サーバ、 new.example.com は 新サーバを登録した状態で、新サーバに旧サーバの Webディレクトリを一時的にマウントした状態(NFS over SSH Tunneling や sshfs 等を使う)にする。マウントした旧サーバのWebディレクトリを指定して、新サーバで SSL証明書を発行する。発行後は、旧サーバのマウントを解除する。  
    (ドメインと新旧のサーバを管理しているのであれば、これも実現可能でしょう。sshfsを使う場合、旧サーバは、sshでログインできればOKと思います。)

もし、旧サーバで、certbot が使えるなら以下の方法も可能でしょう。

  • DNS の TTLを短めにしておいて、new.example.com の Aレコードを旧サーバに変更して、旧サーバにて SAN に new.example.com も含めた SSL 証明書を作成する。作成した SSL証明書やLet's Encrypt関係ファイルを新サーバに丸ごとコピー。

http(ポート 80)に アクセスできない(Webを公開していない)ドメインの場合は、下記しかないでしょう。

  • Let's Encrypt を使うのを諦めて、他社のSSL証明書を取得する。 
    たとえば、ドメインの管理者宛(root@ドメイン や admin@ドメイン や whois のドメイン担当者アドレス 等)に確認メールが届くので、届いたメール記載のURLをクリックする等でドメインの所有を確認してSSL証明書を発行できる会社もありますので、そのような会社からSSL証明書の発行を受ける必要があります。
    Let's Encrypt 以外のSSL発行会社の場合、SSL証明書発行費用は、有料です。

(2017.10.09 追記)
http でファイル認証できない場合にファイル認証以外の方法で、Let's Encrypt で、SSL証明書を発行する手順を追記

certbot のマニュアルを読み直してみていたら「--manual」と「--preferred-challenges dns」がありましたので、試してみたところ、Web アクセスできないサーバーに対して、SSL証明書を発行することができましたので、追記しておきます。

コマンドラインで

certbot certonly --manual --preferred-challenges dns -d ドメイン


と実行すると、以下のようなメッセージが表示して、キー入力待ちになるので、表示される文字列を対象ドメインの DNS サーバーで、「_acme-challenge」の TXT フィールドに設定します。

Please deploy a DNS TXT record under the name
_acme-challenge.example.com with the following value:

v7XXXXXZZZZYYY111222333444455566677788899VU

Before continuing, verify the record is deployed.

DNSの設定が完了したら、キーを押して継続すると 以下のように表示され、DNSに登録したレコードでドメインが認証されて、SSL証明書を発行されました。

Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   Your cert will expire on 2018-01-07. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot-auto
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

詳しくは、certbot manual オプションマニュアル を参考にしてください。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/06 20:10 編集

    やはりFQDNの名前解決が意図しているサーバに向いていない状況では無理ですよね。
    何度も設定するのが大変だったので、一度にできないものかと思い質問を上げたのですが認識が甘すぎました。

    nginxでのSNI設定が初めての試みだったので、ひとまずnew.example.com, new.example2.comで作成してみましたら問題なく証明書を作成できました。
    SNIの設定も問題なくできたので、ひとまず仮で作成した証明書はrevokeしました。(nginxの設定も元に戻しました)

    サーバ移行完了後、改めて複数FQDNで作成しなおしたいと思います。
    ご回答ありがとうございました。

    キャンセル

  • 2017/10/09 12:04

    ベストアンサーをいただいていましたが、追加で調べてみたら、Web アクセスできなくても発行できる方法があるとわかりましたので、回答を追加修正しました。 もし、可能でしたら追加した方法を試してみてください。

    キャンセル

  • 2017/10/10 10:42

    追加のご回答ありがとうございます。
    今回のサーバ移転にはあまりもう時間的な猶予がありませんが、別サーバの移転も今後控え
    ておりますのでそのときに試してみたいと思います。

    キャンセル

0

以前、私は同じ問題に出くわしました。
解決する手順を載せてますので、ご確認いただければと思います。

Let’s Encrypt 複数ドメイン用に証明書を取得できない件です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/06 20:05

    複数指定したFQDNのうち、名前解決できないものが混じっていたのでエラーになっている状況です。
    複数のドメインに対してはSNIで対応するので大丈夫です。

    サーバ移行後、複数FQDN指定で再度作成するときに参考にさせていただきます。
    ご回答ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.75%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る