LoginSignup
12
12

More than 5 years have passed since last update.

【openssl】使いたくない暗号化方式を落として openssl をビルドする方法

Last updated at Posted at 2013-10-21

■1 About

openssl で使える暗号化スイートのうち
どーーーーしても使いたくない暗号化方式を落としてビルドする方法

openssl0.9.7e
With Fedora

備忘録です。

■2 何を落としたい?

★をつけた「EXP-RC4-MD5」っていう方法を使えなくしたいけど、
./Configure 時のオプションに no-rc4 は使いたくない場合
(RC4 が全部落ちちゃうのはちょっとね・・・)


 # openssl ciphers -v
(略)
DHE-RSA-AES256-SHA      SSLv3 Kx=DH       Au=RSA  Enc=AES(256)  Mac=SHA1
EXP-EDH-RSA-DES-CBC-SHA SSLv3 Kx=DH(512)  Au=RSA  Enc=DES(40)   Mac=SHA1 export
EXP-EDH-DSS-DES-CBC-SHA SSLv3 Kx=DH(512)  Au=DSS  Enc=DES(40)   Mac=SHA1 export
EXP-DES-CBC-SHA         SSLv3 Kx=RSA(512) Au=RSA  Enc=DES(40)   Mac=SHA1 export
EXP-RC2-CBC-MD5         SSLv3 Kx=RSA(512) Au=RSA  Enc=RC2(40)   Mac=MD5  export
EXP-RC2-CBC-MD5         SSLv2 Kx=RSA(512) Au=RSA  Enc=RC2(40)   Mac=MD5  export
EXP-RC4-MD5             SSLv3 Kx=RSA(512) Au=RSA  Enc=RC4(40)   Mac=MD5  export
★EXP-RC4-MD5             SSLv2 Kx=RSA(512) Au=RSA  Enc=RC4(40)   Mac=MD5  export

■3 探す


★EXP-RC4-MD5             SSLv2【←ここに注目】 Kx=RSA(512) Au=RSA  Enc=RC4(40)   Mac=MD5  export

SSLv2 なので


ssl/ssl2.h
ssl/s2_lib.c

を見ると

居た。


ssl/ssl2.h

 #define SSL2_TXT_RC4_128_WITH_MD5      "RC4-MD5"
★#define SSL2_TXT_RC4_128_EXPORT40_WITH_MD5   "EXP-RC4-MD5"
 #define SSL2_TXT_RC2_128_CBC_WITH_MD5      "RC2-CBC-MD5"
 #define SSL2_TXT_RC2_128_CBC_EXPORT40_WITH_MD5 "EXP-RC2-CBC-MD5"

■4 無効にする


ssl/s2_lib.c

/* RC4_128_EXPORT40_WITH_MD5 */
    {
-   1,
+   0,
    SSL2_TXT_RC4_128_EXPORT40_WITH_MD5,
    SSL2_CK_RC4_128_EXPORT40_WITH_MD5,
    SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_MD5|SSL_SSLV2,
    SSL_EXPORT|SSL_EXP40,
    SSL2_CF_5_BYTE_ENC,
    40,
    128,
    SSL_ALL_CIPHERS,
    SSL_ALL_STRENGTHS,
    },

■5 ビルドして確認する

ビルドは省略します。

1.サーバでCA証明書 mycert.pem ファイルを作成する
Country Code とか住所とか会社名とか聞かれますが、デタラメな値で良いです。(全部「US」って入れた)


 # openssl req -x509 -nodes -newkey rsa:1024 -keyout mycert.pem -out mycert.pem

2.試験用サーバを起動する


 # openssl s_server -cert mycert.pem -www &

3.クライアントで暗号化方式を指定して接続する


 # openssl s_client -cipher EXP-RC4-MD5 -connect 192.168.1.5:4433
CONNECTED(00000003)
3184:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:s23_clnt.c:473:

本来はこんな感じに SSLセッションを張れる


 # openssl s_client -cipher EXP-RC4-MD5 -connect 192.168.1.5:4433

(略)

New, TLSv1/SSLv3, Cipher is EXP-RC4-MD5
Server public key is 1024 bit
SSL-Session:
    Protocol  : TLSv1
    Cipher    : EXP-RC4-MD5
    Session-ID: 501B5EA2E156C135A025E491EA17FE46D1B75FC654ED27BFDC19985249010F0D
    Session-ID-ctx:
    Master-Key: 8313116FE70202C2ED435F731E811EBFA03F9AE17B6853ACAFA1D1C299F38DAA68CA5A1B4FCFFB7D59F78CF4CE8BF315
    Key-Arg   : None
    Start Time: 1382349941
    Timeout   : 300 (sec)
    V

■ 備考
・SSLv3 を使う暗号化スイートについて
SSLv3 の暗号化スイートは、それぞれ


 ssl/s3_lib.c
 ssl/ssl3.h

に居ます。


 ssl/tls1.h

も見ておくといいかも。(find して grep した方が早いか・・・)

・DSS 使うやつは DSA認証する openssl サーバを立てましょう。

これとか。


EXP-EDH-DSS-DES-CBC-SHA SSLv3 Kx=DH(512)  Au=DSS★  Enc=DES(40)   Mac=SHA1 export

1.openssl サーバを立てる(DSA(DSS)認証)
サーバ側の準備

DSA秘密鍵の生成


 # openssl dsaparam -out dsakey.pem -genkey 1024

DSA CA証明書を作成する
パスワードの入力を求められるため何か入れます


 # openssl req -x509 -newkey dsa:dsakey.pem  -keyout cacert.pem -out cacert.pem

DSA CA証明書を用いて openssl サーバを起動する
さきほど入力したパスワードを求められます
【!】パスワードが入力できなくなるためバックグラウンドで実行しないこと(コマンドの最後に & をつけてはいけない)


 # openssl s_server -cert cacert.pem -www

クライアント側は、DSSを使う暗号化方式を指定して接続するだけです


 # openssl s_client -cipher EXP-EDH-DSS-DES-CBC-SHA -connect 192.168.1.5:4433

・ssl2 ssl3 両方でサポートされている暗号化スイートについて
ssl2 ssl3 両方でサポートされている場合は
それぞれ s2_lib.c s3_lib.c 内で別々に定義されています。


EXP-RC2-CBC-MD5         SSLv3 Kx=RSA(512) Au=RSA  Enc=RC2(40)   Mac=MD5  export
EXP-RC2-CBC-MD5         SSLv2 Kx=RSA(512) Au=RSA  Enc=RC2(40)   Mac=MD5  export


(define されている名前は別・・・)

ssl/ssl2.h
#define SSL2_TXT_RC2_128_CBC_EXPORT40_WITH_MD5  "EXP-RC2-CBC-MD5"

ssl/ssl3.h
#define SSL3_TXT_RSA_RC2_40_MD5         "EXP-RC2-CBC-MD5"

確認するときに、クライアント側で SSLv2 または SSLv3 を指定しましょう。
指定しなければ SSLv3 になるはず。


 SSLv2 指定で繋げる

 # openssl s_client -ssl2 -cipher EXP-RC2-CBC-MD5 -connect 192.168.1.5:4433

※誤字、誤り等、気づいたことがあれば @docokano まで教えてください

12
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
12