web-dev-qa-db-ja.com

CNAMEは外部httpsURLにリダイレクトします

どういうわけか特定の設定があります。それは本当に私が回避できないいくつかの制限によるものです:私が所有しているドメイン1と2、そして私が所有していない外部URLがあります:

  1. start.com
  2. root.com
  3. http://target.com/my/site?a=1

私の目標は、 http://sub.start.com (および https:// .. 。)を http://target.com/my/site?a = 1 。今制限に:

  • 1.の場合、DNSエントリを変更できます。ただし、httpサーバー自体では何も変更できません。また、現在の設定では、すべてのhttpリクエストがhttpsにリダイレクトされます。また、SSL証明書を変更することはできません。SSL証明書はnotワイルドカード証明書です
  • 2.の場合、基本的に制限はありません。サーバー上のすべてを変更できます。 (lighttpd) Let's Encrypt を介してSSL証明書を取得することもできます。
  • 3.について述べたように、これは私が所有していない外部URLです。また、httpリクエストをhttpsにリダイレクトします

私の目標を達成する方法は?これは私がこれまでに設定したものです:

  • 1の「sub.start.com」から「sub.root.com」へのDNSCNAMEエントリ。
  • Root.comで、sub.root.comから http://target.com/my/site?a=1 へのリダイレクト

何が機能するのか http://sub.root.com to http://target.com/my/site?a=1 。動作しないのは:

  1. https://sub.root.com から http://target.com/my/site?a=1 へのリダイレクトは、「安全でない接続」メッセージを返します。 Firefox。これは、sub.root.comが(まだ)SSL証明書に含まれていないためです。私はこの問題を理解することができます。修正は簡単です。
  2. しかし、私が理解できないのは、 http://sub.start.com からのリダイレクトが機能しないということです。これにより、私は https://sub.start.com にリダイレクトされ、root.comの証明書にsub.start.comが含まれていないと文句を言います。どうしてこれなの?私は、CNAMEエントリがstart.comのサーバーを「無視」することを期待していました。リクエストはroot.comに直接送信する必要がありますね。

また、この正確な設定で私の目標を達成する方法はありますか? root.comのSSL証明書にsub.start.comとsub.root.comを含めることを考えています。これですべての問題が解決されますか?

1
mc51

私は、CNAMEエントリがstart.comのサーバーを「無視」することを期待していました。リクエストはroot.comに直接送信する必要がありますね。

誤った期待、そしてここで何度も何度も議論されています:リダイレクトはHTTPプロトコルで行われます。 CNAMEおよびA DNSレコードを使用して解決されると、DNSレベルで何が起こったかを認識せずに、要求はIPアドレスに直接送信されます。 CNAMEはHTTPリダイレクトを行いません。

次に、リクエストには、アドレスバーの元のホスト名がHTTP 1.1 Hostヘッダーとして含まれます。

GET / HTTP/1.1
Host: sub.start.com

webサーバーは、その仮想ホスト用に構成されたコンテンツで応答します。このホスト名とこのホスト名だけが、ブラウザがアドレスをSSL証明書と比較するときにも使用されます。この比較は、ヘッダーが送信される前、およびリダイレクトが発生する前に行われます。

他のすべてのホスト名をWebサーバー構成で正規ホスト名へのリダイレクトとして構成すると、リダイレクトの問題が解決します。証明書にすべてのホスト名をサブジェクト代替名として含めると、ユーザーに表示されるエラーメッセージが解決されます。

3
Esa Jokinen