PHP の SSL/TLS 双方向認証メカニズムについての深い理解
PHP における SSL/TLS 双方向認証メカニズムについての深い理解
SSL (Secure Sockets Layer) と TLS (Transport Layer Security) は、次の目的で使用されます。ネットワーク通信セキュリティ契約を保護します。 PHP では、OpenSSL 拡張機能を使用して SSL/TLS プロトコルを使用できます。 SSL/TLS プロトコルは、クライアントとサーバー間の認証を保証し、通信のセキュリティを確保するための双方向認証メカニズムを提供します。この記事では、PHP における SSL/TLS 双方向認証のメカニズムを詳しく説明し、いくつかのコード例を示します。
- 証明書の作成
双方向認証では、双方が独自の証明書を持っている必要があります。一般に、サーバーは公開キー証明書を持っている必要があり、クライアントは公開キーと秘密キーのペアを生成してサーバーに公開キーを提供する必要があります。
サーバー証明書は次の手順で作成できます:
$sslConfig = array( "private_key_bits" => 2048, "private_key_type" => OPENSSL_KEYTYPE_RSA, ); $sslContext = openssl_pkey_new($sslConfig); openssl_pkey_export($sslContext, $privateKey); $csr = openssl_csr_new( array( "commonName" => "example.com", "subjectAltName" => "www.example.com", ), $privateKey ); openssl_csr_export($csr, $csrOut); openssl_csr_sign($csr, null, $privateKey, 365); openssl_x509_export($csr, $publicKey); file_put_contents("server.key", $privateKey); file_put_contents("server.csr", $csrOut); file_put_contents("server.crt", $publicKey);
クライアントの公開キー/秘密キーのペアは次の手順で生成できます:
$sslConfig = array( "private_key_bits" => 2048, "private_key_type" => OPENSSL_KEYTYPE_RSA, ); $sslContext = openssl_pkey_new($sslConfig); openssl_pkey_export($sslContext, $privateKey); $csr = openssl_csr_new( array( "commonName" => "client.example.com", ), $privateKey ); openssl_csr_export($csr, $csrOut); openssl_csr_sign($csr, null, $privateKey, 365); openssl_x509_export($csr, $publicKey); file_put_contents("client.key", $privateKey); file_put_contents("client.csr", $csrOut); file_put_contents("client.crt", $publicKey);
- 構成サーバー
サーバーは、公開キー証明書と秘密キーをロードし、双方向認証を実行する必要があります。
これは簡単な例です:
$sslOptions = array( "local_cert" => "server.crt", "local_pk" => "server.key", ); $sslContext = stream_context_create(array( "ssl" => $sslOptions, ));
上記の SSL コンテキストはサーバーの作成時に使用できます:
$server = stream_socket_server( "ssl://0.0.0.0:443", $errno, $errorMessage, STREAM_SERVER_BIND | STREAM_SERVER_LISTEN, $sslContext );
この例では、サーバーはローカルでリッスンします。 443 ポートを使用し、SSL 通信に信頼できる証明書を使用します。
- クライアントの構成
クライアントは、公開鍵/秘密鍵のペアをロードし、その公開鍵を使用してサーバーと握手をする必要があります。
これは簡単な例です:
$sslOptions = array( "local_cert" => "client.crt", "local_pk" => "client.key", ); $sslContext = stream_context_create(array( "ssl" => $sslOptions, ));
上記の SSL コンテキストはクライアントの作成時に使用できます:
$client = stream_socket_client( "ssl://example.com:443", $errno, $errorMessage, 30, STREAM_CLIENT_CONNECT, $sslContext );
この例では、クライアントは example に接続します。 com のポート 443 に接続し、その公開キーを使用してサーバーとの SSL ハンドシェイクを実行します。
- 双方向認証の確認
双方が正常に接続を確立し、ハンドシェイクに SSL/TLS を使用すると、双方向認証を実行できます。
以下は簡単な例です:
サーバー側:
$peerCertificate = openssl_x509_parse(stream_context_get_params($client)["options"]["ssl"]["peer_certificate"]); if ($peerCertificate["subject"]["CN"] === "client.example.com") { // 鉴权成功 } else { // 鉴权失败 }
クライアント側:
$peerCertificate = openssl_x509_parse(stream_context_get_params($client)["options"]["ssl"]["peer_certificate"]); if ($peerCertificate["subject"]["CN"] === "example.com") { // 鉴权成功 } else { // 鉴权失败 }
この例では、サーバー側とクライアント側の両方が相手の証明書を解析し、証明書内の共通名 (CN) が期待どおりであることを確認します。認証に失敗した場合は、証明書が一致していないか、証明書が改ざんされている可能性があります。
結論
PHP の SSL/TLS 双方向認証メカニズムを深く理解することで、証明書の生成、サーバーとクライアントの構成、双方向認証検証の実行方法を理解できます。 SSL/TLS 双方向認証メカニズムにより、サーバーとクライアント間の安全な通信が保証され、データ送信のセキュリティが向上します。実際の開発では、実際のニーズに応じて SSL/TLS 双方向認証を合理的に構成して使用する必要があります。
以上がPHP の SSL/TLS 双方向認証メカニズムについての深い理解の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。
