自己署名サーバ証明書、いわゆるオレオレ証明書の作成方法。
opensslでちゃちゃっと作ります。
サーバ証明書を取得する際に必要となるCSRもこの手順で作成できます。
まずはopensslのバージョンを参考程度に表示。
$ openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013
次に秘密鍵(PrivateKey)を作成します。これは絶対外に漏らしてはいけないものです。以下では「SV2020-2.key」という2048bitの鍵を生成します。
$ openssl genrsa -out SV2020-2.key 2048
Generating RSA private key, 2048 bit long modulus
次に上記で作成した秘密鍵を元に、CSR(証明書署名要求/Certificate Signing Request)を作成します。これがサーバ証明書の元になる情報です。
以下では「SV2020-2.key」を元にして「SV2020-2.csr」を作成します。
$ openssl req -sha256 -new -key SV2020-2.key -out SV2020-2.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[malt@cent6 ~] field will be left blank.
-----
Country Name (2 letter code) [XX]:JP ←必須
State or Province Name (full name) []:Tokyo ←必須Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: ←空でOK
An optional company name []: ←空でOK
Locality Name (eg, cit[malt@cent6 ~]y) [Default City]:Minato-ku ←必須
Organization Name (eg, company) [Default Company Ltd]: ←空でもOK
Organizational Unit Name (eg, section) []: ←空でもOK
Common Name (eg, your name or your server's hostname) []:hogehoge.local ←必須
Email Address []: ←空でOK
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: ←空でOKPlease enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: ←空でOK
An optional company name []: ←空でOK
An optional company name []: ←空でOK
上記でCSRが作成されたのでそれを使用してサーバ証明書を作成します。
本来はこのCSRを外部のサーバ証明書発行会社に送る事でインターネット上で正しく認められた証明書が発行されます。
今回はオレオレ証明書なので自分で発行します。
以下では有効期間が730日のSV2020-2.crtという証明書を作成します。
$ openssl x509 -sha256 -req -days 730 -in SV2020-2.csr -signkey SV2020-2.key -out SV2020-2.crt
Signature ok
subject=/C=JP/ST=Tokyo/L=Minato-ku/O=Default Company Ltd/CN=hogehoge.local
Getting Private key
すると「SV2020-2.crt」というファイルが生成されます。これでSSLに必要なサーバ証明書(SV2020-2.crt)と秘密鍵(SV2020-2.key)ができました。
できたサーバ証明書をエディタで開いてみると以下のように意味のなさそうな
文字列が確認できます。この「—–BEGIN CERTIFICATE—– ~—–END CERTIFICATE—–」までが証明書なんですね。
-----BEGIN CERTIFICATE-----
MIIDTDCCAjQCCQC+1RF+4z++YzANBgkqhkiG9w0BAQsFADBoMQswCQYDVQQGEwJK
UDEOMAwGA1UECAwFVG9reW8xEjAQBgNVBAcMCU1pbmF0by1rdTEcMBoGA1UECgwT
RGVmYXVsdCBDb21wYW55IEx0ZDEXMBUGA1UEAwwOaG9nZWhvZ2UubG9jYWwwHhc-----END CERTIFICATE-----N
MjAwNDEzMDg0NTU1WhcNMjIwNDEzMDg0NTU1WjBoMQswCQYDVQQGEwJKUDEOMAwG
A1UECAwFVG9reW8xEjAQBgNVBAcMCU1pbmF0by1rdTEcMBoGA1UECgwTRGVmYXVs
dCBDb21wYW55IEx0ZDEXMBUGA1UEAwwOaG9nZWhvZ2UubG9jYWwwggEiMA0GCSqG
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTkVWs2nLvl96GMWw9vriY+TJPVu-----END CERTIFICATE-----88Lawf
t0Xzae7/lsux/kPjsTf1A3a8A9CfZWmw2+4DUW0EG3VWkaZtukZwa+giRYdXXRsm
QT4C9nMlVpsnDH5E6J5RIeDFvv0oJyVPVPmni7e9LxBiP9008PnV/7wQOTQ3eWzg
aObTmu0TZsq2SUSN10F2GtMSl/UCRaxObpASleQDUOg9/y2WiADi+Jf0S8vlz1tc
cjGnQVKgwARpMv27Jz1f195VRp8cSTL4bUCnU1TBbh1Vcibh7sx6T5WltljeN2rj
tJEYWeeO6SPUKQ0EbYrQLBtsY7O7ZHBBOCoRCTSx3ArtyVSc+Hz3AgMBAAEwDQYJ
KoZIhvcNAQELBQADggEBAKt/bJCxh3IpL+qWll/a1vC/taI/vKFWMSFuUzT864Ol
Gcqlqf+TTCtFB4n/uF4qgcXFGignt3+BeJpHkQL7Ioz3rA7egpQOszX5yve9aIjj
j2d6QINcI2l3e9hDCGWleqsA+N98cVBgr7/TSol/f1Uh+u+0TPmKCsSWoKQN2fWY
CnNhm2YMKLDnBD2sGAy5jUCbaWaiweDu4DKe+oKYVaE2a9XS2dRMbCLmj3XfrG93
UBTw0iCeKwU6j7nqZguBwJkQmu3lboaf1whPkgipaNXTEAAqu25QEucDtD8RF22v
I6qM/ssGIC65O+CugG6ZvUEIydf2fP825dovUMKOeCs=
-----END CERTIFICATE-----
上記ではよくわからないので、下記コマンドで作成した証明書の情報を確認できます。
openssl x509 -text -noout -in ./SV2020-2.crt
Certificate:
Data:
Version: 1 (0x0)
Serial Number: 13750916273921834595 (0xbed5117ee33fbe63)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=JP, ST=Tokyo, L=Minato-ku, O=Default Company Ltd, CN=hogehoge.local ←Issuerとは署名者。今回はオレオレなので自分で署名している
Validity
Not Before: Apr 13 08:45:55 2020 GMT ←有効期間開始日、作成した時間
Not After : Apr 13 08:45:55 2022 GMT ←有効期限。今回は730日で設定したので2年後
Subject: C=JP, ST=Tokyo, L=Minato-ku, O=Default Company Ltd, CN=hogehoge.local ←CSRで入力した情報が反映されている。これはhogehoge.localというサーバの証明書として使える。
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:d3:91:55:ac:da:72:ef:97:de:86:31:6c:3d:be:
b8:98:f9:32:4f:56:ef:3c:2d:ac:1f:b7:45:f3:69:
ee:ff:96:cb:b1:fe:43:e3:b1:37:f5:03:76:bc:03:
d0:9f:65:69:b0:db:ee:03:51:6d:04:1b:75:56:91:
a6:6d:ba:46:70:6b:e8:22:45:87:57:5d:1b:26:41:
3e:02:f6:73:25:56:9b:27:0c:7e:44:e8:9e:51:21:
e0:c5:be:fd:28:27:25:4f:54:f9:a7:8b:b7:bd:2f:
10:62:3f:dd:34:f0:f9:d5:ff:bc:10:39:34:37:79:
6c:e0:68:e6:d3:9a:ed:13:66:ca:b6:49:44:8d:d7:
41:76:1a:d3:12:97:f5:02:45:ac:4e:6e:90:12:95:
e4:03:50:e8:3d:ff:2d:96:88:00:e2:f8:97:f4:4b:
cb:e5:cf:5b:5c:72:31:a7:41:52:a0:c0:04:69:32:
fd:bb:27:3d:5f:d7:de:55:46:9f:1c:49:32:f8:6d:
40:a7:53:54:c1:6e:1d:55:72:26:e1:ee:cc:7a:4f:
95:a5:b6:58:de:37:6a:e3:b4:91:18:59:e7:8e:e9:
23:d4:29:0d:04:6d:8a:d0:2c:1b:6c:63:b3:bb:64:
70:41:38:2a:11:09:34:b1:dc:0a:ed:c9:54:9c:f8:
7c:f7
Exponent: 65537 (0x10001)
Signature Algorithm: sha256WithRSAEncryption
ab:7f:6c:90:b1:87:72:29:2f:ea:96:96:5f:da:d6:f0:bf:b5:
a2:3f:bc:a1:56:31:21:6e:53:34:fc:eb:83:a5:19:ca:a5:a9:
ff:93:4c:2b:45:07:89:ff:b8:5e:2a:81:c5:c5:1a:28:27:b7:
7f:81:78:9a:47:91:02:fb:22:8c:f7:ac:0e:de:82:94:0e:b3:
35:f9:ca:f7:bd:68:88:e3:8f:67:7a:40:83:5c:23:69:77:7b:
d8:43:08:65:a5:7a:ab:00:f8:df:7c:71:50:60:af:bf:d3:4a:
89:7f:7f:55:21:fa:ef:b4:4c:f9:8a:0a:c4:96:a0:a4:0d:d9:
f5:98:0a:73:61:9b:66:0c:28:b0:e7:04:3d:ac:18:0c:b9:8d:
40:9b:69:66:a2:c1:e0:ee:e0:32:9e:fa:82:98:55:a1:36:6b:
d5:d2:d9:d4:4c:6c:22:e6:8f:75:df:ac:6f:77:50:14:f0:d2:
20:9e:2b:05:3a:8f:b9:ea:66:0b:81:c0:99:10:9a:ed:e5:6e:
86:9f:d7:08:4f:92:08:a9:68:d5:d3:10:00:2a:bb:6e:50:12:
e7:03:b4:3f:11:17:6d:af:23:aa:8c:fe:cb:06:20:2e:b9:3b:
e0:ae:80:6e:99:bd:41:08:c9:d7:f6:7c:ff:36:e5:da:2f:50:
c2:8e:78:2b