💬

【Playwright】独自実装なしでクライアント証明書に対応する

に公開

概要

こんにちは、booostのバックエンドエンジニアのma_meです。
社内ポータルなど、mTLS(クライアント証明書)で保護されたサイトをE2Eテストするケースがあると思います。
Playwright v1.43以降は公式の clientCertificates API が追加され、クライアント証明書の取り回しが簡単になりましたので、その使い方を紹介します。

公式ドキュメント:https://playwright.dev/docs/api/class-testoptions#test-options-client-certificates

clientCertificates APIの概要

Playwright v1.43からclientCertificatesが利用でき、独自実装なしでmTLSを通過できます。
指定する主なプロパティは次のとおりです(その他のオプションは公式ドキュメントを参照)。

  • origin:アクセス先のオリジン(例:https://example.com、ポートがある場合はhttps://example.com:8443
  • certPath:クライアント証明書の形式がPEMの場合はこのkeyに指定する
  • pfxPath :クライアント証明書の形式PFXPKCS12の場合はこのkeyに指定する
  • keyPath:秘密鍵(PEM)

スクリプトでの利用(browser.newContext

スクリプトで直接コンテキストを作る場合は以下のとおりです。

// script.ts
import { chromium } from 'playwright';

(async () => {
  const browser = await chromium.launch();
  const context = await browser.newContext({
    ignoreHTTPSErrors: true,
    clientCertificates: [
      {
        origin: process.env.BASE_URL!,       // 例: <https://example.com>
        certPath: process.env.CLIENT_CERT!,  // 例: ./certs/client.crt.pem
        keyPath: process.env.CLIENT_KEY!,    // 例: ./certs/client.key.pem
      },
    ],
  });
  const page = await context.newPage();
  await page.goto(process.env.BASE_URL!);
  // ... テスト操作 ...
  await browser.close();
})();

まとめ

clientCertificatesの登場で、mTLS対応は設定を書くだけで完結するようになっています。
クライアント証明書を理由にPlaywrightを避けていた場合は、今一度検討してみるのはどうでしょうか。

Booost

Discussion