OpenSSLとかhttpsとかSSHとかSFTPとか
#セキュリティ #SSH #SSL

created: 2024/10/14, modified: 2024/11/12

標準のサムネイル 2024-06

OpenSSLとかhttpsとかSSHとかSFTPとか

OpenSSL と HTTPS

OpenSSL と HTTPSの”s”のSSL には密接な関係がありますが、仕組みの観点から見ると役割が異なります。

OpenSSLとは?

OpenSSLは、暗号化ライブラリであり、SSL/TLSプロトコルの実装をサポートしています。

  • 暗号アルゴリズム(AES、RSA、SHAなど)の実装
  • SSL/TLSプロトコルの実装(安全な通信を実現するための標準プロトコル)
  • 証明書の生成・検証(デジタル証明書を扱うための機能)

OpenSSLは、これらの機能を提供することで、暗号化通信を行うアプリケーション(例えば、Webサーバーやメールサーバー)がSSL/TLSをサポートできるようにします。多くのソフトウェアやアプリケーションで使われる標準的なライブラリです。

  1. HTTPSの”s”のSSLとは?
  • HTTPSは、HTTPにSSL/TLS(セキュアソケットレイヤー/トランスポートレイヤーセキュリティ)を追加したプロトコルです。
  • HTTPSの”s”は、SSL(またはその後継であるTLS)によって通信が暗号化されていることを意味します。
  • SSL/TLSプロトコルは、クライアント(ブラウザ)とサーバー間で暗号化された安全な通信を確立するために使用されます。
  • 通信が暗号化されていることで、第三者による盗聴やデータ改ざんが防止されます。

OpenSSLとHTTPSのSSLの関係

OpenSSL は、SSL/TLSプロトコルの実装を提供するライブラリです。したがって、OpenSSLを使用することで、サーバーやアプリケーションはSSL/TLSを使った安全な通信を行うことができます。

HTTPSのSSL は、ブラウザとWebサーバー間で安全な通信を実現するために使われているプロトコルであり、その内部でSSL/TLSプロトコルが動作しています。

つまり、HTTPSが使用するSSL/TLSプロトコルの機能の一部をOpenSSLが実装しているため、技術的に関連していますが、それぞれの役割は異なります。

仕組みの違い

OpenSSL はあくまでライブラリで、SSL/TLSの機能を提供するために使われます。つまり、アプリケーションやサーバーがSSL/TLSを使うためにOpenSSLを利用するという形です。

HTTPSのSSL/TLS は、WebブラウザとWebサーバーが安全に通信するためのプロトコルで、その通信を暗号化してデータを守る役割を果たします。

SSHとSFTP

SSH(Secure Shell)

  • SSH は、ネットワークを介した安全な通信を提供するプロトコルで、主にリモートサーバーへのアクセスや制御に使われます。
  • リモートログイン:リモートサーバーに安全にログインして、コマンドライン操作を行う(例: ssh user@server)。
  • ファイル転送:SSH経由で安全にファイルを転送(SCPやSFTP)することができます。
  • ポート転送:SSHを使って特定のポートへの通信を暗号化し、安全にトンネリングすることもできます。
  • 暗号化: SSHでは、通信が暗号化されており、リモートアクセスやデータ転送の際に第三者による盗聴や改ざんを防ぎます。RSAやDSAなどの公開鍵暗号が使われることが一般的です。
  • SSHセッションでは、初めに公開鍵と秘密鍵を使って認証し、その後に対称暗号(AESなど)を使って通信を高速に暗号化します。このプロセスにより、安全で効率的な通信が実現します。

SFTP(SSH File Transfer Protocol)

  • SFTP は、SSHを基盤にしたファイル転送プロトコルです。FTP(File Transfer Protocol) に似ていますが、通信がすべてSSHで暗号化されている点が大きく異なります。
  • 暗号化: SFTPは、SSHの通信チャネル上で動作しているため、データ転送はすべて暗号化され、安全に行われます。
  • ファイル操作: SFTPはファイルのアップロード、ダウンロード、ディレクトリ作成、削除などの機能を提供します。

SFTPの仕組み

  1. クライアントがSSHでサーバーに接続。
  2. SSHセッション内でSFTPプロトコルが開始され、暗号化された状態でファイルをやり取り。

SSHとSSL/TLSの違い

SSH と SSL/TLS はどちらも暗号化された通信を提供しますが、用途が異なります。

  • SSH は、主にリモートログインやサーバーへの安全なアクセスに使用されます。また、その上で動作するSFTPなどのプロトコルも暗号化されたファイル転送に使われます。
  • SSL/TLS は、主にWebブラウザとWebサーバー間、または他のアプリケーション間での暗号化通信を提供するプロトコルであり、例えばHTTPSやメールプロトコル(SMTP、IMAPなど)で使われます。

暗号化の仕組みの違い:

  • SSH は最初に公開鍵認証で接続を確立し、その後に対称暗号でデータをやり取りします。これにより、リモートのシステムと安全に通信できます。
  • SSL/TLS も公開鍵と対称暗号を組み合わせていますが、主にクライアントとサーバー間でのデータの保護や認証に使用されます。

SFTPとFTPSの違い

  • SFTP と FTPS はどちらもファイルを暗号化して転送するプロトコルですが、技術的に異なります。
  • SFTP: SSHベースのプロトコル。SSHセッションの上で動作し、すべての通信が暗号化されます。使いやすく、サーバーへの安全なファイル転送に利用されます。
  • FTPS: FTPにSSL/TLSによる暗号化を追加したもの。FTPサーバーがSSL/TLSをサポートしていれば使えますが、セットアップがやや複雑です。

そもそもShellとは

Shell(シェル)は、コンピュータに対して命令を入力するためのインターフェースです。シェルは、ユーザーとオペレーティングシステム(OS)の間で橋渡しの役割を果たし、ユーザーがコマンドを入力して操作を指示すると、そのコマンドをOSが実行する仕組みになっています。

シェルには、主に次の2つの種類があります。

コマンドラインシェル(Command-Line Shell)

  • コマンドラインインターフェース(CLI)を提供し、ユーザーがテキストベースでコマンドを入力します。最も一般的なタイプのシェルです。
  • ユーザーがコマンドを入力すると、シェルがそのコマンドをOSに伝え、実行結果を返してくれます。

代表的なコマンドラインシェル

  • Bash(Bourne Again Shell): UnixやLinuxで広く使われている標準的なシェル。Linuxディストリビューションでデフォルトとして採用されることが多い。
  • Zsh: Bashの機能を拡張したシェルで、カスタマイズ性が高く、便利な補完機能やプラグインが豊富に用意されています。
  • sh(Bourne Shell): Bashの前身で、シンプルなコマンドを実行するシェル。
  • PowerShell: Microsoftが提供する、Windows向けのシェルであり、強力なスクリプト機能を持っています。Windows以外でも利用可能です。

コマンドラインシェルの主な機能

  • コマンド実行: システムの管理やファイル操作、プログラムの起動などをコマンドで実行。
  • スクリプトの実行: シェルスクリプトを使って、繰り返しのタスクを自動化できます(例えば、ファイルの定期的なバックアップなど)。
  • プロセス管理: 実行中のプログラムやプロセスの状態を監視・管理することができます。

グラフィカルシェル(Graphical Shell)

  • GUI(グラフィカルユーザーインターフェース)を提供するシェル。これは、ユーザーがマウスやタッチスクリーンを使ってウィンドウやアイコンを操作する環境のことです。
  • WindowsやmacOS、Linuxのデスクトップ環境がこのグラフィカルシェルにあたります。

代表的なグラフィカルシェル

  • Windows Explorer: Windows OSのデスクトップやファイルエクスプローラーを操作するためのグラフィカルシェル。
  • GNOME、KDE: Linuxディストリビューション向けのデスクトップ環境として使用されるグラフィカルシェル。

シェルの役割

  • インターフェースの提供: シェルは、ユーザーがコンピュータに指示を出すためのインターフェースを提供します。CLIではコマンド入力、GUIではアイコンやメニューを操作することで指示を出します。
  • コマンドの解釈: シェルはユーザーが入力したコマンドを解析し、そのコマンドをOSが理解できる形に変換して実行します。例えば、ls コマンドでディレクトリの内容を一覧表示したり、cp コマンドでファイルをコピーするように指示することができます。
  • スクリプトの実行: シェルスクリプトは、一連のコマンドを自動で実行するプログラムです。シェルはこれを解釈して、順番にコマンドを実行していきます。

SSHとシェルの関係

SSH(Secure Shell)は、リモートサーバーに安全に接続するためのプロトコルです。リモートのサーバーでシェル(通常はBashやZshなどのコマンドラインシェル)を操作できるようにします。SSHを使うことで、ネットワーク越しに他のコンピュータに接続し、そのシステム上でコマンドを実行することが可能です。

シェルは、ユーザーがOSにコマンドを入力してコンピュータを操作するためのインターフェースです。CLI形式のものが多く、これを使ってさまざまな操作や自動化が可能です。
SSHは、リモートシステムにアクセスしてシェルを操作するためのプロトコルであり、ネットワーク上のコンピュータを安全に操作する際に使われます。

シェルは、ユーザーとコンピュータをつなぐ非常に重要な役割を担っており、CLIは特にプログラミングやシステム管理において強力なツールとなっています。

レイヤー

OpenSSL、HTTPS、SSH、SFTPは、それぞれプロトコルや暗号ライブラリで、異なるレイヤーで動作しています。これらがどのレイヤーに属し、どのように関連しているかを理解するためには、OSI参照モデルやインターネットプロトコルスタック(TCP/IPモデル)を使って考えるのが便利です。

OSI参照モデルとは?

OSI参照モデルは、ネットワーク通信を7つのレイヤーに分けて考えるモデルです。それぞれのレイヤーは特定の役割を持ち、プロトコルや技術はどのレイヤーで動作するかが決まっています。

  1. 物理層(Physical Layer)
  2. データの電気信号や光信号の形での伝送(ハードウェアレベル)
  3. データリンク層(Data Link Layer)
  4. 隣接するネットワークデバイス間のデータ転送とエラー検出・修正(例: Ethernet)
  5. ネットワーク層(Network Layer)
  6. 異なるネットワーク間でのパケット転送、ルーティング(例: IP)
  7. トランスポート層(Transport Layer)
  8. エンドツーエンドのデータ転送の制御、データの信頼性確保(例: TCP、UDP)
  9. セッション層(Session Layer)
  10. 通信のセッション管理(例: データの送受信開始と終了)
  11. プレゼンテーション層(Presentation Layer)
  12. データ形式の変換や暗号化(例: SSL/TLS)
  13. アプリケーション層(Application Layer)
  14. ユーザーに最も近い部分。ネットワークアプリケーションやプロトコルが動作する層(例: HTTP、FTP、SSH)

OpenSSL

  • OpenSSL は、SSL/TLSプロトコルの実装を提供する暗号ライブラリです。直接的な「プロトコル」ではなく、SSL/TLSをサポートするためのツールです。
  • OSIモデルでのレイヤー: 主にプレゼンテーション層に位置しますが、TLS/SSLはアプリケーション層とトランスポート層の間にまたがる技術でもあるため、プレゼンテーション層とアプリケーション層の両方に関わるともいえます。

HTTPS

  • HTTPS は、HTTPにSSL/TLSを組み合わせたプロトコルで、ウェブブラウザとサーバー間での暗号化された通信を提供します。HTTPの上にSSL/TLSを使って通信内容を保護しています。
  • OSIモデルでのレイヤー: アプリケーション層に属します。ただし、HTTPSのセキュリティ機能であるSSL/TLS自体は、プレゼンテーション層またはトランスポート層に近い部分で動作します。

SSH

  • SSH(Secure Shell) は、リモートサーバーに安全にアクセスするためのプロトコルです。データの暗号化、認証、データ整合性の確保を行います。リモート操作やファイル転送に利用され、暗号化された通信チャネルを確立します。
  • OSIモデルでのレイヤー: アプリケーション層に属しますが、その通信は内部でセキュアな暗号化(プレゼンテーション層相当)が行われているため、複数のレイヤーにまたがる部分もあります。

SFTP

  • SFTP(SSH File Transfer Protocol) は、SSHの上で動作するファイル転送プロトコルです。通常のFTPとは異なり、SSHのセキュアなチャネルを使用して暗号化されたファイル転送を提供します。
  • OSIモデルでのレイヤー: アプリケーション層に属しますが、SFTPはSSHの上で動作するため、セキュアな通信チャネルも含めてセキュリティはSSHによって提供されます。

OSI参照モデルでの各技術の位置まとめ

技術名 プロトコル/ライブラリ OSIレイヤー
OpenSSL 暗号化ライブラリ プレゼンテーション層(6層)
HTTPS プロトコル(HTTP+SSL/TLS) アプリケーション層(7層)
SSH プロトコル アプリケーション層(7層)
SFTP プロトコル(SSH上) アプリケーション層(7層)

結びに

OpenSSL は、暗号化やSSL/TLSプロトコルを実装するためのライブラリで、厳密にはプロトコルではありません。

HTTPS、SSH、SFTP は、すべてアプリケーション層のプロトコルです。ただし、暗号化や通信の安全性を確保するために、SSL/TLSやSSHのような技術が使われており、これらはOSIモデルの異なる層にまたがって動作しています。

これらは「プロトコル」もしくは「暗号ライブラリ」と呼ばれ、セキュアな通信を提供する技術です。それぞれのレイヤーは異なる役割を担いながら、通信全体のセキュリティを保護しています。