Ubuntu 上の Apache で SSL (https 証明書) を設定する正しい方法の詳細な説明

Ubuntu 上の Apache で SSL (https 証明書) を設定する正しい方法の詳細な説明

まず、Alibaba Cloud の公式チュートリアルをご覧ください。

ファイルの説明:

1. 証明書ファイル xxxxxx.pem には 2 つのセクションが含まれています。いずれのセクションも削除しないでください。

2. CSR が証明書システムによって作成された場合は、証明書の秘密キー ファイル xxxxxxxx.key、証明書の公開キー ファイル public.pem、および証明書チェーン ファイル chain.pem も含まれます。

(1)Apacheインストールディレクトリの下にcertディレクトリを作成し、ダウンロードしたすべてのファイルをcertディレクトリにコピーします。証明書を申請する際に CSR ファイルを自分で作成した場合は、対応する秘密鍵ファイルを cert ディレクトリに配置し、xxxxxxxx.key という名前を付けてください。

(2) Apacheインストールディレクトリのconfディレクトリにあるhttpd.confファイルを開き、次の内容を見つけて「#」を削除します。

#LoadModule ssl_module modules/mod_ssl.so (見つからない場合は、opensslプラグインがコンパイルされているかどうかを確認してください)
#conf/extra/httpd-ssl.conf をインクルードします

(3) Apacheインストールディレクトリのconf/extra/httpd-ssl.confファイル(オペレーティングシステムとインストール方法によってはconf.d/ssl.confの場合もあります)を開き、設定ファイル内で次の設定ステートメントを検索します。

# SSL プロトコルサポートプロトコルを追加し、安全でないプロトコルを削除します SSLProtocol all -SSLv2 -SSLv3
# 暗号化スイートを次のように変更します SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLHonorCipherOrder オン
# 証明書公開鍵設定 SSLCertificateFile cert/public.pem
# 証明書の秘密鍵の設定 SSLCertificateKeyFile cert/xxxxxxx.key
# 証明書チェーンの設定。属性が '#' 文字で始まる場合は削除してください。SSLCertificateChainFile cert/chain.pem

(4)Apacheを再起動します。

(5)https経由でサイトにアクセスし、サイト証明書のインストールと構成をテストします。証明書の不信の問題が発生した場合は、ヘルプビデオをご覧ください。

ただし、これはあくまで参考値です。 Ubuntu では、apt を使用して Apache をインストールしましたが、httpd.conf ファイルはなく、apache2.conf ファイルのみがあります。このファイルは httpd.conf に似ており、次のコメントが含まれています。

# 複数のファイルに分割され、概説した構成階層を形成します
# 以下はすべて /etc/apache2/ ディレクトリにあります:
#
Apache2 の
# |-- apache2.conf
# | `-- ポート.conf
# |-- モッズが有効
# | |-- *.ロード
# | `-- *.conf
# |-- conf が有効
# | `-- *.conf
# `-- サイトが有効
# `-- *.conf
#

このバージョンの Apache では、設定ファイルが他の小さなファイルに分散されており、構造は上記のようになります。必要に応じて、独自の httpd.conf を作成して組み込むこともできます。

https の構成に焦点を当てましょう。最初のステップは、外部環境のポート 443 が開いていることを確認することです。

2 番目のステップは、ssl_module がインストールされていることを確認することです。そうでない場合は、apt-get install openssl を実行してください。いくつかの依存関係が必要になる場合がありますが、いずれも軽微な問題です。

次にports.confを開きます。次の文が必須です。

<IfModule ssl_module>
 443を聴く
</モジュール>
 
<IfModule mod_gnutls.c>
 443を聴く
</モジュール>

次にmods-availableを開き、ssl.confとssl.loadを見つけます。

ssl.load は次のようになります:

# 依存: setenvif mime socache_shmcb
ロードモジュール ssl_module /usr/lib/apache2/modules/mod_ssl.so
ssl.conf は次のようになります:
<IfModule mod_ssl.c>
 
 # 疑似乱数ジェネレーター (PRNG):
 # SSL ライブラリの PRNG をシードするための 1 つ以上のソースを構成します。
 # シードデータは、良好なランダム品質である必要があります。
 # 警告! 一部のプラットフォームでは、エントロピーが十分でない場合、/dev/random がブロックします
 # が利用可能です。つまり、/dev/randomデバイスは使用できなくなります
 # 非常に長い接続時間につながるため(
 # より多くのエントロピーを利用できるようにする必要がある)。しかし、通常、
 # プラットフォームは、/dev/urandomデバイスも提供しているが、
 # ブロック。利用可能な場合は、代わりにこれを使用してください。mod_sslユーザーガイドを読む
 # 詳細についてはマニュアルを参照してください。
 #
 SSLRandomSeed スタートアップ組み込み
 SSLRandomSeed 起動ファイル:/dev/urandom 512
 SSLRandomSeed 接続組み込み
 SSLRandomSeed 接続ファイル:/dev/urandom 512
 
 ##
 ## SSL グローバルコンテキスト
 ##
 ## このコンテキストのすべてのSSL設定は、
 ## メイン サーバーとすべての SSL 対応仮想ホスト。
 ##
 
 #
 # 証明書とCRLをダウンロードするためのMIMEタイプ
 #
 アプリケーション/x-x509-ca-cert.crt にタイプを追加します
 AddType アプリケーション/x-pkcs7-crl .crl
 
 # パスフレーズダイアログ:
 # パスフレーズ収集プロセスを構成します。
 # フィルタリングダイアログプログラム(`builtin'は内部
 # ターミナルダイアログ) は、stdout にパスフレーズを提供する必要があります。
 SSLPassPhraseDialog exec:/usr/share/apache2/ask-for-passphrase
 
 # プロセス間セッションキャッシュ:
 # SSLセッションキャッシュを構成する: まずメカニズム 
 # 使用して期限切れのタイムアウト(秒単位)を指定します。
 # (メカニズム dbm にはメモリ リークがあることがわかっているため、使用しないでください)。
 #SSLセッションキャッシュ dbm:${APACHE_RUN_DIR}/ssl_scache
 SSLセッションキャッシュ shmcb:${APACHE_RUN_DIR}/ssl_scache(512000)
 SSLセッションキャッシュタイムアウト 300
 
 # セマフォ:
 # 相互排他セマフォへのパスを設定する
 # SSL エンジンはプロセス間同期のために内部的に使用します。 
 # (デフォルトでは無効、グローバルMutexディレクティブはデフォルトで統合します
 # これ)
 #ミューテックスファイル:${APACHE_LOCK_DIR}/ssl_mutex ssl-cache
 
 
 # SSL 暗号スイート:
 # クライアントがネゴシエートできる暗号をリストします。
 # 利用可能なすべてのciphersのリストについては、opensslパッケージのciphers(1)マニュアルページを参照してください。
 # オプション。
 # 安全な暗号のみを有効にする:
 SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
 
 # SSL サーバー暗号順序の優先順位:
 # 暗号アルゴリズムの選択にはサーバーの優先順位を使用します。
 # クライアントは低レベルの暗号化を好む場合があります。これを有効にする必要があります
 # より強力な暗号化を強制したい場合、そして余裕がある場合は
 # CPUコストを削減し、SSLCipherSuiteをオーバーライドして
 # 安全でない暗号を最初に使用します。
 # デフォルト: オフ
 SSLHonorCipherOrder オン
 
 # 有効にするプロトコル。
 # 使用可能な値: all、SSLv3、TLSv1、TLSv1.1、TLSv1.2
 # SSL v2 はサポートされなくなりました
 SSLプロトコルすべて -SSLv2 -SSLv3
 
 # まだサポートしていないクライアントとの安全でない再ネゴシエーションを許可する
 # セキュアな再ネゴシエーションプロトコル。デフォルト: オフ
 #SSLInsecureRenegotiation オン
 
 # 非 SNI クライアントが名前ベースの仮想ホストにアクセスすることを禁止するかどうか。
 # デフォルト: オフ
 #SSLStrictSNIVHostCheck オン
 
</モジュール>
 
# vim: 構文=apache ts=4 sw=4 sts=4 sr noet

次はサイトの設定です。ここではデフォルトの default-ssl.conf を使用します。

<IfModule mod_ssl.c>
 <仮想ホスト_default_:443>
 サーバー名 
 
 ################独自のサイト構成を追加する##########
 
 
 
 # 利用可能なログレベル: trace8、...、trace1、debug、info、notice、warn、
 # エラー、クリティカル、アラート、緊急。
 # 特定のログレベルを設定することもできます
 # モジュール、例:
 #ログレベル情報 ssl:warn
 
 エラーログ ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log を組み合わせたもの
 
 # conf-available/のほとんどの設定ファイルは、
 # グローバルレベルで有効または無効にするには、
 # 特定の仮想ホストのみの行を含めます。たとえば、
 # 次の行は、このホストのみのCGI設定を有効にします
 # 「a2disconf」でグローバルに無効にされた後。
 #conf-available/serve-cgi-bin.conf を含める
 
 # SSL エンジン スイッチ:
 # この仮想ホストの SSL を有効/無効にします。
 SSLエンジンオン
 
 # 自己署名証明書(snakeoil)は、インストールすることで作成できます。
 # ssl-certパッケージ。参照
 詳細については、 # /usr/share/doc/apache2/README.Debian.gz を参照してください。
 # キーと証明書の両方が同じファイルに保存されている場合、
 # SSLCertificateFile ディレクティブが必要です。
 SSL証明書ファイル /etc/apache2/cert/public.pem
 SSL証明書キーファイル /etc/apache2/cert/xxxxxxx.key
 
 # サーバー証明書チェーン:
 # SSLCertificateChainFileを、
 # PEMエンコードされたCA証明書の連結。
 # サーバー証明書の証明書チェーン。または
 # 参照ファイルはSSLCertificateFileと同じでも構いません
 # CA証明書がサーバーに直接追加される場合
 # 利便性のための証明書。
 SSL証明書チェーンファイル /etc/apache2/cert/chain.pem
 
 # 証明機関 (CA):
 # CA証明書の検証パスを設定します。CAが見つかる場所です。
 # クライアント認証用の証明書または代わりに1つ
 # これらすべてを含む巨大なファイル (ファイルは PEM でエンコードされている必要があります)
 # 注意: SSLCACertificatePath 内にはハッシュシンボリックリンクが必要です
 # 証明書ファイルを指定するには、提供されている
 # 変更後にハッシュシンボリックリンクを更新するための Makefile。
 #SSLCACertificatePath /etc/ssl/certs/
 #SSLCACertificateFile /etc/apache2/ssl.crt/ca-bundle.crt
 
 # 証明書失効リスト (CRL):
 # クライアントのCA CRLを検索するCA失効パスを設定します
 # 認証またはすべての内容を含む1つの巨大なファイル
 個数 (ファイルは PEM でエンコードされている必要があります)
 # 注意: SSLCARevocationPath 内にはハッシュシンボリックリンクが必要です
 # 証明書ファイルを指定するには、提供されている
 # 変更後にハッシュシンボリックリンクを更新するための Makefile。
 #SSLCARevocationPath /etc/apache2/ssl.crl/
 #SSLCARevocationFile /etc/apache2/ssl.crl/ca-bundle.crl
 
 # クライアント認証(タイプ):
 # クライアント証明書の検証タイプと深さ。タイプは
 # none、optional、require、optional_no_ca。深さは
 # 証明書をどの程度深く検証するかを指定する数値
 # 証明書が有効でないと判断する前に、発行者チェーンを確認します。
 #SSLVerifyClient が必要
 #SSL検証深度10
 
 # SSL エンジン オプション:
 # SSL エンジンのさまざまなオプションを設定します。
 # o 偽BasicAuth:
 # クライアントのX.509をBasic認証に変換します。これは、
 # アクセス制御には標準の Auth/DBMAuth メソッドを使用できます。
 # ユーザー名は、クライアントの X.509 証明書の「1 行」バージョンです。
 # ユーザーからパスワードは取得されないことに注意してください。ユーザー内のすべてのエントリ
 # ファイルにはこのパスワードが必要です: `xxj31ZMTZzkVA'。
 # o 証明書データのエクスポート:
 # これにより、2つの追加の環境変数がエクスポートされます: SSL_CLIENT_CERTと
 # SSL_SERVER_CERT。これらには、PEMエンコードされた証明書が含まれています。
 # サーバー(常に存在)とクライアント(クライアントが
 # 認証が使用されます)。これを使用して証明書をインポートできます
 # CGI スクリプトに組み込みます。
 # o 標準環境変数:
 # これは、標準の SSL/TLS 関連の `SSL_*' 環境変数をエクスポートします。
 # デフォルトでは、パフォーマンス上の理由からこのエクスポートはオフになっています。
 # 抽出ステップはコストのかかる操作であり、通常は
 # 静的コンテンツを提供するには役に立ちません。そのため、通常は
 # CGI および SSI リクエストのみのエクスポート。
 # o OptRenegotiate:
 # これにより、SSL接続の再ネゴシエーション処理が最適化され、SSL
 # ディレクティブはディレクトリごとのコンテキストで使用されます。
 #SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
 <FilesMatch "\.(cgi|shtml|phtml|php)$">
 SSLオプション +標準環境変数
 </ファイル一致>
 <ディレクトリ /usr/lib/cgi-bin>
 SSLオプション +標準環境変数
 </ディレクトリ>
 
 # SSL プロトコルの調整:
 # 安全でデフォルトですが、SSL/TLS標準に準拠したシャットダウン
 # アプローチは、mod_sslがclose notificationアラートを送信するが、
 # クライアントからの終了通知アラート。別のシャットダウンが必要な場合
 # アプローチでは、次のいずれかの変数を使用できます。
 # o ssl-unclean-shutdown:
 # これにより、接続が閉じられたときにクリーンでないシャットダウンが強制されます。つまり、
 # SSLクローズ通知アラートが送信または受信を許可されています。これは違反です
 # SSL/TLS標準ではありませんが、一部の低機能なブラウザでは必要です。
 # 標準的なアプローチではI/Oエラーが発生するため、
 # mod_ssl はクローズ通知アラートを送信します。
 # o ssl-正確なシャットダウン:
 # これにより、接続が閉じられたときに正確なシャットダウンが強制されます。つまり、
 # SSL クローズ通知アラートが送信され、mod_ssl はクローズ通知を待機します
 # クライアントのアラート。これは100% SSL/TLS標準に準拠していますが、
 # 実践すると、ブラウザが動かなくなり、接続がハングすることがよくあります。
 # これは、SSL実装がわかっているブラウザのみ対象です
 # 正常に動作します。
 # 注意: 壊れたクライアントの問題のほとんどはHTTPにも関連しています
 # キープアライブ機能があるので、通常はさらに無効にしたい
 # これらのクライアントに対してもキープアライブを行います。これには変数「nokeepalive」を使用します。
 # 同様に、回避策として一部のクライアントにHTTP/1.0の使用を強制する必要がある
 # 壊れたHTTP/1.1実装。変数「downgrade-1.0」と「downgrade-1.0」を使用してください。
 # この場合は「force-response-1.0」を使用します。
 # ブラウザマッチ "MSIE [2-6]" \
 # nokeepalive ssl-unclean-shutdown \
 # ダウングレード 1.0 強制レスポンス 1.0
 
 </仮想ホスト>
</モジュール>
 
# vim: 構文=apache ts=4 sw=4 sts=4 sr noet

Alibaba Cloud チュートリアルの設定項目が 2 つの設定ファイルに分かれていることに気付きましたか?

次に、ブラウザで https を使用してアクセスすると、成功します。 (Linux では wget または curl を使用してテストできます)

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Apache、wsgi、django プログラムのデプロイメント設定方法の詳細な説明
  • LinuxベースのApacheウェブサイトサービス構成の詳細な説明
  • Windows での Apache+Tomcat7 負荷分散構成方法の詳細な説明
  • Apache Web サーバーを使用して 2 つ以上のサイトを構成する方法
  • Apache での ModSecurity のインストール、有効化、および構成
  • CentOS 7 での Apache Web サーバーのインストールと設定のチュートリアル
  • Alibaba Cloud Server Apache は SSL 証明書を構成して Https を正常に有効にします (さまざまな落とし穴を記録します)
  • Win10 Apache が仮想ホストを設定した後にローカルホストが利用できなくなる問題の解決方法
  • Apache 経由で複数の仮想ホストをローカルに設定する方法

<<:  MySQLで行または列をソートする方法

>>:  要素内の TimePicker は時間の一部を無効にします (分単位で無効)

推薦する

CentOS 7.2 に SuPHP をインストールするための詳細な手順

デフォルトでは、CentOS 7 上の PHP は apache または nobody として実行さ...

ブラウザの自動フォーム入力によるウェブページのスタイル損失の原因の分析と解決

バックエンドからフロントエンドまで、なんと悲劇なのでしょう。他の人の CSS を自分の jsp We...

JS を使用して要素がビューポート内にあるかどうかを確認する方法

序文要素がビューポート内にあるかどうかを監視する2つの方法を共有する1. 位置計算Element.g...

Docker Compose のインストールと使用手順

目次1. Docker Compose とは何ですか? 2. Docker Composeのインスト...

MySQL 最適化 Zabbix パーティション最適化

zabbix を利用する上での最大のボトルネックはデータベースです。zabbix のデータストレージ...

Ubuntu に MySQL 5.7 をインストールし、データ ストレージ パスを構成する方法

1. MySQLをインストールするこの記事はAPT経由でインストールされており、インストールされてい...

jQueryはショッピングカート機能を実装します

この記事の例では、ショッピングカート機能を実装するためのjQueryの具体的なコードを参考までに共有...

ページデザインにおけるテーブルとdivの適切な適用についての簡単な説明

この記事の冒頭で、以前書いた入門記事の間違いを訂正したいと思います。初心者を再び誤解させないように、...

Linux 7.7 でスワップ パーティション SWAP を設定する方法

Linux システムの Swap パーティション、つまり swap パーティションは、一般に仮想メモ...

HTML スクロールバーのテキストエリア属性の設定

1.オーバーフローコンテンツのオーバーフロー設定(設定されたオブジェクトにスクロールバーを表示するか...

CentOS 7 ブートカーネルの切り替えとブートモードの切り替えの説明

Centos7 スイッチブートカーネル注: 必要に応じて、最初にyum update -yを実行して...

Vue の基本リスナーの詳細な説明

目次Vueのリスナーとは何かリスナーの使い方vue リスナーウォッチVue リスナー - ディープリ...

CentOS8でのnmcliの使い方の詳しい説明

RHEL8/CentOS8 に基づく一般的な nmcli コマンド # IP を表示する (ifco...

Vue はクリックフリップ効果を実現します

参考までに、vueを使用してクリックフリップエフェクトを簡単に実装します。具体的な内容は次のとおりで...

MySQL における exists、in、any の基本的な使い方

【1】存在するループを使用して外部テーブルを 1 つずつクエリし、各クエリの存在する条件ステートメン...