CA を生成したら、クライアント証明書を生成できます。
クライアント証明書を生成するには、証明書署名要求 (CSR) を生成します。CSR には、サーバーにセキュアに渡す必要があるすべての情報が含まれています。
ユーザーが発行した有効な証明書をクライアントが持っているかどうかを確認するだけの場合は、情報をエンコードする必要はありません。クライアントが証明書をサーバーに提示すると、サーバーは証明書を CA に対して検証し、そのクライアント証明書がユーザーによって生成されたかどうかを検証します。ただし、SSL ではその CSR の subject が要求されます。サーバーにほかの情報を渡す必要がない場合は、subject に証明書が発行された国を設定できます。たとえば、subject に C=US を設定できます。
クライアントのユーザー名を証明書にエンコードして、サーバーがクライアントを識別できるようにすることをお勧めします。ユーザー名は、リポジトリへのアクセス権の付与対象となるユーザーの名前です。CN はこのために使用できます。証明書の鍵を抽出するの説明に従って、最終的な証明書の鍵を見つけて抽出できるように、この CSR にラベルを指定します。
次のコマンドを使用して CSR を生成します。
$ pktool gencsr subject="C=US,CN=username" label=label format=pem \ outcsr=cert.csr
次の OpenSSL コマンドを使用して、cert.csr ファイル内の CSR を検査します。
$ openssl req -text -in cert.csr
証明書を作成するには、CA によって CSR が署名されている必要があります。CSR に署名するには、次の情報を提供します。
クライアント証明書の認証局の作成に示すように、gencert コマンドを使用して CA を作成したときに subject に使用したものと同じ文字列を証明書の issuer に設定します。
16 進数のシリアル番号を設定します。この例では、CA のシリアル番号は 0x01 と指定されているため、最初のクライアント証明書のシリアル番号は 0x02 になります。新しいクライアント証明書を生成するたびにシリアル番号を増分します。
各 CA およびその子孫クライアントの証明書には、独自の一連のシリアル番号があります。キーストアに複数の CA が構成されている場合は、クライアント証明書のシリアル番号を正しく設定してください。
signkey をキーストア内の CA のラベルに設定します。
outcert を証明書ファイルの名前に設定します。アクセス対象のリポジトリのあとに証明書および鍵を指定することをお勧めします。
次のコマンドを使用して CSR に署名します。
$ pktool signcsr signkey=CAlabel csr=cert.csr \ serial=0x02 outcert=reponame.crt.pem issuer="CN=name"
証明書は reponame.crt.pem ファイルに作成されます。次の OpenSSL コマンドを使用して証明書を検査します。
$ openssl x509 -text -in reponame.crt.pem
キーストアからこの証明書の鍵を抽出します。証明書署名要求を生成するで CSR を生成するために gencsr を実行したときに指定したものと同じラベル値を label に設定します。次のコマンドを使用して、キーストアから鍵をエクスポートします。
$ pktool export objtype=key label=label outformat=pem \ outfile=reponame.key.pem
SSL 保護されたリポジトリにアクセスする必要があるクライアントシステムに、証明書および鍵を転送します。
SSL 保護されたリポジトリにアクセスするには、クライアントシステムは証明書および鍵のコピーを保持し、パブリッシャーの構成に証明書および鍵を指定する必要があります。
証明書 (reponame.crt.pem) および鍵 (reponame.key.pem) を各クライアントシステムにコピーします。たとえば、各クライアントの /var/pkg/ssl ディレクトリにこれらをコピーできます。
次のコマンドを使用して、生成された証明書および鍵をパブリッシャーの構成に指定します。
$ pkg set-publisher -k reponame.key.pem -c reponame.crt.pem \ -p https://repolocation
SSL 認証は、HTTPS のリポジトリ URI でのみサポートされます。ファイルリポジトリの URI では、SSL 認証はサポートされません。