質問: OPenSSLについて、よくわからないのでご教授願えないでしょうか? OPenSSLというのは、SSL通信を行う為のアプリケーションで、下記URLからダウンロードして、ビルドして使うものの事を言うのでしょうか? https://www.openssl.org/source/ また、OpenSSLというのは、必ずビルドして使うものなのでしょうか? わざわざビルドさせるのは、様々なプラットフォームで対応させるためでしょうか? 正直、このビルドして使うタイプの配布方法は、ビルドがうまくいかないケースが多く、苦手なのですが、そのあたりはやっぱり慣れとかでしょうか?
回答: > > OPenSSLというのは、SSL通信を行う為のアプリケーションで、 > > > アプリケーションの定義によりますが、**正確には違います**。OpenSSLには「SSL通信を行う為のアプリケーション」が**含まれる**だけであって、それだけのソフトウェアではありません。OpenSSLはTLS/SSLを扱うための総合的なツールキットであり、その中には、 * TLS/SSLのためのライブラリ * TLS/SSLの利用を補助するためのツール(暗号鍵作成や証明書作成など) * TLS/SSL通信を行うツール(OpenSSLのみでTLS/SSLサーバーやクライアントとして使うなど) * 暗号化のためのライブラリ * 暗号化のためのツール(ファイルをAESで暗号化するなど) 等があります。 一般に**アプリケーション**と言った場合、アプリケーションソフトウェアを指すと思われます。具体的にコマンドやダブルクリックなどで実行し、なにからの処理をさせる物とここでは私は解釈しました。OpenSSL自身にもアプリケーションの機能はツールとして備わっていますが、SSL/TLSや暗号化のためのライブラリとしても使用可能です。ライブラリとして使用した場合は、OpenSSLが単独で実行されるアプリケーションとなるわけではなく、他のアプリケーションから利用される形になります。 また、SSL/TLSのみでは無く、暗号化技術全般のツール・ライブラリとしても使用できるようになっており、SSL/TLS通信を行う為**だけ**ではありません。場合によっては、暗号化の機能しか使用しない場合もあります。 > > 下記URLからダウンロードして、ビルドして使うものの事を言うのでしょうか? > > https://www.openssl.org/source/ > > また、OpenSSLというのは、必ずビルドして使うものなのでしょうか? > > > ほとんどの場合は**ビルドする必要はありません**。 OpenSSLは**大変有名な**ソフトウェアです。そのため、ほとんどのUNIX(macOS含む)/LinuxではOS標準またはパッケージとしてビルド済みのOpenSSLを各OSの開発者が用意しています。また、暗号化に関する機能についてはOpenSSLに依存する物が多く、ほとんどのUNIX/LinuxではOS標準で組み込み、または、デフォルトでパッケージがインストールされるようになっています。多くの場合は、OS側が用意するビルド済みOpenSSLを利用して問題ありません。インストール時に入っていなかったとしても、コマンド一つでパッケージとして入れることが可能です。 ただし、例外はあります。 一つはWindowsです。Windowsを制作しているMicrosoftはOpenSSLをWindowsに含めていません。また、製品レベルのビルド済みパッケージも用意していません。しかし、バイナリがまったく無いわけではありません。Windows向けOpenSSLバイナリは探せばたくさんあります(OpenSSLのWikiページにもいくつか紹介されています)。中には他のアプリケーションと一緒に含まれている物もあります。ただし、どれも非公式のため、ビルドした開発者をどう信頼するのかしか判断基準はありません。 もう一つは最新版を使いたい場合です。UNIX/Linux向けのパッケージの場合、通常、そのOSの開発中の最新バージョンが使われます。しかし、OSをリリースした後はOpenSSL自体のバージョンを上げることは滅多にありません。これは互換性を維持するためです。ただ、セキュリティーホールなどの重大なバグは個別にパッチをあててビルドし直した物をアップデートパッケージとして提供するため、着実にパッケージのアップデートを実施していれば、OpenSSLが古いバージョンであっても脆弱性があったままになるということはありません。しかし、最新版で追加された機能を使うため、どうしても最新版を入れたい場合は、やはり自分でビルドするしかありません。 > > わざわざビルドさせるのは、様々なプラットフォームで対応させるためでしょうか? > > > 公式ではソースのみ公開し、ユーザーにビルドさせるというのはUNIXの文化です。OSやCPUのアーキテクチャの違いを吸収させるには、ソースからビルドさせるしかありません。かといって、公式で全てのOSのビルド済みパッケージを用意するのは非現実的です。※ ※ 最近は、自分でビルドするという文化がないWindowsやmacOS、また、ライトなLinuxユーザーが多いUbuntu向けについては、ビルド済みのバイナリを用意するソフトウェアも多いです。 > > 正直、このビルドして使うタイプの配布方法は、ビルドがうまくいかないケースが多く、苦手なのですが、そのあたりはやっぱり慣れとかでしょうか? > > > 私の経験上、ビルドがうまく行かなかった原因の9割は**README等に書かれたビルド方法通りにやっていない(特に注意事項を実施していない)事**です。あとの1割はマイナーなOS(Linuxであればディストリビューション)を使っていて、その特有の現象にぶつかった場合です。マイナーなOSを使っていない限り、README等をきちんと読めば、問題にぶつかることはほとんど無いと思います。 また、OpenSSLのように誰でも使うような有名なソフトウェアについては、メジャーなOSの場合は**大抵バイナリが存在します**。ですので、自分でビルドする場合はかなり希だと思います。あえてマイナーなOSを使いたいというのであれば、全て自分でビルドすることが前提と思わなければ、使いこなすことがそもそも無理だと思います。