やさしいCSRの作り方
AmazonLinux_CentOS,OperatingSystem,Ubuntu(WSL),セキュリティ関連
CSR(証明書署名要求)の作り方
Contents
概要
証明書とは
- 先ず証明書について、簡単にまとめます。公開鍵暗号方式では、公開鍵の成りすましを防止するために公開鍵証明書が使われます。この公開鍵証明書は、公開鍵と、その所有者(その他に有効期間、発行者、署名アルゴリズムなどの情報も含む)を結びつける証明書となります。
- また、公開鍵証明書は偽装されないようにデジタル署名が使われ、認証局(CA)が署名を行い、証明書の正当性を保証します。
- 証明書の取得は、大手のGMOやAWSのACM(Certificate Manager)などが利用でき、Let’s Encryptなど無料のサービスもあります。
CSRとは
- 次に本題のCSRについて。認証局に、公開鍵証明書の発行を依頼するために必要な情報がCSR(証明書署名要求, certificate signing request)です。
- 証明書の申請者は、公開鍵と秘密鍵のペアを作成して、公開鍵を基にCSRを作成します(今回の記事ではシンプルな手順を使用しており、秘密鍵から直接CSRを作成しています)。CSRには申請者を識別するための情報と公開鍵が含まれています。
- 認証局は、申請者が提出したCSRに対して公開鍵証明書を発行します。この証明書は認証局の秘密鍵でデジタル署名されています。
CSR作成方法
RSA秘密鍵を使ったCSR作成
- CentOS にて、CSRを作成する手順です。以下、サンプルです。
- 始めにopensslコマンドで秘密鍵を作成し、次に2つ目のopensslコマンドでCSRを作成します。
- サンプルに記載の秘密鍵の作成は、2048bitの鍵長を指定した方法となります。
$ openssl genrsa 2048 > oji-cloud.net.key
Generating RSA private key, 2048 bit long modulus
...............................+++
..............................................................+++
e is 65537 (0x10001)
$ openssl req -new -key oji-cloud.net.key -sha256 -out oji-cloud.net.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) [XX]:JP
State or Province Name (full name) []:Mie
Locality Name (eg, city) [Default City]:Kuwana
Organization Name (eg, company) [Default Company Ltd]:oji-cloud
Organizational Unit Name (eg, section) []:oji-cloud
Common Name (eg, your name or your server's hostname) []:oji-cloud.net
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
$
ECDSA秘密鍵を使ったCSR作成
- 次はECDSA(Elliptic Curve Digital Signature Algorithm、楕円曲線DSA)の暗号化方式を用いた秘密鍵の作成方法のサンプルです。
- RSAと同様に、始めにopensslコマンドで秘密鍵を作成し、次に2つ目のopensslコマンドでCSRを作成します。
- サンプルでは、楕円曲線には、P-256(prime256v1)を指定しています。
$ openssl ecparam -out oji-cloud.net.key -name prime256v1 -genkey
Generating RSA private key, 2048 bit long modulus
...............................+++
..............................................................+++
e is 65537 (0x10001)
$ openssl req -new -key oji-cloud.net.key -sha256 -out oji-cloud.net.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) [XX]:JP
State or Province Name (full name) []:Mie
Locality Name (eg, city) [Default City]:Kuwana
Organization Name (eg, company) [Default Company Ltd]:oji-cloud
Organizational Unit Name (eg, section) []:oji-cloud
Common Name (eg, your name or your server's hostname) []:oji-cloud.net
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
$
CSRの確認方法
- 下記は、opensslコマンドを使ったCSRの確認方法です。
$ openssl req -text -noout -in ./oji-cloud.net.csr
Certificate Request:
Data:
Version: 0 (0x0)
Subject: C=JP, ST=Mie, L=Kuwana, O=oji-cloud, OU=oji-cloud, CN=oji-cloud.net
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey
Public-Key: (256 bit)
pub:
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:
XX:XX:XX:XX:XX
ASN1 OID: prime256v1
NIST CURVE: P-256
Attributes:
a0:00
Signature Algorithm: ecdsa-with-SHA256
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
証明書の中身を確認する
- 以下、発行された証明書の中身を確認するコマンドです。CSRと同様に、opensslコマンドを使用します。
- openssl x509 -text -noout -in <証明書ファイル名>
- 証明書を確認する際の基本的なポイントは、下記の通りです。
- Version(バージョン)
- Serial Number(シリアル番号)
- Issuer(発行者)
- Validity(有効期間の開始と満了)
- Subject(主体者)
- Subject Public Key Info(主体者の公開鍵アルゴリズム、主体者の公開鍵)
- また、X509v3 extensionsセクションのBasic ConstraintsにあるCA属性を確認することで、サーバー証明書かCA証明書かを判断します。CA属性は、下記の通り。
- CA:FALSE → サーバー証明書
- CA:TRUE → CA証明書
- opensslコマンドのサンプルはこちらを参照。
参考資料
AmazonLinux_CentOS,OperatingSystem,Ubuntu(WSL),セキュリティ関連
Posted by takaaki