
はじめに
インターネットでのやり取りが日常になった現在、「安全な通信」が当たり前となっています。その安全な通信の裏側では、複雑なセキュリティ技術が働いています。その中核を担うのが SSL/TLS という仕組みと、それを支える公開鍵暗号やデジタル証明書の技術です。そして、それらを手軽に扱えるツールとして登場するのがOpenSSL(オープンエスエスエル) です。
この記事では、「そもそも通信ってどうやって安全になるの?」「公開鍵って何?」「証明書って、どうやって本物ってわかるの?」という基本的な疑問に答えながら、OpenSSLを使うために必要な「土台の知識」を丁寧に解説していきます。「OpenSSLってよく聞くけど、何のことかよくわからない」という方も、この記事を読み終える頃にはその仕組みや役割がスッキリ見えてくるはずです。
OpenSSLの仕組みを理解するには
OpenSSLの役割を正しく理解するためには、「暗号」「証明書」「安全な通信」の3つの基本を押さえる必要があります。
OpenSSLは、SSL/TLSによる通信の暗号化や証明書の生成・管理を行うためのツールです。しかし、単に「コマンドを覚える」だけでは本当の理解にはつながりません。このツールが担っているのは、「第三者に盗聴されない安全な通信」と「相手が本物であることを確認する仕組み」を支える裏側の技術です。そのため、まずは公開鍵暗号やデジタル証明書、SSL/TLS通信の仕組みを知ることが、OpenSSLを効果的に使いこなす第一歩になります。
OpenSSLとは
OpenSSLは、安全な通信に必要な暗号化や証明書の操作を行うためのマルチツールです。
私たちが普段使っているWebサイトのログインやショッピングの際の個人情報送信なども、すべてこの「暗号技術」によって守られています。それを実現する最も広く使われているツールの一つがOpenSSLです。
OpenSSLは、誰でも無料で使えるオープンソースソフトウェアとして提供されており、サーバー管理者や開発者が安全な通信環境を構築・管理する際に使います。コマンドラインから操作できるシンプルな構造でありながら、実は非常に多機能で、世界中のさまざまなシステムに組み込まれている定番ツールです。具体的には、以下のような処理を担っています。
-
データの暗号化と復号化
送信した内容を読み取られないようにするための仕組みです。
-
公開鍵と秘密鍵の生成
安全な通信を実現するための公開鍵・秘密鍵ペアや共通鍵の作成を行います。
-
デジタル証明書の作成と管理
デジタル証明書の作成(自己署名証明書やCSRの生成)や管理を行います。
-
SSL/TLSプロトコルの実装を提供
SSL/TLSプロトコルの実装を提供し、Webサーバやメールサーバなどで安全な通信を実装を提供します。
たとえば、あるWebサイトが「https」で始まっているとき、その背後ではOpenSSLのようなツールが動いて、安全な通信を支えていることが多いです。エンジニアとしてWeb開発に携わる方にとっては、OpenSSLの基本操作や役割を知っておくことは、現代のインターネット技術を理解する上で非常に大切な知識になります。最初は難しく感じるかもしれませんが、OpenSSLの仕組みをひとつずつ理解していけば、通信の安全性がどのように守られているのかが見えてきます。
ではここからは、OpenSSLが担っている機能の土台となる技術について、それぞれ詳しく見ていきましょう。まずは、安全な通信を実現するための基本である「公開鍵暗号」の仕組みから解説していきます。
公開鍵暗号とは
公開鍵暗号とは、暗号化と復号に異なる2つの鍵を使用する暗号方式です。この2つの鍵は「公開鍵」と「秘密鍵」と呼ばれ、ペアで生成・管理されます。
公開鍵暗号の鍵の役割
-
公開鍵 (Public Key)
その名の通り、一般に公開しても安全な鍵です。主に、メッセージの暗号化や、デジタル署名の検証に使われ、誰でも入手可能です。例えば、Aさんに暗号化されたメッセージを送りたい人は、Aさんの公開鍵を使います。
-
秘密鍵 (Private Key)
鍵の所有者だけが厳重に保管し、絶対に他人に知られてはならない鍵です。主に、暗号化されたメッセージの復号や、デジタル署名の作成に使われます。秘密鍵を持っている本人しか、対応する公開鍵で暗号化されたメッセージを読んだり、有効なデジタル署名を作成したりできません。
これら2つの鍵は、数学的に深く関係しています。しかし、公開鍵から秘密鍵を導き出すことは、現在のコンピュータ技術でも極めて困難です。現実的な時間で解読不可能とされており、「事実上、逆算は不可能」と考えられています。このような片方向の性質(一方向性)こそが、公開鍵暗号の安全性を支える重要な要素となっています。
鍵の生成と公開鍵の配布
公開鍵と秘密鍵は、OpenSSLなどの暗号技術に対応したツールやソフトウェアを使って、ペアで生成します。
このとき、公開鍵は他人に渡しても安全な鍵として取り出され、秘密鍵は外部に漏れないように厳重に保管します。公開鍵は、相手に安全に届ける必要があります。主な配布方法としては、以下のような手段が用いられます。
- メールなどでファイルとして相手に送付
- 信頼できる第三者機関(認証局)を通じて証明付きで配布
いずれの方法においても、入手した公開鍵が本当に正しい相手のものであるかを確認することが重要です。そのための手段として、フィンガープリントの確認や信頼できる認証局による検証が利用されます。
補足:フィンガープリントとハッシュ値とは
フィンガープリントとは、公開鍵から生成された短い識別情報(ハッシュ値)のことで、その鍵の正当性を「指紋」のように確認するための目印として使われます。ハッシュ値は、元のデータからハッシュ関数で計算される固定長のデータです。ハッシュ値から元のデータを逆算することは極めて困難であり、ハッシュ化する前の内容が1文字でも変わると、まったく異なるハッシュ値になります。そのため、データの完全性(改ざんされていないこと)をチェックすることができます。
公開鍵暗号は何のために使う?主な2つの用途
公開鍵暗号は、「通信の暗号化」と「デジタル署名」の2つの目的で広く利用されています。
この技術により、第三者に見られずに安全にデータを送信したり、送信者の本人確認やデータの改ざんチェックを行ったりすることが可能になります。それぞれの用途について、仕組みと役割を見ていきましょう。
1. 通信の暗号化
公開鍵暗号を使えば、特定の相手だけが読めるようにデータを暗号化できます。
たとえば、BさんがAさんに秘密のデータを送りたい場合、BさんはAさんの公開鍵でデータを暗号化して送ります。暗号化されたデータを受け取ったAさんは、自分だけが持つ秘密鍵で復号します。この暗号文は、秘密鍵を持っているAさん本人しか復号できません。この仕組みにより、たとえ通信途中でデータを盗み見られたとしても、第三者には中身が解読できないようになっています。
2. デジタル署名
デジタル署名は、データの送信者が本人であること、送信したことの証明、そして改ざんされていないことの確認を同時に行う仕組みです。公開鍵暗号の「秘密鍵と公開鍵」の性質を応用して実現されています。
AさんがBさんに契約書を送るケースを例に、デジタル署名の流れを見てみましょう。
-
ハッシュ値の生成
Aさんは、契約書のデータからハッシュ関数(例:SHA-256)を使ってハッシュ値を計算します。
-
署名の生成
次に、Aさんは算出したハッシュ値をAさん自身の秘密鍵を使って署名(ハッシュ値を暗号化)します。この署名処理によって生成されたデータが「デジタル署名」となります。秘密鍵はAさんだけが厳重に管理しているため、この署名はこの秘密鍵の所有者であるAさんしか作成できません。
-
データの送信
Aさんは、契約書のデータとデジタル署名をセットにしてBさんへ送信します。
-
署名の検証とハッシュ値の取得
データを受け取ったBさんは、まずAさんの公開鍵を使って、送られてきたデジタル署名を検証(データの復号)します。この検証プロセスにより、署名が正当なものであれば、Aさんが署名した元のハッシュ値を取り出すことができます。
-
受信データのハッシュ値計算
同時に、Bさんは受け取った契約書のデータから、Aさんが使用したものと全く同じハッシュ関数を使ってハッシュ値を計算します。
-
ハッシュ値の比較
Bさんは、Aさんが署名したハッシュ値と、自分で計算したハッシュ値を比較します。
-
真正性の確認
2つのハッシュ値が完全に一致すれば、その契約書は改ざんされておらず、かつAさん本人が作成したものであると確認できます。
このように、デジタル署名では、送信者が自身の秘密鍵でデータに「署名」し、受信者が送信者の公開鍵でその署名を「検証」することで、送信者の同一性とデータの完全性を確実に確認でき、信頼性の高いデータのやり取りが実現できます。次のセクションでは、この仕組みをより信頼できるものにする「デジタル証明書」について解説します。
デジタル証明書とは
デジタル証明書とは、インターネット上で公開鍵の正当性を証明するための電子的な「身分証明書」です。この証明書は、信頼された第三者機関である認証局(CA:Certificate Authority)によって発行されます。
公開鍵暗号では、相手の公開鍵を使って安全に通信を行うことができますが、「その公開鍵が本当に相手本人のものなのか?」という問題が残ります。たとえば、あなたがAさんの公開鍵だと思って使った鍵が、実は悪意のある第三者が用意した偽物だった場合、暗号化された情報はその第三者に盗み見られてしまいます。
こうした「なりすまし」や「偽の鍵」を見抜くために利用されるのが、デジタル証明書です。認証局は、申請者の組織情報やドメインの所有権などを厳格に審査したうえで証明書を発行し、「この公開鍵は確かに〇〇のものです」と第三者の立場から保証します。これにより、その公開鍵が信頼できるものであるかどうかを、証明書を通じて確認できるようになります。
デジタル証明書は何を証明するのか
デジタル証明書には、次のような役割があります。
-
公開鍵の正当性と発行情報の明示
その公開鍵が記載された所有者(個人や組織)のものであることを証明し、併せて信頼できる発行認証局、有効期限、用途などを明示します。これにより、公開鍵の信頼性が高まります。
-
デジタル署名の信頼性強化
デジタル署名と組み合わせて利用されることで、署名者の公開鍵が本物であり、信頼できるものであることを保証します。これにより、署名自体の信頼性が格段に向上します。
-
なりすましやデータ改ざんの防止
信頼できる第三者機関(認証局)が発行することで、通信相手のなりすましや、やり取りされるデータの途中で行われる不正な改ざんといったセキュリティ上の脅威を防ぎます。
-
オンライン上の身元保証
インターネットのような顔の見えない環境において、ウェブサイト運営組織の実在性や、個人の身元を証明する手段として機能します。
デジタル証明書の主な構成要素
デジタル証明書には、主に以下のような情報が含まれています。
含まれる要素 | 説明 |
---|---|
公開鍵 | 証明される対象(ウェブサイト、個人など)の公開鍵 |
所有者情報 | 公開鍵の持ち主に関する情報(例:ドメイン名、組織名、氏名、メールアドレスなど) |
発行者情報 | 証明書を発行した認証局の情報 |
発行者のデジタル署名 | 認証局が自らの秘密鍵で行った署名。改ざんされていない証明として使用 |
有効期間 | 証明書の有効な期間(開始日と終了日) |
シリアル番号 | 証明書を一意に識別するための番号 |
用途 | 公開鍵が使われる目的(例:サーバー認証、クライアント認証、コード署名など) |
デジタル証明書から得られる効果
デジタル証明書があることで、ユーザーとWebサイトの間で行われる通信の安全性と信頼性が確保されます。
たとえば、ユーザーがWebサイト(例:エンベーダー)にアクセスすると、ブラウザは証明書の発行者(認証局)の公開鍵を使って、証明書に含まれる以下のような項目の正当性を検証します。
- 信頼された認証局による発行
- 有効期限内の証明書
- 改ざんのない証明書
これらをすべて満たしていれば、ブラウザは「この接続は保護されています」と表示し、安全な通信が開始されます。
また、デジタル証明書はWebサイトだけでなく、企業内システムの認証、ソフトウェアへのコード署名、メールの暗号化など、あらゆる場面で使われています。
デジタル証明書は、公開鍵が本当に信頼できる相手のものかを保証するための仕組みです。これにより、公開鍵暗号やデジタル署名といった技術が実用的かつ信頼性のある形で利用できるようになります。次のセクションでは、このデジタル証明書が実際の通信でどのように使われるのか、「SSL/TLS」について詳しく見ていきます。
SSL/TLSとは
SSL/TLSは、インターネット上で安全な通信を実現するための暗号化プロトコルです。
正式には、SSL(Secure Sockets Layer)とその後継であるTLS(Transport Layer Security)を総称しており、現在ではTLSが標準的に使われています。
たとえば、ログインフォームやオンラインショッピングなどで入力される個人情報などが、第三者に漏れないよう保護されているのは、このSSL/TLSのおかげです。
SSL/TLSは、単に通信内容を暗号化するだけでなく、「誰と通信しているのか」を確認するための認証機能や、「通信途中で内容が改ざんされていないか」を確かめる完全性の検証機能も備えています。これらの機能を実現するうえで欠かせないのが、通信の開始直後に行われる「SSL/TLSハンドシェイク」です。
SSL/TLSハンドシェイクについて
SSL/TLSハンドシェイクとは、安全な通信を始める前に、通信相手を認証し、暗号化に必要な共通鍵(セッション鍵)を安全に共有するための初期プロセスです。
たとえば、ユーザーがWebサイト(例:エンベーダー)にアクセスしたとき、裏側では以下のようなやり取りが自動で行われています。
-
クライアントから接続要求を送信(Client Hello)
クライアントは、サーバーにSSL/TLSによる接続をリクエストします。このとき、対応可能なTLSバージョンや利用可能な暗号スイート(暗号化アルゴリズムの組み合わせ)の候補も一緒に送ります。
-
サーバーから証明書を送信(Server Hello & Certificate)
サーバーは、TLSバージョンや暗号スイートとともに、認証局が発行したデジタル証明書を返します。この証明書には、サーバーの公開鍵やサーバーのドメイン情報、認証局の署名などが含まれます。
-
証明書の正当性を検証
クライアント(ブラウザ)は、証明書が信頼できる認証局によって発行されたものであるか、有効期限内か、改ざんされていないかを検証します。これにより、サーバーが正当なものであることを確認できます。
-
共通鍵(セッション鍵)の生成
クライアントとサーバーは、今後の通信で使う共通鍵を安全に生成します。TLS 1.3では、どちらか一方が鍵を作って送るのではなく、クライアントとサーバーがお互いに情報を出し合って、同じ共通鍵を一緒に作り出す方法(例:Diffie-Hellman法)が使われています。これにより、安全に共通鍵を生成できます。
-
暗号化通信の開始
共通鍵が生成された後、以降の通信はこの鍵を用いて通信が暗号化されます。これにより、通信内容が第三者に盗聴されたり改ざんされたりするリスクを防止できます。
SSL/TLSが安全とされる3つの理由
SSL/TLSが安全だとされるのは、「認証」「鍵の生成」「完全性の検証」という3つのセキュリティ機能が揃っているからです。
-
サーバーの正当性を確認(なりすまし防止)
クライアントは、サーバーが提示するデジタル証明書を検証し、信頼できる認証局によって発行されたものであるかどうかを確認します。これにより、偽のサーバーになりすまして通信を盗み見ようとする攻撃を防止できます。
-
共通鍵を安全に生成(盗聴防止)
クライアントとサーバーは、共通鍵(セッション鍵)を安全に生成します。TLS 1.3では、Server Helloの直後にクライアントとサーバーがそれぞれ一時的な鍵情報(鍵共有パラメータ)を送信し合い、Diffie-Hellman法などを用いて、共通鍵を導き出します。この方法により、第三者に内容を知られることなく、安全な鍵生成が可能になります。
-
通信の完全性を検証できる(改ざん防止)
SSL/TLSでは、暗号化に加えて通信内容が改ざんされていないかを検証する機能も含まれています。たとえ通信経路上でデータが書き換えられた場合でも、正当な通信でないとすぐに検出される仕組みになっています。
SSL/TLSハンドシェイクは、通信相手の正当性を確認し、安全に共通鍵(セッション鍵)を生成したうえで、盗聴や改ざんのリスクを排除する仕組みです。ブラウザが「鍵マーク」や「https」と表示するのは、このプロセスを経て信頼できる接続が確立された証なのです。
この仕組みがあることで、私たちはWebサイトで安心して個人情報を入力したり、クレジットカード決済を行ったりできるのです。
OpenSSLの理解への次のステップ
OpenSSLの本当の理解は、「仕組みを知る」だけでなく「実際に使ってみる」ことで深まります。
この記事では、OpenSSLを学ぶ前提として必要な3つの基礎知識である、公開鍵暗号、デジタル証明書、SSL/TLSについて、初心者にもわかりやすく段階的に解説してきました。仕組みのイメージがつかめてきた今こそ、実際にOpenSSLを使って秘密鍵や証明書を自分で作成してみることが、学習をさらに深める最適な方法です。
以下の記事では、OpenSSLのインストールから基本的なコマンドの使い方、証明書の作成手順までを初心者向けに丁寧に解説しています。ターミナル操作に不慣れな方でも、ステップバイステップで実践できる構成になっていますので、ぜひ挑戦してみてください。
OpenSSL実践ハンズオン!インストールから証明書作成まで徹底解説!
https://envader.plus/article/390
この記事で学んだこと
この記事では、OpenSSLを使いこなすための基礎知識として、以下の内容を学びました。
-
OpenSSLとは
OpenSSLは、安全な通信に必要な暗号化や証明書の操作を行うためのマルチツールです。
-
公開鍵暗号について
公開鍵暗号とは、暗号化と復号に異なる2つの鍵を使用する暗号方式です。この2つの鍵は「公開鍵」と「秘密鍵」と呼ばれ、ペアで生成・管理されます。
-
デジタル証明書とは
デジタル証明書とは、インターネット上で公開鍵の正当性を証明するための電子的な「身分証明書」です。
-
SSL/TLSの仕組み
SSL/TLSは、インターネット上で安全な通信を実現するための暗号化プロトコルです。その通信はSSL/TLSハンドシェイクによって構築されます。
これらの基礎知識は、OpenSSLを使いこなすうえで欠かせない土台となります。次は、実際に鍵や証明書を作成しながら、セキュアな通信の仕組みを体感してみてください。
参考資料
以下のリンクは、この記事で解説した手順や概念に関連する参考資料です。より詳しく学びたい方は、ぜひご覧ください。
-
OpenSSL - 公式
-
Wikipedia - OpenSSL
-
Wikipedia - 公開鍵暗号
-
ネットワークエンジニアとして - デジタル署名とは
-
ネットワークエンジニアとして - デジタル証明書の仕組み
-
Wikipedia - Transport Layer Security
-
ネットワークエンジニアとして - SSL/TLS
-
ネットワークエンジニアとして - SSL/TLSセッションのハンドシェイク
https://www.infraexpert.com/study/security28.html#google_vignette
【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。
「フリーランスエンジニア」
近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。
「成功する人とそうでない人の違いは何か?」
私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。
比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。
多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、
エンベーダー編集部
エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

関連記事

2024.03.07
【わかりやすい】TCP/IPモデルのしくみと役割を徹底解説
こちらの記事では、TCP/IPモデルの基本的な概念と構造を解説します。また、各階層の役割や機能についても詳しく説明します。
- ネットワーク

2024.08.25
TCP/IPモデルとOSI参照モデルの違いと実際の利用シーン
この記事では、これらのモデルを理解することで、ネットワークの基本的な仕組みを把握し、エンジニアとしてのスキルを向上させることを目指します。
- ネットワーク
- インフラエンジニア

2024.12.04
初学者向け!HTTP通信についてもっと深く知ろう
HTTP通信について、「なんとなく知っているけど、しっかり理解できていない」という方に向け、HTTP通信をはじめとするWebの仕組みを解説。
- ネットワーク

2023.02.18
【図解】MACアドレスの役割 MacOS, Windows11, iOSでの確認方法
今回はMACアドレスの役割や端末別の確認方法について初心者向けに分かりやすく解説を行います。
- ネットワーク