私はモノのインターネット製品を開発しており、クライアント証明書認証を使用して、中央サーバーで認証できるように、生産ラインで各「モノ」に独自の証明書を発行する予定です。これは、証明書を手動で発行してインストールする小規模な試験では問題なく機能しますが、本番環境へのスケールアップを準備する前に、いくつか質問があります。
1)「実際の」CAを使用してサーバー証明書を発行し、クライアント証明書を生成するメリットはありますか?これを実行することは高価であり、セキュリティの専門家ではありませんが、デバイス自体にクライアント証明書をインストールしている場合、サードパーティを追加しても、実際には追加のメリットは得られないようです。
2)同様に多数の証明書を使用して、数万台のデバイスの認証を適切に処理できるいくつかの標準的なソフトウェアがサーバーエンドにありますか?/etc/ssl/certificatesに各クライアント証明書を貼り付けるだけで、nginx、haproxy、または同様のものを処理できると期待できますか? (年間30〜5万の「もの」を展開します)
予算を抑えたい場合は、オープンソースで自由に使用できる [〜#〜] ejbca [〜#〜] を検討することをお勧めしますが、多くの豪華な企業が機能は有料版です。彼らはスループットについて次のように主張しています。
EJBCAは標準のリレーショナルデータベースを使用するため、大規模で高性能に適しており、EJBCAを数億もの発行済み証明書に簡単にスケーリングできます。選択したアーキテクチャとインターフェースに応じて、非常に低いレイテンシ(サブ100ミリ秒)と非常に高いスループット(> 100証明書/秒)に到達できます。 [ソース]
独立したテストでは、100万を超える証明書が発行されると、これはすぐに低下することがわかりました。
質問の2番目の部分に対処する:
「実際の」CAを使用してサーバー証明書を発行し、クライアント証明書を生成するメリットはありますか?
証明書を何に使用するかによります。多くのモノのインターネット(IoT)製造プロセスでは、クライアント証明書を使用して、製造時にデバイスが企業ネットワークに対して認証され、初回の構成、ファームウェアのダウンロードなど、安全に実行したいことを実行できることを知っています。製造の最後に、これらの証明書は破棄されるか、二度と使用されません。場合によっては、外部のインターネットから隠されたプライベートの内部CAを使用することもできます。
一方、fab中に発行する証明書がデバイスに残り、製品化され、公に検証可能である必要がある場合、それは別の話です。 [たとえば、電球を作成し、ユーザーのiPhoneが本物のIPBulb、Inc電球と通信していることを確認できるようにする必要がある場合、または電球がIPBulb、Incサーバーが定期的に更新を取得します。]この場合、すべてのキーの更新と失効ステータスの確認を行う公開CAが必要です。これはすぐに複雑になり、面倒を避けるためだけに商用CAと提携することはあなたの価値があるかもしれません。
[〜#〜] edit [〜#〜]:回答を自己完結型にするために以下のコメントを挿入します。
証明書の発行を外部委託することを推奨する理由は、主に失効と証明書の更新に対処する必要があるサーバーの負荷と応答時間にあります。ほとんどの中小企業では、一流のデータセンターエンジニアを雇うよりも専門家にこれを外部委託する方が安上がりです。
失効:トリッキーな部分は、証明書を検証しているサーバーがCAに「この証明書はまだ有効ですか?」と尋ねることができる必要があるということです。非常に迅速に応答を返します(25ミリ秒未満など)。これは、オンライン証明書ステータスプロトコル(OCSP)と呼ばれます。インフラストラクチャが拡大すると、単一のOCSPサーバーでトラフィックを処理できなくなるため、応答時間を低く保つために、ライブデータベースレプリケーション、ロードバランサー、および優れたデータセンターエンジニアが必要になります。これはほとんどの中小企業の範囲を超えており、外部委託する方が安上がりです。
証明書の更新/再発行の場合:古い証明書が期限切れになる前にクライアントが新しい/再発行された証明書をダウンロードしても問題はありませんが、これをアクティブに管理しているサーバーがあり、証明書管理ポートがパブリックインターネット(潜在的な攻撃面/ハッキングポイント)に開かれている。また、約30kの証明書がすべて互いに短期間に期限切れになると、サーバーの負荷が大きくなります。繰り返しますが、あなたの会社のデータセンターエンジニアはどの程度優れていますか?