サーバーを指すドメインの新しいLetsEncrypt / Certbot SSL証明書を動的に作成するにはどうすればよいですか?

サーガルパチル

:私は、Webアプリケーション(たとえば建物だwww.mywebapp.example-ユーザーは自分のドメインをポイントすることができます)www.xyz.exampleにします- www.mywebapp.exampleユーザーがに移動するとwww.xyz.examplewww.mywebapp.example代わりにコンテンツが提供されます。ユーザーはその更新する方法を指示されます@と、www A recordsそのドメインプロバイダのDNS設定で接続することwww.xyz.examplewww.mywebapp.example

./certbot-auto -d <domain-name>ドメインごとにを使用して新しいSSL証明書を手動で作成できます。また、更新をテストするためにcronジョブを設定しました。

ただし、ユーザーがドメインをに接続するたびに、JavaScript関数からトリガーされるPHPスクリプトを実行して、このプロセスを自動化したいと思いますwww.mywebapp.example私の質問は次のとおりです。

  1. ./certbot-autoコマンドを使用してPHPからコマンドを実行する必要がありexec()/shell_exec()ますか?別のbashスクリプトを作成し、代わりにbashスクリプトを実行する必要がありますか?

  2. LetsEncryptが推奨するACMEPHPライブラリを使用する必要があります-https //letsencrypt.org/docs/client-options/

  3. ドメインの新しいSSL証明書を手動で作成しましたがwww.xyz2.example、これは正常にを指していましたwww.mywebapp.exampleただし、これにより、既存のすべてのドメインのSSLサポートが機能しなくなりました- *.mywebapp.example, mywebapp.example, www.xyz.exampleを指すドメインごとに仮想ホストを作成する必要がありますwww.mywebapp.exampleか?

  4. /etc/httpd/conf.d/ssl.conf新しい仮想ホストを追加するために編集する必要がありますか?複数のドメインが同じDocumentRootパスを使用できますか?

次のリンクをすべて読みましたが、まだかなり混乱しています。

どんな助けでも大歓迎です。さらに詳しい情報が必要な場合は、お知らせください。

私のサーバー設定は次のとおりです。

  • ランプ
  • AWS EC2
パトリックマター

1つに多くの質問があります。

exec()/ shell_exec()コマンドを使用してPHPから./certbot-autoコマンドを実行する必要がありますか?別のbashスクリプトを作成し、代わりにbashスクリプトを実行する必要がありますか?

一般的な場合:いいえ。

PHPは、Webページに到達すると実行されるため、現在のHTTPセッション内に存在し、反対側のブラウザーは、ある種の限られた時間内に、ある種の応答を待ちます(そうでない場合、ユーザーは怒ります)。何かが「速く」見えるのを見てください)。

実行する場合、2つのオプションがあります。

  1. 外部プログラムの完了を待つ:問題、これは「無期限」の時間が経過した後の可能性があるため、これが考慮されていない場合、ユーザーはブラウザに何も表示されません。
  2. バックグラウンドで起動し、完了を待たない:問題、成功するかどうかは必要ないので、ブラウザに「何か」と応答できたとしても、失敗をどのように処理しますか?

このような場合の一般的な解決策は次のとおりです。

  1. HTTP訪問によってトリガーされたアクションは、DBなどにリクエストを記録するだけです。
  2. これとは別に、プロセスは実行するタスクについてDBをポーリングし、それらを実行します。これは、どのWebサーバーからも完全に分離されています。ジョブが完了すると(成功または失敗)、DBは同じ方法で更新されます
  3. 1)のプロセスでは、定期的にDBをポーリングしてステータス(保留中、完了、または失敗)を確認し、訪問中などに何らかの自動更新を伴うメッセージをユーザーに表示したり、特定の個別のページを提供したりできます。ユーザーはその操作のステータスを追跡できるようになります

LetsEncryptが推奨するACMEPHPライブラリを使用する必要があります-https //letsencrypt.org/docs/client-options/

ACMEプロトコルを適切に実装する任意の言語の任意のライブラリを使用できます。

Let's Encryptは、次の1つのソフトウェアのみを推奨しますcertbotそのページにリストされている残りのすべては、動作することが期待されるクライアントライブラリ/プログラムの例です。

www.mywebapp.exampleを指すドメインごとに仮想ホストを作成する必要がありますか?

はい、特にそれぞれが特定の証明書を使用している場合、そうでない場合、Webサーバーは、ブラウザーが指定したホスト名(最初に使用されたSNI拡張機能内)に基づいて、TLSハンドシェイクの開始時に返す適切な証明書を識別できません。 TLSハンドシェイクの)

または、https://httpd.apache.org/docs/2.4/mod/mod_vhost_alias.htmlなどの大規模仮想ホスティングのApache機能を使用することもできます。ただし、これはおそらく、すべての名前が追加された単一の証明書を意味する場合があります。これは、ある程度の名前まで技術的には機能しますが、技術的でない問題(すべての名前が表示されるなど)を引き起こす可能性があります

もちろん、Nging / HAProxyのような他のソフトウェアは、より高度な機能を提供できます。仮想ホストごとに仮想ホストを構成する必要はなく、証明書が異なっていても、特定の名前で配置するだけで、Webサーバーは次のように一致します。必要です。

新しい仮想ホストを追加するには、/ etc / httpd / conf.d / ssl.confを編集する必要がありますか?

はい、または使用するIncludeか類似している限り、他のファイル

多くの異なる個別のWebサイトを管理している場合、証明書パスなどを含め、Webサイトごとに1つの構成ファイルを作成する方が簡単な場合があります。多くのLinuxディストリビューションは/etc/httpd/sites-enabled/、その機能に対応できる方法でApacheをインストールします。そうでない場合は、自分で同じことを行うことができます。

複数のドメインで同じDocumentRootパスを使用できますか?

もちろんはい。

PS:SSLと言うのはやめてください。プロトコルの名前はTLSで、20年前に発明されました。SSLは長い間使用されていません。現在の推奨事項は、脆弱性のある1.1および1.0も許可する正当な理由がある場合を除いて、TLS1.2を実行することです。この理由と誤称であるため、「SSL証明書」はありません。TLSは証明書がなくても機能し、これらの証明書はS / MIMEなどのTLSの外部で使用できます。X.509証明書です。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ