2.6. GnuTLS を使用したプライベート CA の作成
プライベート証明機関 (CA) は、シナリオで内部ネットワーク内のエンティティーを検証する必要がある場合に役立ちます。たとえば、管理下にある CA によって署名された証明書に基づく認証を使用して VPN ゲートウェイを作成する場合、または商用 CA への支払いを希望しない場合は、プライベート CA を使用します。このようなユースケースで証明書に署名するために、プライベート CA は自己署名証明書を使用します。
前提条件
-
sudo
を使用して管理コマンドを入力するための root
権限または権限がある。そのような特権を必要とするコマンドは、#
でマークされています。 システムにはすでに GnuTLS がインストールされている。インストールしていない場合は、次のコマンドを使用できます。
$ yum install gnutls-utils
手順
CA の秘密鍵を生成します。たとえば、次のコマンドは、256 ビットの楕円曲線デジタル署名アルゴリズム (ECDSA) キーを作成します。
$ certtool --generate-privkey --sec-param High --key-type=ecdsa --outfile <ca.key>
キー生成プロセスの時間は、ホストのハードウェアとエントロピー、選択したアルゴリズム、およびキーの長さによって異なります。
証明書のテンプレートファイルを作成します。
任意のテキストエディターでファイルを作成します。以下に例を示します。
$ vi <ca.cfg>
ファイルを編集して、必要な証明書の詳細を含めます。
organization = "Example Inc." state = "Example" country = EX cn = "Example CA" serial = 007 expiration_days = 365 ca cert_signing_key crl_signing_key
手順 1 で生成した秘密鍵を使用して署名された証明書を作成します。
生成された <ca.crt> ファイルは、1 年間他の証明書に署名するために使用できる自己署名 CA 証明書です。<ca.crt> ファイルは公開鍵 (証明書) です。ロードされたファイル <ca.key> が秘密鍵です。このファイルは安全な場所に保管してください。
$ certtool --generate-self-signed --load-privkey <ca.key> --template <ca.cfg> --outfile <ca.crt>
CA の秘密鍵に安全なアクセス許可を設定します。次に例を示します。
# chown <root>:<root> <ca.key> # chmod 600 <ca.key>
次のステップ
自己署名 CA 証明書をクライアントシステムのトラストアンカーとして使用するには、CA 証明書をクライアントにコピーし、クライアントのシステム全体のトラストストアに
root
として追加します。# trust anchor <ca.crt>
詳細は、3章共通システム証明書の使用 を参照してください。
検証
自己署名 CA に関する基本情報を表示します。
$ certtool --certificate-info --infile <ca.crt> Certificate: … X509v3 extensions: … X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Certificate Sign, CRL Sign
証明書署名要求 (CSR) を作成し、CA を使用して要求に署名します。CA は、CSR に基づいて証明書を正常に作成する必要があります。次に例を示します。
CA の秘密鍵を生成します。
$ certtool --generate-privkey --outfile <example-server.key>
任意のテキストエディターで新しい設定ファイルを開きます。以下に例を示します。
$ vi <example-server.cfg>
ファイルを編集して、必要な証明書の詳細を含めます。
signing_key encryption_key key_agreement tls_www_server country = "US" organization = "Example Organization" cn = "server.example.com" dns_name = "example.com" dns_name = "server.example.com" ip_address = "192.168.0.1" ip_address = "::1" ip_address = "127.0.0.1"
以前に作成した秘密鍵を使用してリクエストを生成します
$ certtool --generate-request --load-privkey <example-server.key> --template <example-server.cfg> --outfile <example-server.crq>
証明書を生成し、CA の秘密鍵で署名します。
$ certtool --generate-certificate --load-request <example-server.crq> --load-ca-certificate <ca.crt> --load-ca-privkey <ca.key> --outfile <example-server.crt>
関連情報
-
システムの
certtool(1)
およびtrust(1)
の man ページ
-
システムの