要約
OpenSSL(https://www.openssl.org/) を Ruby から扱うためのライブラリです。
このドキュメントでは SSL/TLS の一般的事項については解説をしません。利用者は、SSL/TLSの各概念、例えば以下の事項について理解している必要があります。
- 暗号と認証に関する一般的概念
- セキュリティに対する攻撃法
- 公開鍵暗号と秘密鍵暗号
- 署名の役割、署名の方法とその検証
- 公開鍵基盤(PKI, Public Key Infrastructure)
- X.509 証明書
- 暗号と乱数について
SSLのようなセキュリティ技術は、その利用者に無条件に安全性を提供することはできません。利用者、とくにSSLでソフトウェアを実装するプログラマは、 SSL/TLS の技術、それが基づいている概念を理解し、ライブラリを適切に利用する必要があります。
この文章の内容は無保証です。この文章は内容を検証して書かれていますが、間違っている可能性もあります。このライブラリをセキュリティ的に重大な用途に用いるのであれば、自分自身でこのドキュメントの内容を検証してください。
OpenSSL は SSL/TLS による通信を提供する高水準なインターフェースとより基本的な機能を提供する低水準なインターフェースがあります。基本的には高水準なインターフェースのみを利用すべきです。
低水準なインターフェースを利用する場合には、利用したい機能に関する十分な知識と注意深さが必要となります。
例
自己署名証明書の作成の例です。自分の秘密鍵で自分の公開鍵に署名しているから自己署名です。
require 'openssl' key = OpenSSL::PKey::RSA.new(1024) digest = OpenSSL::Digest::SHA1.new() issu = sub = OpenSSL::X509::Name.new() sub.add_entry('C', 'JP') sub.add_entry('ST', 'Shimane') sub.add_entry('CN', 'Ruby Taro') cer = OpenSSL::X509::Certificate.new() cer.not_before = Time.at(0) cer.not_after = Time.at(0) cer.public_key = key # <= 署名する対象となる公開鍵 cer.serial = 1 cer.issuer = issu cer.subject = sub cer.sign(key, digest) # <= 署名するのに使う秘密鍵とハッシュ関数 print cer.to_text
参考文献
- [RFC5246]
- Eric Rescorla. SSL and TLS : Designing and Building Secure Systems. 邦訳, Eric Rescorla 著 齋藤孝道・鬼頭利之・古森貞監訳. マスタリングTCP/IP SSL/TLS編
- John Viega, Matt Messier and Pravir Chandra. Network Security with OpenSSL: Cryptography for Secure Communications. 邦訳, John Viega, Matt Messier and Pravir Chandra 著 齋藤孝道監訳. OpenSSL -暗号・PKI・SSL/TLSライブラリの詳細-
クラス
OpenSSL::ASN1::ASN1Data | ASN.1 データ型を表すクラス。 |
OpenSSL::ASN1::Constructive | ASN.1 の構造型を表すクラスです。 |
OpenSSL::ASN1::Sequence | ASN.1 の Sequence 型(Universal タグのタグ番号16)を表すクラスです。 |
OpenSSL::ASN1::Set | ASN.1 の Set 型(Universal タグのタグ番号17)を表すクラスです。 |
OpenSSL::ASN1::Primitive | ASN.1 の単純型を表すクラスです。 |
OpenSSL::ASN1::BMPString | ASN.1 の BMPString 型(Universal タグのタグ番号30)を表すクラスです。 |
OpenSSL::ASN1::BitString | ASN.1 の Bit String 型(Universal タグのタグ番号3)を表すクラスです。 |
OpenSSL::ASN1::Boolean | ASN.1 の Boolean 型(Universal タグのタグ番号1)を表すクラスです。 |
OpenSSL::ASN1::Enumerated | ASN.1 の Enumerated 型(Universal タグのタグ番号10)を表すクラスです。 |
OpenSSL::ASN1::GeneralString | ASN.1 の GeneralString 型(Universal タグのタグ番号27)を表すクラスです。 |
OpenSSL::ASN1::GeneralizedTime | ASN.1 の GeneralizedTime 型(Universal タグのタグ番号23)を表すクラスです。 |
OpenSSL::ASN1::GraphicString | ASN.1 の GraphicString 型(Universal タグのタグ番号25)を表すクラスです。 |
OpenSSL::ASN1::IA5String | ASN.1 の IA5String 型(Universal タグのタグ番号22)を表すクラスです。 |
OpenSSL::ASN1::ISO64String | ASN.1 の ISO64String 型(Universal タグのタグ番号26)を表すクラスです。 |
OpenSSL::ASN1::Integer | ASN.1 の Integer 型(Universal タグのタグ番号2)を表すクラスです。 |
OpenSSL::ASN1::Null | ASN.1 の Null 型(Universal タグのタグ番号5)を表すクラスです。 |
OpenSSL::ASN1::NumericString | ASN.1 の NumericString 型(Universal タグのタグ番号18)を表すクラスです。 |
OpenSSL::ASN1::ObjectId | ASN.1 のオブジェクト識別子を表すクラス。 |
OpenSSL::ASN1::OctetString | ASN.1 の Octet String 型(Universal タグのタグ番号4)を表すクラスです。 |
OpenSSL::ASN1::PrintableString | ASN.1 の PrintableString 型(Universal タグのタグ番号19)を表すクラスです。 |
OpenSSL::ASN1::T61String | ASN.1 の T61String 型(Universal タグのタグ番号20)を表すクラスです。 |
OpenSSL::ASN1::UTCTime | ASN.1 の UTCTime 型(Universal タグのタグ番号23)を表すクラスです。 |
OpenSSL::ASN1::UTF8String | ASN.1 の UTF8String 型(Universal タグのタグ番号12)を表すクラスです。 |
OpenSSL::ASN1::UniversalString | ASN.1 の UniversalString 型(Universal タグのタグ番号28)を表すクラスです。 |
OpenSSL::ASN1::VideotexString | ASN.1 の VideotexString 型(Universal タグのタグ番号21)を表すクラスです。 |
OpenSSL::BN | OpenSSL内で利用される多倍長整数クラスです。 |
OpenSSL::Cipher | 共通鍵暗号のために抽象化されたインターフェースを提供するクラスです。 |
OpenSSL::Cipher::AES | AES 暗号を表すクラス |
OpenSSL::Cipher::AES128 | 鍵長 128 ビットの AES 暗号を表すクラス |
OpenSSL::Cipher::AES192 | 鍵長 192 ビットの AES 暗号を表すクラス |
OpenSSL::Cipher::AES256 | 鍵長 256 ビットの AES 暗号を表すクラス |
OpenSSL::Cipher::BF | BF(BlowFish)暗号を表すクラス |
OpenSSL::Cipher::CAST5 | CAST5 暗号を表すクラス |
OpenSSL::Cipher::Cipher | このクラスは互換性のために存在します。 |
OpenSSL::Cipher::DES | DES 暗号を表すクラス |
OpenSSL::Cipher::IDEA | IDEA 暗号を表すクラス |
OpenSSL::Cipher::RC2 | RC2 暗号を表すクラス |
OpenSSL::Cipher::RC4 | RC4 暗号を表すクラス |
OpenSSL::Cipher::RC5 | RC5 暗号を表すクラス |
OpenSSL::Config | OpenSSL の設定ファイルを表すクラスです。 |
OpenSSL::Engine | OpenSSL の Engine (プラグイン)を表すオブジェクトです。 |
OpenSSL::HMAC | HMAC を表すクラス。 |
OpenSSL::Netscape::SPKI | Netscape SPKI、もしくは SPKAC(Signed Public Key And Challenge) と呼ばれるデータフォーマットを扱うためのクラスです。 |
OpenSSL::OCSP::BasicResponse | OCSP の Basic OCSP Response を表すクラスです。 |
OpenSSL::OCSP::CertificateId | 失効状態を問い合わせたい個々の証明書を識別するためのクラスです。 |
OpenSSL::OCSP::Request | OCSP リクエストを表すクラスです。 |
OpenSSL::OCSP::Response | OCSP レスポンダからのレスポンスを表わすオブジェクトです。 |
OpenSSL::PKCS12 | PKCS#12 (秘密鍵、証明書、関連するCA証明書を1つのファイルに保存する形式) を表すクラスです。 |
OpenSSL::PKCS7 | PKCS #7 クラス |
OpenSSL::PKCS7::PKCS7 | このクラスは 1.8.6 以前との互換性のために存在します。 |
OpenSSL::PKCS7::RecipientInfo | PKCS7 の送信先を表すクラスです。 |
OpenSSL::PKCS7::Signer | Alias of OpenSSL::PKCS7::SignerInfo |
OpenSSL::PKCS7::SignerInfo | 署名者の情報を表すクラスです。 |
OpenSSL::PKey::EC::Group | 楕円曲線から定義される群を表すクラスです。 |
OpenSSL::PKey::EC::Point | 楕円曲線暗号の公開鍵となる曲線上の点を表します。 |
OpenSSL::PKey::PKey | 公開鍵暗号のための抽象クラスです。 |
OpenSSL::PKey::DH | Diffie-Hellman 鍵共有クラス |
OpenSSL::PKey::DSA | DSA 公開鍵暗号クラス |
OpenSSL::PKey::EC | EC(Ellicptic Curve,楕円曲線)暗号鍵のクラスです。 |
OpenSSL::PKey::RSA | RSA 暗号鍵のクラスです。 |
OpenSSL::SSL::SSLContext | SSL コンテキストクラス。 |
OpenSSL::SSL::SSLServer | SSL サーバーのためのクラス。 |
OpenSSL::SSL::SSLSocket | ソケットをラップして SSL での認証と暗号通信を実現するためのクラスです。 |
OpenSSL::SSL::Session | SSL/TLS セッションを表すクラスです。 |
OpenSSL::X509::Attribute | X.509 証明書署名要求の attribute を表すクラスです。 |
OpenSSL::X509::CRL | CRL(証明書失効リスト) クラス。 |
OpenSSL::X509::Certificate | X509 証明書クラス |
OpenSSL::X509::Extension | X.509 v3 証明書の拡張領域のためのクラスです。 |
OpenSSL::X509::ExtensionFactory | OpenSSL::X509::Extension を簡便に生成するためのクラスです。 |
OpenSSL::X509::Name | X.500の識別名(DN, Distinguished Name)を表わすクラス。 |
OpenSSL::X509::Request | X.509 の証明書署名要求(Certificate Signing Request, CSR)を表わすクラスです。 |
OpenSSL::X509::Revoked | 失効した証明書のクラス。 |
OpenSSL::X509::Store | 証明書ストアクラス。 |
OpenSSL::X509::StoreContext | 証明書ストアコンテキストクラス。 |
OpenSSL::Digest | ハッシュ関数のためのインターフェースを提供するクラスです。 |
OpenSSL::Digest::DSS | ハッシュ関数 DSS を表すクラス |
OpenSSL::Digest::DSS1 | ハッシュ関数 DSS1 を表すクラス |
OpenSSL::Digest::Digest | このクラスは互換性のために存在します。 |
OpenSSL::Digest::MD2 | ハッシュ関数 MD2 を表すクラス |
OpenSSL::Digest::MD4 | ハッシュ関数 MD4 を表すクラス |
OpenSSL::Digest::MD5 | ハッシュ関数 MD5 を表すクラス |
OpenSSL::Digest::MDC2 | ハッシュ関数 MDC2 を表すクラス |
OpenSSL::Digest::RIPEMD160 | ハッシュ関数 RIPEMD160 を表すクラス |
OpenSSL::Digest::SHA | ハッシュ関数 SHA を表すクラス |
OpenSSL::Digest::SHA1 | ハッシュ関数 SHA1 を表すクラス |
OpenSSL::Digest::SHA224 | ハッシュ関数 SHA224 を表すクラス |
OpenSSL::Digest::SHA256 | ハッシュ関数 SHA256 を表すクラス |
OpenSSL::Digest::SHA384 | ハッシュ関数 SHA384 を表すクラス |
OpenSSL::Digest::SHA512 | ハッシュ関数 SHA512 を表すクラス |
モジュール
OpenSSL | OpenSSL のすべてのクラス、モジュール、メソッド、定数を保持しているモジュールです。 |
OpenSSL::ASN1 | ASN.1(Abstract Syntax Notation One) のデータを取り扱うためのモジュールです。 |
OpenSSL::Buffering | OpenSSL::SSL::SSLSocket にバッファリング付きIO機能を提供するモジュールです。 |
OpenSSL::OCSP | OCSP(Online Certificate Status Protocol)を取り扱うためのモジュールです。OCSP は [RFC2560] で定義されています。 |
OpenSSL::PKCS5 | OpenSSL PKCS#5 関連の機能を集めたモジュール |
OpenSSL::PKey | 公開鍵暗号関連を集めたモジュールです。 |
OpenSSL::Random | OpenSSL が利用する擬似乱数生成器関連のモジュールです。 |
OpenSSL::SSL | |
OpenSSL::SSL::SocketForwarder | to_io で返されるソケットオブジェクトにメソッドをフォワードするモジュールです。 |
OpenSSL::X509 | OpenSSL の X509 証明書、CRL(証明書失効リスト)、 CSR(証明書署名要求)、証明書ストアなどに関するモジュールです。 |