やさしいCSRの作り方

AmazonLinux_CentOS,OperatingSystem,Ubuntu(WSL),セキュリティ関連

CSR(証明書署名要求)の作り方

概要

証明書とは

  • 先ず証明書について、簡単にまとめます。公開鍵暗号方式では、公開鍵の成りすましを防止するために公開鍵証明書が使われます。この公開鍵証明書は、公開鍵と、その所有者(その他に有効期間、発行者、署名アルゴリズムなどの情報も含む)を結びつける証明書となります。
  • また、公開鍵証明書は偽装されないようにデジタル署名が使われ、認証局(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コマンドのサンプルはこちらを参照。
 

参考資料