オプション
version | バージョン表示 | ||
rand | ランダムにデータ生成 | ||
enc | 暗号化と復号 | -e : 暗号化 -d : 復号 -in : 入力ファイル(平文) -out : 出力ファイル(暗号文) -pass : パスワードの指定 | 暗号化(復号)タイプ -aes256 -aes-128-cbc -camellia192 -des3 -rc4 -base64 パスワードの指定 -pass pass:[パスワード] |
ハッシュ値の生成 | md5 sha1 sha256 sha384 sha512 など | ||
genrsa | RSA秘密鍵の生成 | 数値:鍵長を表す(2048など) des3 aes128 aes192 aes256 :暗号化アルゴリズム(パスフレーズあり) | |
rsa | RSA秘密鍵に関する処理 | -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]
コメント