hollyさんのwiki

機能が多いけど、なんだかんだと仕事でよく使うので別途まとめ。ちなみにおれおれ証明書とかでもいいんだけどhttp://www.cacert.orgで発行してもよい

apache-ssl設定

おれおれ証明書をapache*1に設定するまでの簡単な流れ

秘密鍵作成(KEY)

とりあえずぐぐったらどこなとhitするけどぱぱっとみたいので。
# ランダムシード作成
openssl md5 /var/log/* > rand.dat
# 秘密鍵作成
openssl genrsa -rand rand.dat -des3 -out key.pem 2048
上記コマンドを実行すると対話形式で処理が進む
3534 semi-random bytes loaded
Generating RSA private key, 1024 bit long modulus
..........................++++++
......++++++
e is 65537 (0x10001)
Enter pass phrase for key.pem: <- パスワード入力
Verifying - Enter pass phrase for key.pem: <- パスワード入力
と実行すると-outでしたファイル名で鍵が作られる。-des3以外にも指定できるけど、一般的には-des3なので、これを指定しておく。何も指定なしの場合はパスワード入力は聞かれない。key.pemの中身は
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,941596987D4F0857

7KC0DM/qkQH3CKpIOq80GXMQ3kStoMzsJ6eMjENyv5eq3Rd5V9NVGsZ/00UkzsbL
colS+XbC9Wb2a1IObM65ii9qsafVbJVpTcXNPIDP3yUAtsVXvjPnBxLNxuG3aORU
tLV5pPIHrnJihC2XwO58jFapyhEMcGXo88Uj0NrT16xSayK4JrKGGtL1Lz0iH7sV
B/mlCTrR1wNLrBqtPVUSQrrgyyIYcS2oqxYUCFTdCj9mXa7dmttMA6XuKgpicdrK
9RadR7/XxRKZxrbMZvnp8YrR3g4HrrLZAWfd/lq+07Wn3M/yt+vvl+hNtBnkNHa3
RsAG22M/JJj43UW85pNu2OA5DQ5PI88RRPGi6RfE/QKFuzIah6ilbxJfPJ5PBsKQ
dWxLFpSt7+jz2SqEV3pR29484JpmughVyVEzgVXDZUpDbUjyh7aGqTuj9NCCI8gw
Xsz+2BwPGC0/MBV8RYQoLcOEVxSyJ/CN2zGUAcloG8G2ImNcJEpBpxahlNXvalh8
x3adNNMHVW96xH6Xw7/uPa4rVfqLm7629ut8AooEKMA6Qa3Mcpd60ovIRn/5PCN6
DpQU/dVHf/tHYhPnIa4BQRC4tRvO4C50PxlHYQL1JupW/DCjJ3NfSXqvFdpvO+rw
ju1B1X6MT4luox10VQRfn+yYT/dh8t3OlAjkRbjUOQFMQEIjMq7WjqjfxSEluFoq
RiPZlPy6/uUHtzQOjCppDsDQ88zKlQvIaaaWVfg9OpklKYlTaTDdCX+oT2DlbUMV
e/ry0TDWw4yqZdPo69DcJWMGcInHnB4ow7ZNPxI4TrLiG/enFbzDWg==
-----END RSA PRIVATE KEY-----
のようになる
秘密鍵のパスワードを抜く
セキュリティ的にはあまりよくないが、apacheの起動とかでパスワードきかれるはめになるので。
# はじめにとりあえずコピー
cp -p key.pem key.pem.org
# そのうえで鍵を抜く
openssl rsa -in key.pem.org -out key.pem
Enter pass phrase for key.pem: <- 秘密鍵作成時パスワード入力
writing RSA key
と実行するとkey.pemからパスワードがなくなる。catとかで確認すること

証明書要求(CSR)

認証局(verisignとかcybertrustとか)に証明書を発行してもらうための証明書要求(CSR)を作成する。
openssl req -new -key key.pem -out csr.pem
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:JP
State or Province Name (full name) [Berkshire]:Osaka
Locality Name (eg, city) [Newbury]:Osaka-shi
Organization Name (eg, company) [My Company Ltd]:holly Ltd
Organizational Unit Name (eg, section) []:holly
Common Name (eg, your name or your server's hostname) []:common_name
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
入力なしでやりたい場合は-subjオプションをつけて入力する情報を指定すればよい
openssl req -new -key key.pem -subj '/C=JP/ST=Osaka/L=Osaka-shi/O=holly Ltd/OU=holly/CN=common_name' -out csr.pem
Common Nameは設定するサーバ名にあわせておくこと。その他はおれおれ証明書を作るときなら問題ないけど、ちゃんとした申請をする場合は正規データを入力する。入力するとcsr.pemが生成される。

CSR作成と同時に秘密鍵を作成する方法もあり。
openssl req -new -text -out csr.pem -keyout key.pem
作成したcsr.pemは↓みたいになる
-----BEGIN CERTIFICATE REQUEST-----
MIIBqzCCARQCAQAwazELMAkGA1UEBhMCSlAxDjAMBgNVBAgTBU9zYWthMRIwEAYD
VQQHEwlPc2FrYS1zaGkxEjAQBgNVBAoTCWhvbGx5IEx0ZDEOMAwGA1UECxMFaG9s
bHkxFDASBgNVBAMMC2NvbW1vbl9uYW1lMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
iQKBgQDr8CvoKKK5IjqqFQ/ub0hLGdIIwoA53FphED4FzpokF94LBz5w4YA6P6Uf
OJ0/Jt0oDnYlKiwA0j6PgW2srk+BCKLxOiC4rr/RaXrqGxO5zpoB6Sf5AJMzqK2O
Yyb8J3HbIWoc789m+/aw0GSp9p3o1G1+jrD2DTEUFNtjmBKSHQIDAQABoAAwDQYJ
KoZIhvcNAQEFBQADgYEA6LHx6GpeyJcb+pzfLD9rs6jJMjBSzI4sNmv5Ax6waJmc
4nVD/J1eFRrF9VyyKx0Ij7hgdp6aTDq0CklUDFT3+UPf8SRlwDl4g5Bc5bEuWJrH
lLcdsoTBcNxFWY8nAM5nePiTNXCq1TmeNo3+F9vUP55rgo/XqeC9MK0WhIZGSho=
-----END CERTIFICATE REQUEST-----
ほんとならこれを認証局に送って(普通はフォームに貼り付ける形式が多い)、審査が終われば(あるんかね?)証明書(CRT)が送られる。

証明書(CRT)

今回はおれおれなので、自分自身で証明する(これがおれおれといわれる所以)
# 作成したCSRを使っておれおれ証明書を作る
openssl x509 -in csr.pem -out crt.pem -req -signkey key.pem -days 365
Signature ok
subject=/C=JP/ST=Osaka/L=Osaka-shi/O=holly Ltd/OU=holly/CN=common_name
Getting Private key
これで証明書作成は完了。秘密鍵からいきなり証明書要求なしでCRTを作るには
openssl req -new -key key.pem -x509 -days 365 -out crt.pem
のようにする。この場合はCSR作成時と同じく、各種情報入力が必要になる

正しいkey pairか確認

おれおれ証明書の場合は間違うわけがないけど、一応確認しておくこと。
公開鍵
  • public key
KEY
openssl rsa -in key.pem -pubout
CRT
openssl x509 -in crt.pem -pubkey -noout
BEGIN PUBLIC KEY - END PUBLIC KEYの間が同じことを確認
  • modulus

KEY
openssl rsa -in key.pem -modulus -noout
CRT
openssl x509 -in crt.pem -modulus -noout
結果が同じか確認。長くて見にくい場合は
openssl rsa -in key.pem -modulus -noout | md5sum
openssl x509 -in crt.pem -modulus -noout | md5sum
とかすると見やすい

CRT情報表示

作成されたX509証明書のテキスト表示
# とりあえず全部ごっそり表示
openssl x509 -in crt.pem -text
Certificate:
    Data:
        Version: 1 (0x0)
        Serial Number:
            cc:d0:ec:a6:7c:00:7f:6e
        Signature Algorithm: sha1WithRSAEncryption
        Issuer: C=JP, ST=Osaka, L=Osaka-shi, O=holly Ltd, OU=holly, CN=common_name
        Validity
            Not Before: Dec  6 08:02:14 2008 GMT
            Not After : Dec  6 08:02:14 2009 GMT
        Subject: C=JP, ST=Osaka, L=Osaka-shi, O=holly Ltd, OU=holly, CN=common_name
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (1024 bit)
                Modulus (1024 bit):
                    00:a4:0e:10:7d:f6:cb:69:db:46:8a:01:b1:4f:84:
                    d8:bb:75:6e:08:b1:ad:3c:e9:48:fe:a0:1b:1c:a8:
                    45:21:ae:32:fa:48:7f:66:19:49:34:b2:cd:ea:10:
                    9b:7b:64:a0:56:96:2e:b6:5d:53:c7:dc:79:6b:8c:
                    e3:e0:77:e9:41:4c:0d:1d:4a:99:68:43:1f:e8:c0:
                    bb:68:ac:56:8d:26:0a:71:c3:10:89:db:68:63:3a:
                    c8:5f:b6:df:a5:a1:3c:86:3b:6b:ba:2c:a2:4b:45:
                    3b:b0:d2:8f:2c:fc:c8:7a:a2:5d:fb:7b:a7:00:5f:
                    25:4f:25:60:f3:25:2d:76:b3
                Exponent: 65537 (0x10001)
    Signature Algorithm: sha1WithRSAEncryption
        46:cb:9d:42:04:b8:f2:51:13:36:4d:32:88:59:28:62:b4:14:
        24:3c:c2:0a:4c:4f:e9:e6:23:ac:b1:ef:80:0e:90:e9:7a:7b:
        88:aa:d0:d1:0e:ac:d5:af:fc:b9:28:76:76:d3:0e:0f:83:8e:
        85:6f:58:90:67:73:b7:5e:2f:83:c5:09:58:9f:df:67:11:18:
        7a:6e:fa:ad:51:43:f6:c1:e1:d1:21:4b:5d:80:32:81:65:ff:
        e8:fa:67:a2:bf:22:c1:74:78:06:2f:48:14:d3:c1:52:a4:56:
        24:b7:3c:8d:df:16:43:66:99:db:74:8e:f3:26:fb:c7:a9:19:
        54:27
-----BEGIN CERTIFICATE-----
MIICbzCCAdgCCQDM0OymfAB/bjANBgkqhkiG9w0BAQUFADB8MQswCQYDVQQGEwJK
UDEOMAwGA1UECBMFT3Nha2ExEjAQBgNVBAcTCU9zYWthLXNoaTESMBAGA1UEChMJ
aG9sbHkgTHRkMQ4wDAYDVQQLEwVob2xseTElMCMGA1UEAxMcZmVkb3JhOC5lbmRs
ZXNzLW5hbWVsZXNzLnh4eDAeFw0wODEyMDYwODAyMTRaFw0wOTEyMDYwODAyMTRa
MHwxCzAJBgNVBAYTAkpQMQ4wDAYDVQQIEwVPc2FrYTESMBAGA1UEBxMJT3Nha2Et
c2hpMRIwEAYDVQQKEwlob2xseSBMdGQxDjAMBgNVBAsTBWhvbGx5MSUwIwYDVQQD
ExxmZWRvcmE4LmVuZGxlc3MtbmFtZWxlc3MueHh4MIGfMA0GCSqGSIb3DQEBAQUA
A4GNADCBiQKBgQCkDhB99stp20aKAbFPhNi7dW4Isa086Uj+oBscqEUhrjL6SH9m
GUk0ss3qEJt7ZKBWli62XVPH3HlrjOPgd+lBTA0dSploQx/owLtorFaNJgpxwxCJ
22hjOshftt+loTyGO2u6LKJLRTuw0o8s/Mh6ol37e6cAXyVPJWDzJS12swIDAQAB
MA0GCSqGSIb3DQEBBQUAA4GBAEbLnUIEuPJREzZNMohZKGK0FCQ8wgpMT+nmI6yx
74AOkOl6e4iq0NEOrNWv/LkodnbTDg+DjoVvWJBnc7deL4PFCVif32cRGHpu+q1R
Q/bB4dEhS12AMoFl/+j6Z6K/IsF0eAYvSBTTwVKkViS3PI3fFkNmmdt0jvMm+8ep
GVQn
-----END CERTIFICATE-----
serial
openssl x509 -in crt.pem -serial -noout 
issuer(発行者情報)
openssl x509 -in crt.pem -issuer -noout
CSR情報
openssl x509 -in crt.pem -subject -noout
証明書開始日時
openssl x509 -in crt.pem -startdate -noout
証明書有効期限
openssl x509 -in crt.pem -enddate -noout

apacheの設定

/etc/httpd/conf.d/ssl.confのSSLCertificateKeyFile、SSLCertificateFileという項目があるので、それぞれKEY, CRTのパスを指定する。で再起動
/etc/rc.d/init.d/httpd restart
今回はapacheの設定だけ書いたけど、このkey pairはdovecot, postfixなどの他のアプリでも流用できる。

PEM<->DER変換

openssl x509 -inform PEM -outform -in crt.pem -out crt.der
反対も可能

RH系の場合

おれおれ証明書の作成をもう少しだけ簡単にできる。
cd /etc/pki/tls/certs
make server.key
make server.crt
途中でいろいろ聞かれるが上記手順がわかるなら問題ないので省略

データの暗号化

本来はおれおれ証明書なんかよりもこっちがメインなのかも

共通鍵暗号方式

要は暗号、複合は同じ鍵(パスワード)で行う。暗号化方式はいろいろあって迷う。
openssl enc -h
と実行すると
unknown option '-h'
options are
-in <file>     input file
-out <file>    output file
-pass <arg>    pass phrase source
-e             encrypt
-d             decrypt
-a/-base64     base64 encode/decode, depending on encryption flag
-k             passphrase is the next argument
-kfile         passphrase is the first line of the file argument
-md            the next argument is the md to use to create a key
                 from a passphrase.  One of md2, md5, sha or sha1
-K/-iv         key/iv in hex is the next argument
-[pP]          print the iv/key (then exit if -P)
-bufsize <n>   buffer size
-engine e      use engine e, possibly a hardware device.
Cipher Types
-aes-128-cbc               -aes-128-cfb               -aes-128-cfb1
-aes-128-cfb8              -aes-128-ecb               -aes-128-ofb
-aes-192-cbc               -aes-192-cfb               -aes-192-cfb1
-aes-192-cfb8              -aes-192-ecb               -aes-192-ofb
-aes-256-cbc               -aes-256-cfb               -aes-256-cfb1
-aes-256-cfb8              -aes-256-ecb               -aes-256-ofb
-aes128                    -aes192                    -aes256
-bf                        -bf-cbc                    -bf-cfb
-bf-ecb                    -bf-ofb                    -blowfish
-cast                      -cast-cbc                  -cast5-cbc
-cast5-cfb                 -cast5-ecb                 -cast5-ofb
-des                       -des-cbc                   -des-cfb
-des-cfb1                  -des-cfb8                  -des-ecb
-des-ede                   -des-ede-cbc               -des-ede-cfb
-des-ede-ofb               -des-ede3                  -des-ede3-cbc
-des-ede3-cfb              -des-ede3-ofb              -des-ofb
-des3                      -desx                      -desx-cbc
-rc2                       -rc2-40-cbc                -rc2-64-cbc
-rc2-cbc                   -rc2-cfb                   -rc2-ecb
-rc2-ofb                   -rc4                       -rc4-40
とずらずらでてくるので*3、とりあえず-aes-256-cbcを選んでみる
openssl enc -aes-256-cbc -e -in hogehoge.txt -out hogehoge.txt.priv
enter aes-256-cbc encryption password: <- パスワード入力
Verifying - enter aes-256-cbc encryption password: <- パスワード入力
これでhogehoge.txt.privに暗号化されたファイルとなる。復元時は
openssl enc -aes-256-cbc -d -in hogehoge.txt.priv -out hogehoge.txt
enter aes-256-cbc encryption password: <- パスワード入力

公開鍵暗号方式

パスワード暗号化は公開鍵で(誰でも)、複号化は秘密鍵で行う(限られた人のみ)。共通鍵暗号方式は暗号化/復号化両方とも限られた人のみ。
秘密鍵、公開鍵の作成方法はapache-ssl設定参照

公開鍵を使って暗号化
openssl rsautl -encrypt -pubin -inkey pubkey.pem -in hogehoge.txt -out hogehoge.txt.priv
hogehoge.txt.privを複号化する時は秘密鍵を使う
openssl rsautl -decrypt -inkey key.pem -in hogehoge.txt.priv
パスワードを聞かれるので、key.pem作成時のパスワードを入力すれば複号化完了。

署名

署名作成
openssl dgst -md5 -sign key.pem -out hogehoge.sig hogehoge.txt 
hogehoge.txtは、hogehoge.sigの署名元ファイルと同一か確認
openssl dgst -md5 -verify pubkey.pem -signature hogehoge.sig hogehoge.txt
Verified OK

パスワード生成

よくつかいそうなのを。-saltで暗号化に使うsaltを指定することも可能。パスワード化したい文字列を指定しない場合は対話形式になる

crypt encryption

# ex: vuXa.Yn/i/FPg
openssl passwd hogehoge
echo -n hogehoge | openssl passwd -stdin

md5 crypt encryption

# ex: $1$0TMIVCoS$9ULHArttQoD8f2N3u3r2a1
openssl passwd -1 hogehoge
echo -n hogehoge | openssl passwd -1 -stdin

apache md5 crypt encryption

http://httpd.apache.org/docs/2.2/misc/password_enc...をみて知ったがopensslで出来るようだ
# ex: $apr1$NvXEOMET$Znj9IS/D5YCeoVzI1bW.z1
openssl passwd -apr1 hogehoge
echo -n hogehoge | openssl passwd -apr1 -stdin

base64

hogehoge.txtの中身をbase64 encodeしてhogehoge_base64.txtに書き出す
openssl enc -base64 -e -in hogehoge.txt -out hogehoge.txt
hogehoge_base64.txtをもとの状態に戻す
openssl enc -base64 -d -in hogehoge_base64.txt -out hogehoge_decode.txt

ハッシュ値

md5sum

openssl dgst -md5 hogehoge.txt
MD5(hogehoge.txt)= b47fde291a7ff0d6edc9151f3af2ce2d

sha1sum

openssl dgst -sha1 hogehoge.txt
SHA1(hogehoge.txt)= c0869b72c5606d22d92a6ac986686bb87485a25b
ともにmd5sum, sha1sumコマンドの結果とおなじになる

/etc/pki/tls/certs

CentOSの場合だとこんなディレクトリがあって、この中にMakefileが存在する

make

This makefile allows you to create:
  o public/private key pairs
  o SSL certificate signing requests (CSRs)
  o self-signed SSL test certificates

To create a key pair, run "make SOMETHING.key".
To create a CSR, run "make SOMETHING.csr".
To create a test certificate, run "make SOMETHING.crt".
To create a key and a test certificate in one file, run "make SOMETHING.pem".

To create a key for use with Apache, run "make genkey".
To create a CSR for use with Apache, run "make certreq".
To create a test certificate for use with Apache, run "make testcert".

To create a test certificate with serial number other than zero, add SERIAL=num

Examples:
  make server.key
  make server.csr
  make server.crt
  make stunnel.pem
  make genkey
  make certreq
  make testcert
  make server.crt SERIAL=1
  make stunnel.pem SERIAL=2
  make testcert SERIAL=3
いろいろ使える
秘密鍵とおれおれ証明書のキーペア作成
拡張子.pemでファイルを指定するとキーペアを作成できるようなので
make /path/to/hoge.pem
umask 77 ; \
        PEM1=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
        PEM2=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
        /usr/bin/openssl req -utf8 -newkey rsa:1024 -keyout $PEM1 -nodes -x509 -days 365 -out $PEM2 -set_serial 0 ; \
        cat $PEM1 >  /path/to/hoge.pem ; \
        echo ""    >> /path/to/hoge.pem ; \
        cat $PEM2 >> /path/to/hoge.pem ; \
        rm -f $PEM1 $PEM2
Generating a 1024 bit RSA private key
.....++++++
.........................++++++
writing new private key to '/tmp/openssl.eo2560'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:JP(国別コード)
State or Province Name (full name) [Berkshire]:Osaka(都道府県)
Locality Name (eg, city) [Newbury]:Osaka-shi(市町村)
Organization Name (eg, company) [My Company Ltd]:secret company Ltd(会社名)
Organizational Unit Name (eg, section) []:(部署名)
Common Name (eg, your name or your server's hostname) []:perl.dev-nat.priv(common name)
Email Address []:(空でいい)
とすると
-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQDUgvmU1juC/0A45SPFr9IePEljJtcTbC9VrsNGDctzaiuytJse
JJa4NrD4fLiAz4MLTzqRM/pH8eL18ujCDMk6Cj03+qB5voG+hjAoneqTaumTmGqR
OLF4vxq4/9QTOQkkIvGnBVftlTqSdjUqd01bfqPGwi/lg2znh/j9iIDxKQIDAQAB
AoGBALrSAbN0upCo8L6TwmTx8lgeS63c4Urz2pEKuCSH0AnAlnXeDFftdoqvmdh5
XIHw65Uvq58nAKnq3cm2KCUftG21pIU932WDPbJIe4uVbw7FDzeKPMjBn95coI+l
Y8Xv3fDvg8ZBNd1n0Z8ZDABqmtV3sBecYEEO5XDLRDspR7CZAkEA6gw0XLW02H+v
9Y7LF5Dayz/Od7uKthg+hSw4tXKf4A58qM9VyGjixO7puTowWYy8vz3WNw3QdUoT
k2O4WjJJlwJBAOhxqUE+UOWsgaf8RHN0VgZgQ+Y3ah6jSYt44AuW8Vqmfkodq6yD
1sGwqWAFMvrN4z6GWkaU3aHpR2QQAwe+cz8CQFiXbA6XvS+iDZHOjjOKYjdDHL0X
oSbSQIAaQBD2pWujMC6Z5KeqhAP1R0UUsI6FBkEBgB9wvDJZatWEjpidplsCQQCo
sOROzzTSmhE2oqPizkkoM3DTgN/pAEP9jmm6v37FdRMuIr5WYw/WXaluYBeRYR5M
YCDgHGWEfdIr0lsAobztAkEAwFTt2mlsKabBYslfhTqMYbEcGPWTbOFtA6YaCPOe
g3WYIsoKxSy492c9uu3YRPNxaG3RY4kAuE0mUHG/J1Ma2A==
-----END RSA PRIVATE KEY-----

-----BEGIN CERTIFICATE-----
MIIDEjCCAnugAwIBAgIBADANBgkqhkiG9w0BAQUFADBqMQswCQYDVQQGEwJKUDEO
MAwGA1UECBMFT3Nha2ExEjAQBgNVBAcTCU9zYWthLXNoaTEbMBkGA1UEChMSc2Vj
cmV0IGNvbXBhbnkgTHRkMRowGAYDVQQDExFwZXJsLmRldi1uYXQucHJpdjAeFw0x
MDA0MTMxNDI3MDFaFw0xMTA0MTMxNDI3MDFaMGoxCzAJBgNVBAYTAkpQMQ4wDAYD
VQQIEwVPc2FrYTESMBAGA1UEBxMJT3Nha2Etc2hpMRswGQYDVQQKExJzZWNyZXQg
Y29tcGFueSBMdGQxGjAYBgNVBAMTEXBlcmwuZGV2LW5hdC5wcml2MIGfMA0GCSqG
SIb3DQEBAQUAA4GNADCBiQKBgQDUgvmU1juC/0A45SPFr9IePEljJtcTbC9VrsNG
DctzaiuytJseJJa4NrD4fLiAz4MLTzqRM/pH8eL18ujCDMk6Cj03+qB5voG+hjAo
neqTaumTmGqROLF4vxq4/9QTOQkkIvGnBVftlTqSdjUqd01bfqPGwi/lg2znh/j9
iIDxKQIDAQABo4HHMIHEMB0GA1UdDgQWBBTAAaszxheAKQIwdF5tJ/G4GUZZxTCB
lAYDVR0jBIGMMIGJgBTAAaszxheAKQIwdF5tJ/G4GUZZxaFupGwwajELMAkGA1UE
BhMCSlAxDjAMBgNVBAgTBU9zYWthMRIwEAYDVQQHEwlPc2FrYS1zaGkxGzAZBgNV
BAoTEnNlY3JldCBjb21wYW55IEx0ZDEaMBgGA1UEAxMRcGVybC5kZXYtbmF0LnBy
aXaCAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQAL6DtVyAiFWtIv
gHIAERqvtBRJPBlrlYmMkabuKSis44PLJUuW6GiHlC3uCdYd7tJq2F9vXlOohc8Z
hGMPlJwoyONoINCBGVGkjX5tptFzYWR6nLmTIhY0wFEGrlkgBVxR5mbK8NyJP4Yd
1WUZKoW99sr/L+LHaPsEAXbx9EgVhA==
-----END CERTIFICATE-----
連結したファイルが作成される

cipher

仕事でちょっと調べたことがあったので

自分の環境で使用できる暗号スイート一覧

openssl ciphers -v
DHE-RSA-AES256-SHA      SSLv3 Kx=DH       Au=RSA  Enc=AES(256)  Mac=SHA1
DHE-DSS-AES256-SHA      SSLv3 Kx=DH       Au=DSS  Enc=AES(256)  Mac=SHA1
AES256-SHA              SSLv3 Kx=RSA      Au=RSA  Enc=AES(256)  Mac=SHA1
KRB5-DES-CBC3-MD5       SSLv3 Kx=KRB5     Au=KRB5 Enc=3DES(168) Mac=MD5
KRB5-DES-CBC3-SHA       SSLv3 Kx=KRB5     Au=KRB5 Enc=3DES(168) Mac=SHA1
EDH-RSA-DES-CBC3-SHA    SSLv3 Kx=DH       Au=RSA  Enc=3DES(168) Mac=SHA1
EDH-DSS-DES-CBC3-SHA    SSLv3 Kx=DH       Au=DSS  Enc=3DES(168) Mac=SHA1
DES-CBC3-SHA            SSLv3 Kx=RSA      Au=RSA  Enc=3DES(168) Mac=SHA1
DES-CBC3-MD5            SSLv2 Kx=RSA      Au=RSA  Enc=3DES(168) Mac=MD5
DHE-RSA-AES128-SHA      SSLv3 Kx=DH       Au=RSA  Enc=AES(128)  Mac=SHA1
DHE-DSS-AES128-SHA      SSLv3 Kx=DH       Au=DSS  Enc=AES(128)  Mac=SHA1
AES128-SHA              SSLv3 Kx=RSA      Au=RSA  Enc=AES(128)  Mac=SHA1
RC2-CBC-MD5             SSLv2 Kx=RSA      Au=RSA  Enc=RC2(128)  Mac=MD5
KRB5-RC4-MD5            SSLv3 Kx=KRB5     Au=KRB5 Enc=RC4(128)  Mac=MD5
KRB5-RC4-SHA            SSLv3 Kx=KRB5     Au=KRB5 Enc=RC4(128)  Mac=SHA1
RC4-SHA                 SSLv3 Kx=RSA      Au=RSA  Enc=RC4(128)  Mac=SHA1
RC4-MD5                 SSLv3 Kx=RSA      Au=RSA  Enc=RC4(128)  Mac=MD5
RC4-MD5                 SSLv2 Kx=RSA      Au=RSA  Enc=RC4(128)  Mac=MD5
KRB5-DES-CBC-MD5        SSLv3 Kx=KRB5     Au=KRB5 Enc=DES(56)   Mac=MD5
KRB5-DES-CBC-SHA        SSLv3 Kx=KRB5     Au=KRB5 Enc=DES(56)   Mac=SHA1
EDH-RSA-DES-CBC-SHA     SSLv3 Kx=DH       Au=RSA  Enc=DES(56)   Mac=SHA1
EDH-DSS-DES-CBC-SHA     SSLv3 Kx=DH       Au=DSS  Enc=DES(56)   Mac=SHA1
DES-CBC-SHA             SSLv3 Kx=RSA      Au=RSA  Enc=DES(56)   Mac=SHA1
DES-CBC-MD5             SSLv2 Kx=RSA      Au=RSA  Enc=DES(56)   Mac=MD5
EXP-KRB5-RC2-CBC-MD5    SSLv3 Kx=KRB5     Au=KRB5 Enc=RC2(40)   Mac=MD5  export
EXP-KRB5-DES-CBC-MD5    SSLv3 Kx=KRB5     Au=KRB5 Enc=DES(40)   Mac=MD5  export
EXP-KRB5-RC2-CBC-SHA    SSLv3 Kx=KRB5     Au=KRB5 Enc=RC2(40)   Mac=SHA1 export
EXP-KRB5-DES-CBC-SHA    SSLv3 Kx=KRB5     Au=KRB5 Enc=DES(40)   Mac=SHA1 export
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-KRB5-RC4-MD5        SSLv3 Kx=KRB5     Au=KRB5 Enc=RC4(40)   Mac=MD5  export
EXP-KRB5-RC4-SHA        SSLv3 Kx=KRB5     Au=KRB5 Enc=RC4(40)   Mac=SHA1 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

ciphersを指定

例えばapache+mod_sslだと
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
と指定されているので、
openssl ciphers 'ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW' -v
すればこのciphersで有効な暗号スイート一覧が表示。だと思う。強度が強い順に表示したい場合は
openssl ciphers 'ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW'@STRENGTH -v
と指定する

s_client

pop(imap) over sslとかsmtp over sslの検証に

一般的な使い方

openssl s_client -connect $remotehost:$port

その他使うやつ

SSLv2とか指定したい場合
どっちかというというとSSLv2が無効になっていることを確認したいときとか
-ssl2
-ssl3
-tls1
use the STARTTLS command before starting TLS
Explicit(明示的)な場合
-starttls [ftp|pop|imap|smtp]
cipher
-cipher <cipher>
使えるcipherはciphersで調べること。指定したcipherを指定してもサーバ側で受け付けないように指定していると拒否される
証明書のエラーが出る場合
おれおれ証明書とかだと通信はできても証明書の検証まではできない。こんなエラーがでてるはず
CONNECTED(00000003)
**省略**
verify error:num=20:unable to get local issuer certificate
verify return:1
**省略**
verify error:num=27:certificate not trusted
verify return:1
**省略**
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
**省略**
---
Server certificate
-----BEGIN CERTIFICATE-----
**省略**
-----END CERTIFICATE-----
subject=**省略**
issuer=**省略**
---
No client certificate CA names sent
---
SSL handshake has read 1485 bytes and written 447 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : AES256-SHA
    Session-ID: D5A852EBF46063EBAC0B0519BC9EC7219233315992A4B637ABA6161FC7B1EC2B
    Session-ID-ctx:
    Master-Key: 8119DDD2B1D953A2604E6C3C28AA1D5E80672476C31B97122ACC5806B9329A069B69A439F09CC918BCE210BF33841637
    Key-Arg   : None
    Krb5 Principal: None
    Start Time: 1294540901
    Timeout   : 300 (sec)
    Verify return code: 21 (unable to verify the first certificate)
verify errorとかverify return code: 21とかでる。CA証明書を指定してあげるとでなくなる。各証明書のサイトに配布されているはず
openssl s_client -CAfile cacert.pem  -connect $remotehost:$port
結果は
SSL-Session:
    Protocol  : TLSv1
    Cipher    : AES256-SHA
    Session-ID: D1A08153291C5CD5854D2CFF656A4A39718CE54CBC602FBB584E73B320C59061
    Session-ID-ctx:
    Master-Key: 8665756515D0DBE617E08F1DFAABE5A4852622B257134C4C9AFBE006BDB8704E8B90FF1B2B3DFF0C56E94887341CCE42
    Key-Arg   : None
    Krb5 Principal: None
    Start Time: 1294541703
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
となる
タグ

Wiki内検索

Menu

ここは自由に編集できるエリアです。

管理人/副管理人のみ編集できます