HTTPS
HTTPS (Hypertext Transfer Protocol Secure の正式名) は、暗号化されたチャネルを通じてデータを送信するためのセキュリティ プロトコルです。これは、Web ブラウザと Web サーバー間の安全なデータ転送に使用される HTTP プロトコルの安全なバージョンです。HTTPS は、SSL (Secure Sockets Layer) または TLS (Transport Layer Security) プロトコルを使用して送信中にデータを暗号化し、送信中に機密情報が盗まれたり改ざんされたりしないようにします。
HTTP の欠点
通信には平文(暗号化されていない)が使用されるため、内容が盗まれる可能性があります
通信相手の本人確認をしないため、なりすましの可能性がある
メッセージの完全性は証明できないため、改ざんされた可能性があります
https
情報の暗号化
整合性チェック
認証
HTTPS = http + TLS/SSL
TLS SSL
TLS (Transport Layer Security) と SSL (Secure Sockets Layer) は、ネットワーク通信を保護するために使用されるセキュリティ プロトコルです。これらはすべて、データ送信の機密性と整合性を確保するための暗号化および認証メカニズムを提供します。
SSL は最も初期のセキュリティ プロトコルであり、TLS は SSL に基づいて開発されました。現在広く使用されているバージョンは TLS 1.2 と TLS 1.3 です。TLS 1.3 は、セキュリティ、パフォーマンス、機能がいくつか改善されたプロトコルの最新バージョンです。
TLS と SSL は主に次の 2 つの方法で使用されます。
- 暗号化通信: TLS/SSL は、暗号化アルゴリズムを使用してデータを暗号化し、第三者による通信内容の傍受や盗聴を防ぎます。送信中のデータのプライバシーを確保します。
- 認証: TLS/SSL は、通信当事者の身元を確認し、データが正しい受信者にのみ送信されることを保証するための認証メカニズムも提供します。これにより、悪意のあるユーザーが他のユーザーまたはサーバーになりすますことができなくなります。
SSL は https に最も早く使用されたものです
TLS は、セキュリティを向上させ、SSL に存在するいくつかのセキュリティ問題を解決する SSL のアップグレード バージョンです
SSL/TLSは次のように動作します
HTTP
TLS/SSL セキュリティ層
TCP
暗号化
- 対称暗号化
一般的なアルゴリズムには AES DES 暗号化が含まれます
例麒麟
->星月
対称暗号化を使用してメッセージを送信しますが、そのメッセージが他人に知られることを望まないため、2 人はキーをネゴシエートします。今生永相随
キリン:AES算法 + 密钥(今生永相随)+明文(吃面) = XMZSXMZS==
シンユエ:使用AES + 密钥(今生永相随)+密文( XMZSXMZS==) = 吃面
- 非対称暗号化
一般的なアルゴリズムには RSA DSA 暗号化が含まれます
例麒麟
->星月
メッセージを送信します。今回は非対称暗号化を使用し、公開キーと秘密キーを生成します。公開キーは公開できますが、秘密キーは既知である必要があり、公開することはできません麒麟
。
Xingyue: RSA + 公開鍵 + 平文 (ヌードル) = XMZS==
Kylin: RSA + 秘密キー + 暗号文 (XMZS==) = ヌードル
openSSLは秘密鍵を生成します
openSSLのインストール
Mac コンピュータには以下の機能が付属しています
Windows
https://www.openssl.org/source/
SSL/TLS 暗号化通信では、証明書関連の操作を完了するには通常、次の 3 つのファイルが必要です。
-
秘密鍵ファイル (「private-key.pem」など)。暗号化されたデータを復号化するために使用されます。
-
証明書署名要求ファイル (「certificate.csr」など)。CA からの SSL/TLS 証明書署名を申請するために使用されます。
-
クライアントから送信されたリクエストを認証して安全な通信を確保するための SSL/TLS 証明書ファイル (「certificate.pem」など)。
秘密鍵ファイルは、通信の機密性を確保するためにデータを復号化するために使用されます。証明書署名要求ファイルには、要求者の身元情報と公開鍵およびその他の情報が含まれており、署名のために CA に送信する必要があるため、有効な SSL/TLS 証明書を取得する場合、SSL/TLS 証明書ファイルには署名された証明書情報が含まれており、この情報はクライアントとサーバー間の認証に使用され、通信のセキュリティと信頼性を確保します。
これら 3 つのファイルを鍵交換と認証に使用することで、SSL/TLS は暗号化通信を実現し、中間者攻撃に対抗し、通信のセキュリティと機密性を向上させることができます。
openssl genpkey -algorithm RSA -out private-key.pem -aes256
openssl: OpenSSL コマンドライン ツールの名前。
genpkey: 秘密鍵を生成するコマンド。
-algorithm RSA: RSA 秘密キーを生成するように指定します。
-out private-key.pem: 生成された秘密キーを private-key.pem ファイルとして保存します。
-aes256: 秘密キー ファイルを不正アクセスから保護するために、秘密キーに AES 256 ビット暗号化を追加します。
PEM パス フレーズを入力してください。 qwe123 pem ファイルの生成時にパスフレーズが必要です
pem証明書ファイルを生成する
openssl req -new -key private-key.pem -outcertificate.csr
- "req": X.509 証明書要求マネージャー (Certificate Request Management) 機能モジュールを使用することを示します。
- 「-new」: 新しい証明書署名要求を生成することを示します。
- 「-key private-key.pem」: 指定された秘密鍵ファイル「private-key.pem」を使用して、証明書署名要求内の鍵ペアを暗号化することを意味します。
- 「-outcertificate.csr」:生成された証明書署名要求をファイル「certificate.csr」に出力することを意味します。このファイルには、公開キー、許可されたサブジェクトの ID 情報など、申請者によって提供された証明書要求情報が含まれています。
Country Name (2 letter code) []:CN 国家
州名(フルネーム) []:BJ省份
地域名 (例: 市) []: BJ 市
組織名(会社など)ZMY 組織または個人
組織単位名 (セクションなど) []: XMKJ 組織名
共通名 (完全修飾ホスト名など) []:localhost ドメイン名
メールアドレス []: メールアドレス
次の「追加」属性を入力してください
証明書リクエストと一緒に送信されます
チャレンジパスワード []: パスワードとソルト XMZSXMZSXMZS
openssl x509 -req -in 証明書.csr -signkey 秘密鍵.pem -out 証明書.pem
「x509」:X.509証明書マネージャー機能モジュールを使用することを示します。
「-req」: 入力ファイル (ここでは「certificate.csr」) から証明書署名要求データを読み取ることを示します。
"-incertificate.csr": 読み込む証明書署名要求ファイル名を指定します。
「-signkey private-key.pem」: 指定された秘密鍵ファイル「private-key.pem」を署名操作に使用するように指定します。一般に、署名証明書の秘密キーは、以前に生成された CSR の秘密キーに対応する必要があります。
「-outcertificate.pem」: 署名された証明書をファイル「certificate.pem」に出力することを意味します。このファイルには、署名アルゴリズム、有効期間、公開キー、認可された主体の ID 情報など、署名された証明書の情報が含まれています。
private-key.pem のパス フレーズを入力してください: パス フレーズ
nodejsインターフェイステストhttps
生成された 2 つのファイル「certificate.pem private-key.pem」を導入します。
import https from 'node:https'
import fs from 'node:fs'
https.createServer({
key: fs.readFileSync('private-key.pem'),
cert: fs.readFileSync('certificate.pem'),
//密码短语
passphrase: 'qwe123'
}, (req, res) => {
res.writeHead(200)
res.end('success')
}).listen(443,()=>{
console.log('server is running')
})
nginx 設定 https
究極の大きな落とし穴 Windows で nginx を使用して https 秘密キーを構成すると、パスワードを設定できません
- openssl genrsa -out nginx.key 2048 (秘密キーの生成)
- openssl req -new -key nginx.key -out nginx.csr (署名ファイルの生成)
- openssl x509 -req -in nginx.csr -signkey nginx.key -out nginx.crt (証明書の生成)
nginx設定ファイル内
server {
listen 443 ssl;
server_name localhost;
ssl_certificate nginx.crt;
ssl_certificate_key nginx.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}