■PrivateCA(プライベート認証局)とは🤔?
企業や組織が社内システムや特定の用途のために、自社で独自に構築・運用する認証局(CA)のこと
パブリックCA(SSL/TLS証明書など)が不特定多数のWebサイトの証明書を発行するのに対し、
プライベートCAは社内ネットワーク、mTLS、VPNなど限られた範囲で、信頼できるデジタル証明書を発行・管理し、安全な通信や認証を実現するために使われる
コストを抑えつつ、自社のポリシーに合わせて自由にカスタマイズできるのが特徴
■特記事項⚠️
- 汎用モード:1CA = 4万円/月 と高額💰 短期証明書モード**:**1CA = 5千円/最大7日間
- CAを削除することで料金が発生しなくなる → 非アクティブ状態でも料金が発生するため注意
- ルートCAは自己署名証明書で、信頼の起点となる
通常オフラインで厳重に管理が必要 → AWS側が管理しているため問題なし
■認証局・証明書の種類
| 用語 | 用途/意味 |
|---|---|
| ルートCA | 認証局 (CA) 階層の最上位に位置する信頼の起点となる証明書発行機関であり、下位CA証明書を発行する |
| 下位CA(中間CA) | クライアント証明書を発行する 1つのルートCAで複数の下位CA証明書を発行可能 |
| クライアント証明書 | |
| (エンドエンティティ証明書) | ・アクセス元のクライアントが所持(に配置)する証明書 →これを持っていないとアクセスできないように制限できる ・1つの下位CAで複数のクライアント証明書を発行可能 |
| サーバ証明書 |
身元をクライアントに証明するための証明書(SSL証明書など) →NLBでロードバランシングやオンプレなどは、直接コンテナやサーバにACMからエクスポートしたSSL証明書を発行して配置する必要がある →ACMで発行する |
| 証明書署名要求(CSR) | 証明書発行時に必要な署名要求 →例えば、ルートCAが下位CAに証明書を発行する際、 下位CAは自身の秘密鍵で署名されたCSRをルートCAに提出し、ルートCAはこのCSRを受け取り、内容を検証、自身の秘密鍵で署名して下位CA証明書を発行する |
| ルートCA証明書 | 自己署名で信頼した証明書 |
| 下位CA証明書 | ルートCAで署名して信頼した証明書 |
| ルートCA秘密鍵/公開鍵 | CA作成時に生成される |
| 下位CA秘密鍵/公開鍵 | CA作成時に生成される |
■ 認証局作成、証明書発行の流れ
① 認証局(CA)を作成する
・ルートCA
・下位CA
② 証明書を発行する
・ルートCA証明書 :自分自身のCAを指定して自己署名し発行する
・下位CA証明書 :ルートCAを指定して署名し発行する
・クライアント証明書 :下位CAで署名し発行する(マネコンだと自動で署名)
■クライアント証明書認証の流れ
■CFnで構築
① 認証局を作成する
Resources:
# ----------------------------------------------------------
# CertificateAuthority ルートCA
# ----------------------------------------------------------
RootCA:
Type: AWS::ACMPCA::CertificateAuthority
Properties:
KeyAlgorithm: RSA_2048 # キーアルゴリズム
SigningAlgorithm: SHA256WITHRSA # 署名アルゴリズム
Subject:
CommonName: root-ca
Country: !Ref Country # 組織の所在国、2文字のISOコード
Locality: !Ref Locality # 組織の所在地の市町村名
Organization: !Ref Organization # CAを運営する組織の正式名称
OrganizationalUnit: !Ref OrganizationalUnit # 組織内の部署や部門名
State: !Ref State
Type: ROOT # ルートCA
UsageMode: GENERAL_PURPOSE # GENERAL_PURPOSE:汎用証明書、SHORT_LIVED_CERTIFICATE:短期証明書
Tags:
- Key: Name
Value: root-ca
# ----------------------------------------------------------
# CertificateAuthority 下位CA
# ----------------------------------------------------------
SubordinateCA:
Type: AWS::ACMPCA::CertificateAuthority
Properties:
KeyAlgorithm: RSA_2048
SigningAlgorithm: SHA256WITHRSA
Subject:
CommonName: subordinate-ca
Country: !Ref Country
Locality: !Ref Locality
Organization: !Ref Organization
OrganizationalUnit: !Ref OrganizationalUnit
State: !Ref State
Type: SUBORDINATE # 下位CA
UsageMode: GENERAL_PURPOSE
Tags:
- Key: Name
Value: subordinate-ca
② 証明書を発行する
※クライアント証明書はマネージドコンソールで手動発行(手順は別途記載予定)
# ----------------------------------------------------------
# Certificate ルートCA
# ----------------------------------------------------------
RootCertificate:
Type: AWS::ACMPCA::Certificate
Properties:
CertificateAuthorityArn: !GetAtt RootCA.Arn # 自己署名
CertificateSigningRequest: !GetAtt RootCA.CertificateSigningRequest # 自分のCSRを指定して、自分に提出する
SigningAlgorithm: SHA256WITHRSA
TemplateArn: arn:aws:acm-pca:::template/RootCACertificate/V1 # 公式のテンプレートを指定。デフォルトでもいいのか?
Validity: # 証明書の有効期間 短いほどセキュリティ高い
Type: YEARS
Value: 10
# ----------------------------------------------------------
# Certificate OEM-A 下位CA
# ----------------------------------------------------------
OemASubordinateCertificate:
Type: AWS::ACMPCA::Certificate
DependsOn: RootCAActivation
Properties:
CertificateAuthorityArn: !GetAtt RootCA.Arn # ルートCAを指定して署名してもらう
CertificateSigningRequest: !GetAtt SubordinateCA.CertificateSigningRequest # 自分のCSRを指定して、ルートCAに提出する
SigningAlgorithm: SHA256WITHRSA
TemplateArn: arn:aws:acm-pca:::template/SubordinateCACertificate_PathLen0/V1
Validity:
Type: YEARS
Value: 5
③ 認証局を有効化する
# ----------------------------------------------------------
# CertificateAuthorityActivation ルートCA
# ----------------------------------------------------------
RootCAActivation:
Type: AWS::ACMPCA::CertificateAuthorityActivation
Properties:
Certificate: !GetAtt RootCertificate.Certificate
CertificateAuthorityArn: !GetAtt RootCA.Arn
Status: ACTIVE
# ----------------------------------------------------------
# CertificateAuthorityActivation 下位CA
# ----------------------------------------------------------
SubordinateCAActivation:
Type: AWS::ACMPCA::CertificateAuthorityActivation
Properties:
Certificate: !GetAtt SubordinateCertificate.Certificate
CertificateAuthorityArn: !GetAtt SubordinateCA.Arn
CertificateChain: !GetAtt RootCertificate.Certificate
Status: ACTIVE

