第6章 ローカル証明書を使用したスマートカード認証の設定
ローカル証明書を使用してスマートカード認証を設定するには、次の手順を実行します。
- ホストがドメインに接続されていない
- このホストで、スマートカードで認証する必要がある
- スマートカード認証を使用して SSH アクセスを設定する必要がある
-
authselect
を使用してスマートカードを設定する必要がある
このシナリオを行うには、以下の設定を使用します。
スマートカードで認証するユーザーのユーザー証明書を取得する。証明書は、ドメインで使用される信頼できる認証局によって生成される必要があります。
証明書を取得できない場合は、テスト目的で、ローカルの認証局が署名したユーザー証明書を生成します。
- スマートカードに証明書と秘密鍵を保存する。
- SSH アクセス用のスマートカード認証を設定する。
ホストがドメインの一部である場合は、そのホストをドメインに追加し、Active Directory または Identity Management 認証局が生成した証明書を使用します。
スマートカードに IdM 証明書を作成する方法は、Configuring Identity Management for smart card authentication を参照してください。
前提条件
authselect がインストールされている。
authselect ツールは、Linux ホストでユーザー認証を設定し、スマートカード認証パラメーターを設定するのに使用できます。authselect の詳細は、authselect とは を参照してください。
RHEL 8 で対応しているスマートカードまたは USB デバイス
詳細は、Smart Card support in RHEL8 を参照してください。
6.1. ローカル証明書の作成
この手順に従って、次のタスクを実行します。
- OpenSSL 認証局の生成
- 証明書署名リクエストの作成
以下の手順は、テスト目的のみを想定しています。ローカルの自己署名証明局により生成される証明書は、AD、IdM、または RHCS 認証局を使用する場合と同じように安全ではありません。ホストがドメインに含まれていない場合でも、企業の認定機関が生成した証明書を使用する必要があります。
手順
証明書を生成するディレクトリーを作成します。以下に例を示します。
# mkdir /tmp/ca # cd /tmp/ca
証明書を設定します (このテキストは、
ca
ディレクトリーのコマンドラインにコピーします)。cat > ca.cnf <<EOF [ ca ] default_ca = CA_default [ CA_default ] dir = . database = \$dir/index.txt new_certs_dir = \$dir/newcerts certificate = \$dir/rootCA.crt serial = \$dir/serial private_key = \$dir/rootCA.key RANDFILE = \$dir/rand default_days = 365 default_crl_days = 30 default_md = sha256 policy = policy_any email_in_dn = no name_opt = ca_default cert_opt = ca_default copy_extensions = copy [ usr_cert ] authorityKeyIdentifier = keyid, issuer [ v3_ca ] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer:always basicConstraints = CA:true keyUsage = critical, digitalSignature, cRLSign, keyCertSign [ policy_any ] organizationName = supplied organizationalUnitName = supplied commonName = supplied emailAddress = optional [ req ] distinguished_name = req_distinguished_name prompt = no [ req_distinguished_name ] O = Example OU = Example Test CN = Example Test CA EOF
以下のディレクトリーを作成します。
# mkdir certs crl newcerts
以下のファイルを作成します。
# touch index.txt crlnumber index.txt.attr
シリアルファイルに番号 01 を書き込みます。
# echo 01 > serial
このコマンドは、シリアル番号内に 01 を書き込みます。これは証明書のシリアル番号です。この CA によってリリースされる新しい証明書ごとに、数が 1 つ増えます。
OpenSSL root CA キーを作成します。
# openssl genrsa -out rootCA.key 2048
自己署名 root 認証局証明書を作成します。
# openssl req -batch -config ca.cnf \ -x509 -new -nodes -key rootCA.key -sha256 -days 10000 \ -set_serial 0 -extensions v3_ca -out rootCA.crt
ユーザー名のキーを作成します。
# openssl genrsa -out example.user.key 2048
このキーは、セキュリティーが保護されていないローカルシステムで生成されるため、キーがカードに格納されると、キーがシステムから削除されます。
キーはスマートカードで直接作成できます。これを行う場合は、スマートカードの製造元が作成した手順に従います。
証明書署名リクエスト設定ファイルを作成します (このテキストを ca ディレクトリーでコマンドラインにコピーします)。
cat > req.cnf <<EOF [ req ] distinguished_name = req_distinguished_name prompt = no [ req_distinguished_name ] O = Example OU = Example Test CN = testuser [ req_exts ] basicConstraints = CA:FALSE nsCertType = client, email nsComment = "testuser" subjectKeyIdentifier = hash keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = clientAuth, emailProtection, msSmartcardLogin subjectAltName = otherName:msUPN;UTF8:testuser@EXAMPLE.COM, email:testuser@example.com EOF
example.user 証明書用の証明書署名リクエストを作成します。
# openssl req -new -nodes -key example.user.key \ -reqexts req_exts -config req.cnf -out example.user.csr
新しい証明書を設定します。有効期限は 1 年に設定されています。
# openssl ca -config ca.cnf -batch -notext \ -keyfile rootCA.key -in example.user.csr -days 365 \ -extensions usr_cert -out example.user.crt
この時点で、認証局と証明書が正常に生成され、スマートカードにインポートできる状態になります。