ByteScope

443

ポート 443 · HTTPS

TCP/UDPIANA 割り当てありWeb・HTTP

HTTPS のポート。ただし HTTP/3 以降は UDP のポートでもあるので、TCP だけを見るチェックは「誰も待ち受けていない」と言いながら、実は半分のトラフィックが捌かれている状態を見落とします。

ポート 443 を使っているプロセスを特定する

自分の環境の行をそのまま実行してください。ポートを掴んでいるプロセス名と、バインドしているアドレスが出ます。たいていはそれだけで答えが分かります。

外側から確かめる

`nmap -Pn -p 443 --reason example.com` は TCP 側をカバーします。`open` はハンドシェイクが成立、`closed` はリセットが返ってきた、つまり到達はできるが誰も待ち受けていない、`filtered` はパケットがファイアウォールに吸い込まれたということです。`--reason` は推測ではなく実際に観測されたのがどれかを出しますし、`-sV` を付ければ nmap が TLS をネゴシエートしてサーバーと証明書の情報まで報告します。HTTP/3 を見るなら `nmap -Pn -sU -p 443 example.com` を別に走らせてください。結果は `open|filtered` になるはずです。UDP の沈黙は本質的に曖昧なので、nmap は推測を拒みます。ポートが開いているのに何かが失敗するなら、スキャンをやめて `openssl s_client -connect example.com:443 -servername example.com` を実行してください。証明書チェーンとネゴシエートされたプロトコルバージョン、そしてハンドシェイクがどこで壊れるかがそのまま出ます。スキャンは自分が責任を持つホストにだけ。

443 につながらないときの読み方

出ているもの意味
curl: (60) SSL certificate problem: unable to get local issuer certificate接続もハンドシェイクもチェーンの検証まで到達しているので、ポートもネットワークも問題ありません。サーバーが、送るべき中間証明書を送っていません。ブラウザは他のサイトで拾った中間証明書をキャッシュしているのでこれをよく隠してしまい、だから API クライアントや CI ジョブで先に表面化します。検証を飛ばすフラグを足すのではなく、サーバーが提示するチェーンのほうを直してください。
curl: (60) SSL: no alternative certificate subject name matches target host name 'example.com'443 番のサーバーには届いていて、別の名前の証明書が返ってきました。たいていは SNI です。クライアントがホスト名を送っていないか、その名前が設定されていないのでリクエストが既定のバーチャルホストに落ちています。`openssl s_client -connect <ip>:443 -servername example.com` と、`-servername` なしの同じコマンドを見比べれば正確に再現できます。
curl: (35) error:0A000410:SSL routines::sslv3 alert handshake failureTCP は成功し、TLS は失敗しました。両者に共通して使えるプロトコルバージョンか暗号スイートがありません。典型的なのは、TLS 1.0 と 1.1 を無効にしたサーバーに古いクライアントが当たったケースか、提示されなかったクライアント証明書をサーバーが要求しているケースです。直すべきはポートではなくネゴシエーションの条件です。
curl: (7) Failed to connect to example.com port 443: Connection refusedリセットが即座に返ってきた、つまりホストは生きていて 443 番は誰も持っていません。Web サーバーかロードバランサーが停止しているか、80 番でしか待ち受けていないか、ループバックにバインドしています。ファイアウォールを疑う前に、サーバー側で自分の環境のコマンドを実行してバインドアドレスを読んでください。
The browser hangs and finally shows ERR_CONNECTION_TIMED_OUT何も答えていないので、フィルタが拒否ではなく破棄をしています。クラウドのセキュリティグループ、ホスト上のファイアウォール、あるいはネットワーク ACL です。長い待ち時間が目印で、拒否なら即座に返ります。ルールはクライアント側の方向からも確認してください。自分側の送信ルールは、相手側の受信ルールが欠けているのとまったく同じ症状を出します。
listen EADDRINUSE :::443, or EACCES permission denied on 443見た目が似ているだけの、別々の二つの問題です。EADDRINUSE は別のプロセスがポートを持っているということなので、コマンドを実行してバインドアドレスを読んでください。ワイルドカードのリスナーがいると、どの具体アドレスへの bind も塞がれます。EACCES はポートが特権側だということ。443 番は 1024 未満なので、特権のないプロセスはポートの空きを調べてもらう前に断られます。
The site loads but HTTP/3 never engages, or QUIC connections stall and fall backTCP の 443 番は届くのに UDP の 443 番が届いていません。ファイアウォールやセキュリティグループのルールは TCP しか書かれていないことが多く、その場合ブラウザは QUIC を試し、待たされ、TCP にフォールバックします。原因不明の遅さに見えるのはそのコストです。Linux なら `-u` を、macOS ならプロトコル指定なしでプローブして、UDP 443 を許可するか塞ぐかを意識的に決めてください。

ポート 443 で動いているもの

IANA は 443 番を TCP・UDP 両方で `https` として登録していて、説明は「TLS/SSL 上の http プロトコル」、根拠は RFC 9110 です。TCP 側は見慣れたほう、つまり TCP 上の TLS で HTTP/1.1 や HTTP/2 を運びます。UDP 側は HTTP/3 が使うもので、QUIC は UDP 上で動き、同じ番号で終端します。ここから実務的な落とし穴が生まれます。サーバーは 443 番で二重に待ち受けられる——トランスポートごとに一つずつ——ので、TCP に絞ったプローブでは半分しか見えません。ブラウザには HTTP/3 で応答が返っているのに `ss -tlnp` の出力が物足りないなら、`-u` を足してください。トランスポートの上、443 番は TLS が行われる場所(TLS 1.3 は RFC 8446)で、現場の混乱をいちばん生む拡張が SNI(RFC 6066)です。クライアントはハンドシェイクの中で目的のホスト名を名乗るので、一つの IP アドレスと一つのポートが、多数の証明書を持つ多数のサイトを提供できます。ネットワーク的には接続に成功しているのに違う証明書が返ってくるのはこのためです。正しいソケットには届いていて、バーチャルホストを外しています。暗号化された DNS も DNS over HTTPS としてここに住んでいますが、これは意図的で、通常の Web トラフィックと区別がつかないことが狙いです。このポートで最良の単一の診断はスキャンではなく `openssl s_client -connect example.com:443 -servername example.com` です。本物のハンドシェイクを最後まで行い、サーバーが実際に送ってきたチェーンを表示します。

ポート 443 を外部に開けてよいか

ここは出すことが前提のポートなので、セキュリティの論点はどこかに消えるのではなく、レイヤーの上に移ります。受信側のリスクは、その後ろに何がいるかです。期限切れや名前の合わない証明書、同じバーチャルホストの下に公開されている管理画面、TLS を終端して完全には信頼していないネットワークセグメントに平文を流すプロキシ、そして 80 番でも別途到達できてそこでも応答するオリジンサーバー。証明書チェーンは完全に保ってください。中間証明書が欠けていてもキャッシュを持つブラウザでは動き、ブラウザ以外のクライアントでは全部失敗するので、API を壊す手口としてはかなり厄介な部類です。ポリシーが取りこぼしがちなのは送信側です。443 番はどこでも許可されているので、トンネルや VPN、SSH over TLS の既定の抜け道になります。宛先を問わず 443 番を許す送信ルールは、事実上すべてを許すルールです。重要なところでは送信の 443 番も宛先で絞り、脅威モデル上必要なら検査してください。最後に、TCP と UDP の 443 番はどちらも意識的に許可するか、意識的に塞ぐかにしてください。UDP 443 を中途半端に開けておくと、クライアントは HTTP/3 を試して失敗し、誰にも説明できない遅延を抱えたまま黙ってフォールバックします。

サービス
HTTPS
トランスポート
TCP/UDP
登録状況
IANA 割り当てあり
カテゴリ
Web・HTTP

このサイトのツール

どれもブラウザ内で完結します。アップロードは発生しません。

関連するポート

443 を調べているとき、ついでに確認することになりがちなポートです。

よくある質問

明らかに使用中なのに、コマンドが何も表示しないのはなぜ?

ほぼ権限の問題です。lsofss はソケット自体は出しますが、他ユーザーのプロセスは所有者の列を伏せるので、システムアカウントやコンテナランタイム、launchd が起動したサーバーは sudo を付け直すまで持ち主不明のリスナーに見えます。Windows は逆で、netstat には何も出ないのに bind だけ失敗します。これは Hyper-V や WSL2、Docker Desktop が起動時に予約したポート帯に当たっている状態です。

ポートを掴んでいるプロセスは kill してよい?

何なのかを先に見てください。取り残された開発サーバーなら問題ありませんが、書き込み中のデータベースは別ですし、他が依存しているシステムサービスも同様です。持ち主がコンテナならコンテナごと停止してください。ホストから見えるプロセスを kill してもランタイムが再起動するだけです。どうしても止められないものなら、自分のサービスを別のポートへ移すほうが早く片付きます。

ローカルからは届くのに、別のマシンからは届かないのはなぜ?

0.0.0.0 ではなく 127.0.0.1 にバインドしているからです。各ページのコマンドがプロセス名と並べてバインド先アドレスを出しているのはこのためで、ループバックにバインドしたものはファイアウォールの設定に関係なく自分のマシンからしか届きません。最近は意図的にそれを既定にしているフレームワークも多いので、たいていはバグではなくフラグの問題です。すでに 0.0.0.0 なのに届かないなら、次に疑うのはホストのファイアウォールかクラウドのセキュリティグループです。

珍しいポート番号に移すと安全になる?

ほとんどなりません。インターネット全体を舐めるスキャナーはポート範囲を丸ごと走査し続けているので、稼げるのは数時間であって安全ではなく、代わりに関係者全員がその番号を覚える羽目になります。既定ポートを狙う無差別スキャンのログが減るという効果は確かにありますが、それだけです。結果を変えるのは認証と、送信元アドレスを絞ったファイアウォールと、そもそも外に出さないことです。

ポート 443 でまだ詰まっていますか。ポート一覧をすべて見る。あるいは上に戻って、実際に出たエラー文から追ってください。