[Ubuntu] OpenSSL(Heartbleed対応、JCMVP + IETF RFC 6460 Suite B対応)
「OpenSSL」暗号ライブラリに重大な脆弱性 - CNET Japan
という、春なのに(2014/04/08)凍りつく「Heartbleed(心臓出血)」のニュースがありました。
なので、対策します。
せっかくなので、楕円曲線暗号(ECDSA,ECC)を使ってRSAより軽量化&国家安全保障対応にします。
2014年4月15日 更新
OpenSSLについて
- 概要
- 「Heartbleed」への対策が必要なOpenSSL
- 0.9.8全て
- 1.0.0全て
- 1.0.1〜1.0.1f
- 1.0.1g(2014/04/07以前のソースで作成されたもの)
- 1.0.2-beta1
- OpenSSLのバージョン確認
OpenSSLは、インターネットでサーバ・クライアント間を暗号化する技術です。
「https://」や「ftps://」と付いたURLは、経路が暗号化されている事を示します。
$ openssl version
ユーザーの秘密が守られず、企業・団体の信用が落ちます。
ユーザーはこのリスクを回避出来ません。
企業・団体の秘密も守られない為、情報漏洩に繋がります。
VPN・IPsecなどの専用回線の秘匿性も完全ではなくなります。
Test your server for Heartbleed (CVE-2014-0160)
ここで、サーバの対応具合をチェック出来ます。
Heartbleed問題を個人で対応するには、 「パスワードの変更を自発的に行うこと」が有効です。 しかし「パスワードの変更要請」のメールがサービスからあった場合でも、 すぐにアクションする必要はありません。 「フィッシング詐欺」の可能性がありますので、メールの発信元をよく確認して下さい。 |
- (Heartbleed問題が修正された)OpenSSLで鍵ペアを作成する。
- 検証処理が遅いRSAでなく、楕円曲線暗号(EDCSA,ECC)を採用する。
- 日(JCMVP)米(IETF RFC 6460 Suite B)の安全保証レベルに対応する。
暗号化アルゴリズム : AES-128 鍵交換アルゴリズム : ECDH-256 デジタル署名アルゴリズム : ECDSA P-256 ハッシュ・アルゴリズム : SHA-256 |
暗号化アルゴリズム : AES-256 鍵交換アルゴリズム : ECDH-384 デジタル署名アルゴリズム : ECDSA P-384 ハッシュ・アルゴリズム : SHA-384 |
OpenSSL最新ソースのダウンロード&コンパイル&インストール
$ git clone git://git.openssl.org/openssl.git $ cd openssl $ ./config --prefix=/usr/local $ make depend $ make all $ make test $ sudo make installインストールが完了したら、バージョンが以下であることを確認して下さい。
$ openssl version OpenSSL 1.1.0-dev xx XXX xxxx
鍵ペアの作成
-
1.[通常版] 秘密鍵の作成
$ openssl ecparam -out private.key -name prime256v1 -genkey1.[強化版] 秘密鍵の作成
$ openssl ecparam -out private.key -name secp384r1 -genkey2.[通常版] 公開鍵(署名要求)の作成
$ openssl req -new -key private.key -out public.csr -sha256Country Nameは「JP」、
Common Nameはサーバ名&ドメイン(www.something.jpなど)を入力します。
他は適当です。
2.[強化版] 公開鍵(署名要求)の作成
$ openssl req -new -key private.key -out public.csr -sha384Country Nameは「JP」、
Common Nameはサーバ名&ドメイン(www.something.jpなど)を入力します。
他は適当です。
$ openssl ec -in private.key -text -noout
$ openssl req -in public.csr -text -noout
一般のサーバーでの作業は以上です。
署名要求ファイル、またはその内容を認証局(CA)に送付します。
その後、公開鍵(証明書)を受け取って、秘密鍵と公開鍵(証明書)とをサーバに設定します。
(専用線・暗号化商品CM)
- 業務向け商品(IPsec対応)
- 一般向け商品(VPN対応)
- 書籍
オレオレ認証局(CA)
安全な暗号化を実践するには、適切な認証局(CA)にて署名してもらうべきですが、
自分で野良認証局(通称「オレオレ認証局」)を設立して署名要求に署名する事も出来ます。
正規の署名では無い為、ブラウザで警告や×マーク等が出る事がありますが、暗号化は出来ます。
以下は、「オレオレ認証局」の設立方法です。
$ sudo vi /usr/local/ssl/openssl.cnf
[ CA_default ] #unique_subject = no # Set to 'no' to allow creation of ↓ unique_subject = no # Set to 'no' to allow creation of default_days = 365 # how long to certify for ↓ default_days = 36500 # how long to certify for [通常版] default_md = default # use public key default MD ↓ default_md = sha256 # use public key default MD [強化版] default_md = default # use public key default MD ↓ default_md = sha384 # use public key default MD [ req ] [通常版] default_bits = 1024 ↓ default_bits = 2048 default_md = sha256 [強化版] default_bits = 1024 ↓ default_bits = 2048 default_md = sha384 [ req_distinguished_name ] countryName_default = AU ↓ countryName_default = JP [ usr_cert ] #nsCertType = server ↓ nsCertType = server # keyUsage = nonRepudiation, digitalSignature, keyEncipherment ↓ keyUsage = digitalSignature, keyEncipherment [ v3_ca ] #basicConstraints = critical,CA:true ↓ basicConstraints = critical,CA:true basicConstraints = CA:true ↓ #basicConstraints = CA:true # keyUsage = cRLSign, keyCertSign ↓ keyUsage = cRLSign, keyCertSign, digitalSignature, keyAgreement, keyCertSign, keyEncipherment extendedKeyUsage = serverAuth, clientAuth #nsCertType = sslCA, emailCA ↓ nsCertType = sslCA, emailCA |
$ sudo vi /usr/local/ssl/misc/CA.pl
[通常版] system ("$REQ -new -keyout " . "${CATOP}/private/$CAKEY -out ${CATOP}/$CAREQ"); system ("$CA -create_serial " . ↓ system ("$openssl ecparam -out ${CATOP}/private/$CAKEY -name prime256v1 -genkey"); system ("$REQ -new -key ${CATOP}/private/$CAKEY -out ${CATOP}/$CAREQ -sha256"); system ("$CA -md sha256 -create_serial " . [強化版] sudo vi /usr/local/ssl/misc/CA.pl system ("$REQ -new -keyout " . "${CATOP}/private/$CAKEY -out ${CATOP}/$CAREQ"); system ("$CA -create_serial " . ↓ system ("$openssl ecparam -out ${CATOP}/private/$CAKEY -name secp384r1 -genkey"); system ("$REQ -new -key ${CATOP}/private/$CAKEY -out ${CATOP}/$CAREQ -sha384"); system ("$CA -md sha384 -create_serial " . |
$ /usr/local/ssl/misc/CA.pl -newca「CA certificate filename (or enter to create)」と出たらEnterキーを押す。
Country Nameは「JP」、
Common Nameは「MyCA」とでもしておく。
他は適当。
4.秘密鍵・公開鍵(署名要求)の作成
上記参照
5.[通常版] 公開鍵(X.509v3 証明書)の作成(署名)
$ openssl ca -md sha256 -policy policy_anything -out public.crt -infiles public.csr「Sign the certificate? [y/n]:」と出たら「y」を入力してEnterキーを押す。
「1 out of 1 certificate requests certified, commit? [y/n]」と出たら「y」を入力してEnterキーを押す。
5.[強化版] 公開鍵(X.509v3 証明書)の作成(署名)
$ openssl ca -md sha384 -policy policy_anything -out public.crt -infiles public.csr「Sign the certificate? [y/n]:」と出たら「y」を入力してEnterキーを押す。
「1 out of 1 certificate requests certified, commit? [y/n]」と出たら「y」を入力してEnterキーを押す。
$ openssl x509 -in public.crt -text -noout
$ cat demoCA/index.txt
$ openssl pkcs12 -export -in public.crt -inkey private.key -out server.pfxパスワードを2回入力する。
(柔め) SSLProtocol ALL SSLHonorCipherOrder on SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:RC4:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS (硬め) SSLProtocol -ALL +TLSv1.2 SSLHonorCipherOrder on SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4 |
(柔め) ssl_protocols ALL; ssl_prefer_server_ciphers on; ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256 ECDHE-ECDSA-AES256-GCM-SHA384 RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"; (硬め) ssl_protocols -ALL TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256 ECDHE-ECDSA-AES256-GCM-SHA384 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4"; |
$ chmod 600 private.key $ ssh-keygen -y -f private.key > sshpublic.key秘密鍵をクライアントにて ~/.ssh/id_rsa として設置。
参考
- OpenSSL: The Open Source toolkit for SSL/TLS
- Heartbleed Bug
- Compilation and Installation - OpenSSLWiki
- OpenSSL Command-Line HOWTO - nona.to fswiki
- 暗号モジュール試験及び認証制度 (JCMVP):IPA 独立行政法人 情報処理推進機構
- JIS X 19790:2009 セキュリティ技術−暗号モジュールのセキュリティ要求事項
- IBM Knowledge Center - アメリカ国家安全保障局 Suite B 暗号方式
- RFC 6460 - Suite B Profile for Transport Layer Security (TLS)
- FIPS 140 - Wikipedia
- ASCII.jp:小悪魔ブログもECC?シマンテックが新暗号アルゴリズム解説
- 自堕落な技術者の日記 : RSAとECDSA、署名生成と署名検証どっちが速い? - livedoor Blog(ブログ)
- チェック方法まとめ:OpenSSLの「Heartbleed」脆弱性は2年前から存在、「最悪のケースを想定して対処を」と専門家 - @IT
- Test your server for Heartbleed (CVE-2014-0160)