証明書を発行できる中間 CA を作成しますか?

証明書を発行できる中間 CA を作成しますか?

Outlook で Office 365 の署名/暗号化に使用する CA と中間 CA を作成しようとしています。一連のチュートリアルに従い、OpenSSL を使用して証明書を生成する CA と中間 CA を作成することができました。2 つの問題が発生しています。

  1. エンドユーザーの x509 エンドユーザー証明書を生成すると、中間 CA に証明書を発行する権限がないため、無効としてフラグが付けられます。
  2. 代わりにルート CA を使用してエンドユーザー証明書を生成すると、電子メールに署名して暗号化することはできますが、しばらくすると機能しなくなります。

問題 2 は、エンド ユーザー証明書が中間 CA によって署名されていないことが原因であると思います。Exchange Online では、SMIMEExpiredCertificateThumbprint はルート CA ではなく中間証明書の拇印を返します。ルート CA が生成したエンド ユーザー証明書を GAL に公開し、数通のメールをすぐに送信することはできますが、Outlook が GAL と同期すると、証明書が中間証明書から生成されていないことがわかり、認証されていないと宣言されます。

問題 1 を解決すれば問題 2 も解決すると思いますが、中間 CA が証明書を発行するための権限を設定する方法がわかりません。何か助けはありますか?

現在、ルート CA と中間 CA を生成する方法は次のとおりです。

openssl genrsa -out ca.key 4096
openssl req -new -x509 -days 1826 -key ca.key -out ca.crt
openssl genrsa -out ia.key 4096
openssl req -new -key ia.key -out ia.csr
openssl x509 -req -days 730 -in ia.csr -CA ca.crt -CAkey ca.key -serial -out ia.crt

クライアントは次のように生成されます。

openssl genrsa -aes128 -out email.key 2048
openssl req -new -key email.key -out email.csr
openssl x509 -req -days 365 -in email.csr -CA ia.crt -CAkey ia.key -CAcreateserial -out email.crt
openssl pkcs12 -export -in email.crt -inkey email.key -out email.pfx
openssl x509 -in email.crt -serial -noout >> email.meta
openssl x509 -in email.crt -fingerprint -noout  >> email.meta

答え1

つまり、基本的に私は OpenSSL の問題を解決する方法を必ずしも理解したわけではありませんが、GnuTLS が使いやすい方法で証明書の使用を促すことを発見しました。

ルート CA を次のように生成しています。

certtool --generate-privkey --bits 4096 --outfile ca.key
certtool --generate-self-signed --load-privkey ca.key --template ca.vars --outfile ca.crt

私の ca.vars は次のようになります:

organization = [Company Name]
unit = [Org Unit]
locality = [City]
state = [State]
country = [Country Code]
challenge_password = [password]
password = [password]
expiration_days = 1825
serial = 1
ca
cert_signing_key
crl_signing_key
cn = '[Company Name] Root CA 000001'

注: パスワードは ca.vars ファイルにリストされていますが、これは安全ではありません。ただし、私の実装では、スクリプトが vars ファイルを生成し、その後 srm 削除ツールを使用してそれを削除します。スクリプトを使用して vars ファイルを生成していない場合は、password 行と challenge_password 行を省略するだけで、プロンプトが表示されます。

中間 CA は次のようになります。

certtool --generate-privkey --bits 4096 --outfile ia.key
certtool --generate-request --template ia.vars --load-privkey ia.key --outfile ia.csr
certtool --generate-certificate --template ia.vars --load-request ia.csr --load-ca-certificate ca.crt --load-ca-privkey ca.key  --outfile ia.crt

ca.vars と ia.vars の違いは、有効期限を 365 日に設定し、次の行を追加することです。

path_len = 1

そこから、openssl と ia_[sign/encrypt] 証明機関を使用して上記のスクリプトを実行し、Office 365 の Outlook でメールの署名/暗号化に使用できる x509 証明書を生成できます。参考までにもう一度貼り付けておきます。

openssl genrsa -aes128 -out email.key 2048
openssl req -new -key email.key -out email.csr
openssl x509 -req -days 365 -in email.csr -CA ia.crt -CAkey ia.key -CAcreateserial -out email.crt
openssl pkcs12 -export -in email.crt -inkey email.key -out email.pfx
openssl x509 -in email.crt -serial -noout >> email.meta
openssl x509 -in email.crt -fingerprint -noout  >> email.meta

これが私以外の誰かの役に立つことを願っています! :)

関連情報