ハンズオン(簡易版): IAM基礎 (認証編)

1.5.1. X.509証明書の作成

手順の目的

X.509証明書を作成します。

設定値の指定

手順に必要な設定値を変数に格納をします。

1. X.509証明書用ディレクトリ

X.509証明書用ディレクトリ名を指定します。

変数の設定:

DIR_OPENSSL_CERTIFICATE="${HOME}/tmp-handson-iam-authentication"

ディレクトリが存在することを確認し、存在しない場合は作成します。

コマンド:

ls -d ${DIR_OPENSSL_CERTIFICATE} > /dev/null 2>&1 \
  || mkdir -p ${DIR_OPENSSL_CERTIFICATE}

結果(例):

(出力なし)

2. X.509証明書秘密鍵ファイル名

X.509証明書秘密鍵ファイル名を指定します。

変数の設定:

FILE_OPENSSL_PRIVATE_KEY="${DIR_OPENSSL_CERTIFICATE}/private-key.pem" \
  && echo ${FILE_OPENSSL_PRIVATE_KEY}

結果(例):

/home/cloudshell-user/tmp-handson-iam-authentication/private-key.pem

3. X.509証明書署名要求ファイル名

X.509証明書署名要求ファイル名を指定します。

変数の設定:

FILE_OPENSSL_CERTIFICATE_SIGNING_REQUEST="${DIR_OPENSSL_CERTIFICATE}/certificate-signing-request.pem" \
  && echo ${FILE_OPENSSL_CERTIFICATE_SIGNING_REQUEST}

結果(例):

/home/cloudshell-user/tmp-handson-iam-authentication/certificate-signing-request.pem

4. X.509証明書ファイル名

X.509証明書ファイル名を指定します。

変数の設定:

FILE_OPENSSL_CERTIFICATE="${DIR_OPENSSL_CERTIFICATE}/certificate.pem" \
  && echo ${FILE_OPENSSL_CERTIFICATE}

結果(例):

/home/cloudshell-user/tmp-handson-iam-authentication/certificate.pem

設定値の確認

各変数に正しい設定値が格納されていることを確認します。

変数の確認:

cat << END

  # 1. DIR_OPENSSL_CERTIFICATE:"${HOME}/tmp-handson-iam-authentication"
       DIR_OPENSSL_CERTIFICATE="${DIR_OPENSSL_CERTIFICATE}"
  # 2. FILE_OPENSSL_PRIVATE_KEY:"${HOME}/tmp-handson-iam-authentication/private-key.pem"
       FILE_OPENSSL_PRIVATE_KEY="${FILE_OPENSSL_PRIVATE_KEY}"
  # 3. FILE_OPENSSL_CERTIFICATE_SIGNING_REQUEST:"${HOME}/tmp-handson-iam-authentication/certificate-signing-request.pem"
       FILE_OPENSSL_CERTIFICATE_SIGNING_REQUEST="${FILE_OPENSSL_CERTIFICATE_SIGNING_REQUEST}"
  # 4. FILE_OPENSSL_CERTIFICATE:"${HOME}/tmp-handson-iam-authentication/certificate.pem"
       FILE_OPENSSL_CERTIFICATE="${FILE_OPENSSL_CERTIFICATE}"

END

各変数について、上の行と下の行の値の内容もしくは形式が同じであることを確認します。 もし異なる場合は、それぞれの手順番号に戻って変数の設定を行います。

処理の実行

X.509証明書の作成

X.509証明書秘密鍵を作成します。

変数の確認:

cat << END

  # FILE_OPENSSL_PRIVATE_KEY:"${HOME}/tmp-handson-iam-authentication/private-key.pem"
    FILE_OPENSSL_PRIVATE_KEY="${FILE_OPENSSL_PRIVATE_KEY}"

END

コマンド:

openssl genrsa 2048 \
  > ${FILE_OPENSSL_PRIVATE_KEY} \
  && cat ${FILE_OPENSSL_PRIVATE_KEY}

結果(例)

Generating RSA private key, 2048 bit long modulus
........................................................+++
....+++
e is 65537 (0x10001)
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAuzWK7iAPeCUpH2x61+W5dPKLdu2Oqml05wuQQJyRv8RRcj37
D/0YehCh/c8uW5f2uGZ1RP/n+HMpvS5ilVCH79WW22wWWWxchDGRcad/OGYHDEj1
xcJMPCh+9ILwX7T5JcpiWCXjp4dKpDCwJ+HeSE4tK80mZKJ/Fe6ldZV1XS3TufZX
2/9IeRdYLYCQFvY/21d2AzoK6C54KlLGMNpGXomczKS0FzPbPCQqiOB2FHyWEVKr
qUCzVYkzecEf0dQ++Tin3GBe4+m0r+BEOJJ67NxFdEz47iWqG9/LMecWI0DJUP77
HxSDG2pwTwMilTNoaRO+YLKAUbC3hbiq9GkYMQIDAQABAoIBAHIyKgoxol4OhPQ3
LwQNjMBqx2oHZPRMmdPqONdA6qNItMn0Rvas08Z56Oay/7s9inFXhodNdwoV7csJ
xXcBhbpl1r0IROXNdO3qcqcanj8f9YKn6rON9wTnSvIKAWjQMv67YpwUmLbzjzNy
w7HAVOBUV7eVT6speE4/ocyFG+923re21gj2sI33ml/0zmNO34/3WxtLt5RXGoAt
JMZZe29Ert6ibODGr1hP1TTRkc/Mqs14qu2xmIkqddW/2a1fVC7yY4CHWxM8C5vT
qlS35wBzH7f7G3FjenfI7IjtlJIv4QW7X0F1KI8xgro/VPV8POnPnM0o3sOlURb8
EBLmGUECgYEA4OS9igrSt9PV3iecugKitGBqLhzA9Sp1vErIyU/Ei1pFiqT1IH6+
5y3nyds2/ZsaNroUL25iiQRjOPyZy+MBnJ0Two5/CqOz2jojjrTdGZqMatCOCPgn
YF/Vl6xCCxCHlCSO5QZOxFutRmcYqPEsjHNIOhaQxbsBex/YfoibYmkCgYEA1Rpv
jPfhNAMWgXkq/EBCpXekbp6CcQZ06DeHI3OtI/zHfISlbglh1mtdC8FFgU1ux2ZV
pROkVQmX+GzxBz9UcJAp+jTUdC6k8GSx+BQLx8p+1JTBhY+AvQSxikyegiAfnTKO
prMMG9FeKL+Xb/JcnWIPBTxO7TGQPmnGSHaMPokCgYEAxOYgOJMfSIk0j2t5Ibab
A3gCntrX6g7BxBhp0S+Ask1X43pnj4rI05jyfl3quIGqos2qTJjFtpbb1JH8iXD4
AUnZehbOjd8j4WXTqecaSYdxdzefk6TIvO1LEZ9kt1FCkuarIUOzhOGLRL+Q7KEz
UsjALPOCz0vakRUhtC8gdDkCgYAn53tb+k7BXpKoS/gwpBfWxECWNjhW0c6ybTNx
AAg75Om192DC6h7X9+LEgLxzKfzEefUvpC3xfopmin/Xy5QUP+qcX6go2VMpcLGi
sp5CGzkEtZZHXEfPHUHhk9dapolE9mKf9Icf7mSjXL0OyWNuVR5a7KAa6l0IUuY+
S3SXgQKBgQCG9zItf7+IZRQ/T4jhopTW36xe4Z7roJBrPcByvk8u6DHrdO6s3Oov
PvFSCZKAIA8y3OrShJblX6m2iY+3tdGGEnXphrH5vVPiFBT1hMdn63bYMFs8oOcU
YQm0pc5ofl01xIguBcK8N+xr/nGEBM9IXS5SvjpnJIuxpR2doQ6Ltw==
-----END RSA PRIVATE KEY-----

X.509証明書署名要求の作成

X.509証明書証明書署名要求を作成します。

変数の確認:

cat << END

  # FILE_OPENSSL_PRIVATE_KEY:"${HOME}/tmp-handson-iam-authentication/private-key.pem"
    FILE_OPENSSL_PRIVATE_KEY="${FILE_OPENSSL_PRIVATE_KEY}"
  # FILE_OPENSSL_CERTIFICATE_SIGNING_REQUEST:"${HOME}/tmp-handson-iam-authentication/certificate-signing-request.pem"
    FILE_OPENSSL_CERTIFICATE_SIGNING_REQUEST="${FILE_OPENSSL_CERTIFICATE_SIGNING_REQUEST}"

END

コマンド:

openssl req \
  -new \
  -key ${FILE_OPENSSL_PRIVATE_KEY} \
  -out ${FILE_OPENSSL_CERTIFICATE_SIGNING_REQUEST} \
  && cat ${FILE_OPENSSL_CERTIFICATE_SIGNING_REQUEST}

結果(例)

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) [XX]:

入力(例)

JP
(エンターキーを押す)

結果(例)

State or Province Name (full name) []:

入力(例)

Tokyo
(エンターキーを押す)

結果(例)

Locality Name (eg, city) [Default City]:

入力(例)

Meguro-ku
(エンターキーを押す)

結果(例)

Organization Name (eg, company) [Default Company Ltd]:

入力(例)

Handson-CLI, LLC.
(エンターキーを押す)

結果(例)

Organizational Unit Name (eg, section) []:

入力(例)

(エンターキーを押す)

結果(例)

Common Name (eg, your name or your server's hostname) []:

入力(例)

handson-cli.example.jp
(エンターキーを押す)

結果(例)

Email Address []:

入力(例)

handson-cli@example.jp
(エンターキーを押す)

結果(例)

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:

入力(例)

(エンターキーを押す)

結果(例)

An optional company name []:

入力(例)

(エンターキーを押す)

結果(例)

-----BEGIN CERTIFICATE REQUEST-----
MIICxDCCAawCAQAwfzELMAkGA1UEBhMCSlAxDjAMBgNVBAgMBVRva3lvMQ4wDAYD
VQQHDAVUb2t5bzEWMBQGA1UECgwNRXhhbXBsZSwgTExDLjEYMBYGA1UEAwwPdGVz
dC5leGFtcGxlLmpwMR4wHAYJKoZIhvcNAQkBFg90ZXN0QGV4YW1wbGUuanAwggEi
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDRlefsqbqwJAg07oyEF7C9hLUE
whzqvOIiJG0KlUmQYP3XcedcYdfWmUIbdd1wx3HLbVTPwJ7y8FjSi43Hp6YKtzKk
2nk5zr186As0omqZM+HewDJcjLXz104JnSvYXSsPn1c6NoNDUY3lpZ7Ldil1b23n
sWDImh3yfsJbhrGlS/15I2RYujxcaj+4QIr6lhaANdD/5Vro5h7eCFunF6juzXke
i2A+yuTE0aq1pkUVDFRVMa4CgegYEUumi3cXY5XAjsR3qvZqCgJDuIuFUpc5R/Kr
MxQ4GDlRa1Yc/P553sfIM3FKe1lU7PCoozKMW3YXfOc+K+poQVQEmUzfqK4xAgMB
AAGgADANBgkqhkiG9w0BAQsFAAOCAQEAWGrSuIpUyKUmfz+FZALO9e4ewChQgwLz
dStE3tzc8LbnoQf918FiEXOloKVQvoHZxUjQ4gDrBZXFILzOGaxf8ZSCqKIh4d9L
dYuM561JjnpVb8NeaHNgy2I2jhMgrJxBzOJrAYmguGpNOmBlog0TDSV4XdrSf4+r
KZni2E6QiWoahGTx58yNSzb/3NZTXS6LPtOz4UzHlk8bpRlzFHwbwo48FOS0bstC
KvSDUHsAsXOeGwsYpBbu1GTbXtUoTkSpgqdFxQ1qy0ZrQekhQkOw5dDTbkNfKr7i
xba1X8pZct2ERjWrNSaVCnQ1x/wSfPFBVyxGqnSoJW/h40cILUn5hA==
-----END CERTIFICATE REQUEST-----

X.509証明書の作成

X.509証明書を作成します。

変数の確認:

cat << END

  # FILE_OPENSSL_CERTIFICATE_SIGNING_REQUEST:"${HOME}/tmp-handson-iam-authentication/certificate-signing-request.pem"
    FILE_OPENSSL_CERTIFICATE_SIGNING_REQUEST="${FILE_OPENSSL_CERTIFICATE_SIGNING_REQUEST}"
  # FILE_OPENSSL_PRIVATE_KEY:"${HOME}/tmp-handson-iam-authentication/private-key.pem"
    FILE_OPENSSL_PRIVATE_KEY="${FILE_OPENSSL_PRIVATE_KEY}"
  # FILE_OPENSSL_CERTIFICATE:"${HOME}/tmp-handson-iam-authentication/certificate.pem"
    FILE_OPENSSL_CERTIFICATE="${FILE_OPENSSL_CERTIFICATE}"

END

コマンド:

openssl x509 \
  -req \
  -days 365 \
  -in ${FILE_OPENSSL_CERTIFICATE_SIGNING_REQUEST} \
  -signkey ${FILE_OPENSSL_PRIVATE_KEY} \
  -out ${FILE_OPENSSL_CERTIFICATE} \
  && cat ${FILE_OPENSSL_CERTIFICATE}

結果(例)

Signature ok
subject=/C=JP/ST=Tokyo/L=Meguro-ku/O=Handson-CLI, LLC./CN=handson-cli.example.jp/emailAddress=handson-cli@example.jp
Getting Private key
-----BEGIN CERTIFICATE-----
MIIDejCCAmICCQDosaLz1qN1BDANBgkqhkiG9w0BAQsFADB/MQswCQYDVQQGEwJK
UDEOMAwGA1UECAwFVG9reW8xDjAMBgNVBAcMBVRva3lvMRYwFAYDVQQKDA1FeGFt
cGxlLCBMTEMuMRgwFgYDVQQDDA90ZXN0LmV4YW1wbGUuanAxHjAcBgkqhkiG9w0B
CQEWD3Rlc3RAZXhhbXBsZS5qcDAeFw0yMzEyMDIwODUzNDFaFw0yNDEyMDEwODUz
NDFaMH8xCzAJBgNVBAYTAkpQMQ4wDAYDVQQIDAVUb2t5bzEOMAwGA1UEBwwFVG9r
eW8xFjAUBgNVBAoMDUV4YW1wbGUsIExMQy4xGDAWBgNVBAMMD3Rlc3QuZXhhbXBs
ZS5qcDEeMBwGCSqGSIb3DQEJARYPdGVzdEBleGFtcGxlLmpwMIIBIjANBgkqhkiG
9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ZXn7Km6sCQINO6MhBewvYS1BMIc6rziIiRt
CpVJkGD913HnXGHX1plCG3XdcMdxy21Uz8Ce8vBY0ouNx6emCrcypNp5Oc69fOgL
NKJqmTPh3sAyXIy189dOCZ0r2F0rD59XOjaDQ1GN5aWey3YpdW9t57FgyJod8n7C
W4axpUv9eSNkWLo8XGo/uECK+pYWgDXQ/+Va6OYe3ghbpxeo7s15HotgPsrkxNGq
taZFFQxUVTGuAoHoGBFLpot3F2OVwI7Ed6r2agoCQ7iLhVKXOUfyqzMUOBg5UWtW
HPz+ed7HyDNxSntZVOzwqKMyjFt2F3znPivqaEFUBJlM36iuMQIDAQABMA0GCSqG
SIb3DQEBCwUAA4IBAQBHh/oFBNQM0JKc8w7abadxFmvj8rzeDaK/k8Q+XWVi9sUv
FL3sEnhv30IrbVHX4Pkh3HTLSj0tzbDRjryAMMGZ2Th9rClNUEg5pJ/6QHoCtkAG
savw0dCiOxd+dqTiYf+MMujYR1+h1TVkDxglXQz2cAPoaxob8Zfyt+L9qQNbX04l
xUihOLw6AFI/vq7jQ8mr5ksCnS1k422G+/G34CkYeft5ptDX0xD4WOBreY3vrJsh
LWhIABYxIKmw4nSmE7lbMGxOCExwKXGKpdNZD5xRNmT1g9sPKWkJjEXXQyRp7GMI
Fl4jGDTi9b9k+VadpaeWJJX4SMeE60XT5iJ4I0Ma
-----END CERTIFICATE-----

完了確認

「X.509証明書ファイル"${HOME}/tmp-handson-iam-authentication/certificate.pem"が存在する。」ことを確認します。

コマンド:

ls ${FILE_OPENSSL_CERTIFICATE}

結果(例):

/home/cloudshell-user/tmp-handson-iam-authentication/certificate.pem

手順の完了確認