コマンド_openssl

Linux
ブログ

オプション

versionバージョン表示
randランダムにデータ生成
enc暗号化と復号-e : 暗号化
-d : 復号
-in : 入力ファイル(平文)
-out : 出力ファイル(暗号文)
-pass : パスワードの指定
暗号化(復号)タイプ
-aes256
-aes-128-cbc
-camellia192
-des3
-rc4
-base64
パスワードの指定
-pass pass:[パスワード]
ハッシュ値の生成md5 sha1 sha256 sha384
sha512 など
genrsaRSA秘密鍵の生成数値:鍵長を表す(2048など)
des3 aes128 aes192 aes256
:暗号化アルゴリズム(パスフレーズあり)
rsaRSA秘密鍵に関する処理-pubin : 公開鍵を入力
-pubout : 公開鍵を出力
req証明書署名要求関係の処理
x509証明書関係の処理
-noout : 末尾にPEM形式を出力しない
-binary : バイナリ形式で出力
-text : テキスト形式で出力
-base64 : base64形式で出力
-hex : 16進数形式で出力
s_clientサーバーと接続テストを行うサーバーとの接続をする
インタラクティブに行う場合は
「-ign_eof」を使う
telnetのような使い方ができます

バージョン表示

$ openssl verion
Openssl 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)

ランダムにデータを生成

$ openssl rand 32 | base64
NbWwNzUu4RKiLay6zAGk0pJnhLMKpK/xkvOo6/V/4i4=

※32バイトのランダムデータをbase64でエンコードして出力しています。

暗号化及び復号の仕方

$ openssl enc -e [暗号化タイプ] -in [対象ファイル] -out [出力ファイル]
または
$ echo '暗号化する平文' | openssl -e [暗号化タイプ] -out [出力ファイル]

例)
# 暗号化
$ echo 'abcde' | openssl enc -e -aes-256-cbc -out aaa.enc
enter AES-256-CBC encription password:  ←任意のパスワードを入力(2回)
 → aaa.enc内にソルト(デフォルト)された暗号化データが格納されます。
# 複合化
$ openssl enc -d -aes-256-cbc -in aaa.enc -out bbb.dec
enter AES-256-CBC decryption password:  ←先ほどのパスワードを入力
$ cat bbb.dec
abcde

ハッシュ値の計算

例)
# abcdeをsha1でハッシュ化
$ echo "abcde" | openssl sha1
SHA1(stdin)= ec11312386ad561674f724b8cca7cf1796e26d1d

# abcdeをmd5でハッシュ化したバイナリデータをbase64で出力
$ echo "abcde" | openssl md5 -binary | base64
m5r2lFyV8aowKmGs91yb1g==



# [ファイル名]をsha256でハッシュ化
$ openssl sha256 [ファイル名]

秘密鍵の生成、確認(パスフレーズなし)

# 秘密鍵の生成(パスフレーズなし) 512bit長の秘密鍵作成
# 鍵長を指定しない場合1024bitで生成します。
$ openssl genrsa 512 > pri.key
$ cat pri.key
-----BEGIN PRIVATE KEY-----
MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAxawQf149qtEadmnG
DSDS1OTr6AKsxdp2MvZ9V5S73AC72g6x1+UaH4zNfGQy71ciLUPRvPw3pONE1FXF
uR7zHwIDAQABAkEAmhdXhPJiABahGk26JeHAeFU70NDE/jcejPu5GdzH1OcepAwK
dKT8EgmwibkUikI5Gw/FOTex3KS+6nwlQ9q3gQIhAOgk8rJ0LI8iAmid77gi3FuN
WwZjxmLMK2DXr73jQ69bAiEA2fxAZ501nOob+sejEf4niXblL1zA4VUJiAeTwHqy
eo0CIEKssgQtN8sYYoa3re0+HfoxnE42g/lGWMMkz7YDOyJ3AiAR8PMUFBpfid03
rMq9Jl/2rnR6i3XMlgUszwLYKsEZ2QIgTs637i4OmxawmBexE9yo4cohIng9XG7y
NjZeVdgmQBU=
-----END PRIVATE KEY-----
  ↑
このような形式をPEM形式といいます。PEM形式は、Base64でエンコードされた標準の証明書の形式です。

# 作成したRSA秘密鍵の情報を確認
$ openssl rsa -text -noout < pri.key
Private-Key: (512 bit, 2 primes)
modulus:
    00:c5:ac:10:7f:5e:3d:aa:d1:1a:76:69:c6:0d:20:
    d2:d4:e4:eb:e8:02:ac:c5:da:76:32:f6:7d:57:94:
    bb:dc:00:bb:da:0e:b1:d7:e5:1a:1f:8c:cd:7c:64:
    32:ef:57:22:2d:43:d1:bc:fc:37:a4:e3:44:d4:55:
    c5:b9:1e:f3:1f
publicExponent: 65537 (0x10001)
privateExponent:
    00:9a:17:57:84:f2:62:00:16:a1:1a:4d:ba:25:e1:
    c0:78:55:3b:d0:d0:c4:fe:37:1e:8c:fb:b9:19:dc:
    c7:d4:e7:1e:a4:0c:0a:74:a4:fc:12:09:b0:89:b9:
    14:8a:42:39:1b:0f:c5:39:37:b1:dc:a4:be:ea:7c:
    25:43:da:b7:81
prime1:
    00:e8:24:f2:b2:74:2c:8f:22:02:68:9d:ef:b8:22:
    dc:5b:8d:5b:06:63:c6:62:cc:2b:60:d7:af:bd:e3:
    43:af:5b
prime2:
    00:d9:fc:40:67:9d:35:9c:ea:1b:fa:c7:a3:11:fe:
    27:89:76:e5:2f:5c:c0:e1:55:09:88:07:93:c0:7a:
    b2:7a:8d
exponent1:
    42:ac:b2:04:2d:37:cb:18:62:86:b7:ad:ed:3e:1d:
    fa:31:9c:4e:36:83:f9:46:58:c3:24:cf:b6:03:3b:
    22:77
exponent2:
    11:f0:f3:14:14:1a:5f:89:dd:37:ac:ca:bd:26:5f:
    f6:ae:74:7a:8b:75:cc:96:05:2c:cf:02:d8:2a:c1:
    19:d9
coefficient:
    4e:ce:b7:ee:2e:0e:9b:16:b0:98:17:b1:13:dc:a8:
    e1:ca:21:22:78:3d:5c:6e:f2:36:36:5e:55:d8:26:
    40:15

秘密鍵の生成(パスコードあり)

# opensslで512bitの秘密鍵を生成し、AES256で暗号化します。
$ openssl genrsa -aes256 512 > pri.key

公開鍵を作成、確認

# pri.key(秘密鍵)を元にした公開鍵を生成
$ cat pri.key | openssl rsa -pubout > pub.key
$ cat pub.key
-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMWsEH9eParRGnZpxg0g0tTk6+gCrMXa
djL2fVeUu9wAu9oOsdflGh+MzXxkMu9XIi1D0bz8N6TjRNRVxbke8x8CAwEAAQ==
-----END PUBLIC KEY-----
# pub.key(公開鍵)の中身を確認

$ openssl rsa -text -pubin -noout < pub.key
Public-Key: (512 bit)
Modulus:
    00:c5:ac:10:7f:5e:3d:aa:d1:1a:76:69:c6:0d:20:
    d2:d4:e4:eb:e8:02:ac:c5:da:76:32:f6:7d:57:94:
    bb:dc:00:bb:da:0e:b1:d7:e5:1a:1f:8c:cd:7c:64:
    32:ef:57:22:2d:43:d1:bc:fc:37:a4:e3:44:d4:55:
    c5:b9:1e:f3:1f
Exponent: 65537 (0x10001)

証明書署名要求(CSR)を作成、確認

# 自分の秘密鍵を元にCAに対して証明書署名要求(CSR:Certificate Signing Request)を生成する。

$ openssl req -new -key pri.key > serv.csr
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) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Miyakojima-ku
Organization Name (eg, company) [Internet Widgits Pty Ltd]:A company
Organizational Unit Name (eg, section) []:office
Common Name (e.g. server FQDN or YOUR name) []:www.example.com
Email Address []: ----@---.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:


# CSRの内容
$ cat serv.csr
-----BEGIN CERTIFICATE REQUEST-----
MIIBTDCB9wIBADCBkTELMAkGA1UEBhMCSlAxDjAMBgNVBAgMBVRva3lvMRYwFAYD
VQQHDA1NaXlha29qaW1hLWt1MRIwEAYDVQQKDAlBIGNvbXBhbnkxDzANBgNVBAsM
Bm9mZmljZTEYMBYGA1UEAwwPd3d3LmV4YW1wbGUuY29tMRswGQYJKoZIhvcNAQkB
FgwtLS0tQC0tLS5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEAxawQf149qtEa
dmnGDSDS1OTr6AKsxdp2MvZ9V5S73AC72g6x1+UaH4zNfGQy71ciLUPRvPw3pONE
1FXFuR7zHwIDAQABoAAwDQYJKoZIhvcNAQELBQADQQBCfObRXf7iEz1EwmGuxmd9
0J0t+iRjjqnMP8azFiMOg+9QKtifA48A+b6ruBsF5bZVzrZ5QOib82fmNxMaG5U5
-----END CERTIFICATE REQUEST-----

# CSRの中身の確認
$ openssl req -text -noout < serv.csr
Certificate Request:
    Data:
        Version: 1 (0x0)
        Subject: C = JP, ST = Tokyo, L = Miyakojima-ku, O = A company, OU = office, CN = www.example.com, emailAddress = ----@---.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (512 bit)
                Modulus:
                    00:c5:ac:10:7f:5e:3d:aa:d1:1a:76:69:c6:0d:20:
                    d2:d4:e4:eb:e8:02:ac:c5:da:76:32:f6:7d:57:94:
                    bb:dc:00:bb:da:0e:b1:d7:e5:1a:1f:8c:cd:7c:64:
                    32:ef:57:22:2d:43:d1:bc:fc:37:a4:e3:44:d4:55:
                    c5:b9:1e:f3:1f
                Exponent: 65537 (0x10001)
        Attributes:
            (none)
            Requested Extensions:
    Signature Algorithm: sha256WithRSAEncryption
    Signature Value:
        42:7c:e6:d1:5d:fe:e2:13:3d:44:c2:61:ae:c6:67:7d:d0:9d:
        2d:fa:24:63:8e:a9:cc:3f:c6:b3:16:23:0e:83:ef:50:2a:d8:
        9f:03:8f:00:f9:be:ab:b8:1b:05:e5:b6:55:ce:b6:79:40:e8:
        9b:f3:67:e6:37:13:1a:1b:95:39

サーバーとの接続テストを行う(サーバーに接続する)

# サーバーとの接続を開始する。(インタラクティブモードを使うときには「-ign_eof」を使う
$ openssl s_client -ign_eof -connect [hostname]:[portnumber]

参考文献

コメント