今回はSSL認証についてです。
やはりネットワーク系のような見えない、見えづらいものは苦手だなぁ。
実装の前に前提知識から
まずは、全く理解ができなかったので、ここを読みました。
これによると、SalesForceがクライアントとして機能するか、サーバとして機能するかがポイント。
前者は、
- アウトバウンドメッセージ
- 代理認証要求
- Apexコールアウト
を使用するときに、クライアントとして機能し、後者は、
- サービスプロバイダ (SP)
として使用するときにサーバの役目を果たします。
今回は、Apexコールアウトをやりたいので、クライアントとしての役割を担うことになります。
さらに読み進めるとこんな記述が。
つまり、コールアウト先のサーバと証明書の共通情報を共有する必要があります。
この証明書の共通情報をCSR(Certificate Signing Request)と呼ぶそうです。
CSRを使ってコールアウト先のサーバに証明書を作らせます。
あとは、クライアント側であるSalesForceに作成させた証明書を取り込めば、SalesForceは信頼されたクライアントになるよという仕組みです。
Apexコールアウトするための準備
では、前提知識を得たところで、Apexコールアウトの準備をしましょう。
まずは、[設定]→[セキュリティコントロール]→[リモートサイトの設定]でコールアウト先のURLを登録します。
これは、SSL認証しようがしまいが関係なく登録します。
次に、[設定]→[セキュリティコントロール]→[証明書と鍵の管理]から証明書の共通情報を登録します。
証明機関署名証明書の作成を選択します。
証明書に必要情報を記載します。
表示ラベルと一意の名前は任意ですが、ここでは「csr_hoge」とします。
保存したら、証明書署名要求のダウンロードを選択します。
ダウンロードされたファイルは何だかよく分からない英数字の羅列ですが、これがCSRといわれるものです。
これを使って、サーバ側に証明書を発行してもらうことになります。
証明書を発行したら、先ほど登録した証明書に取り込みます。
署名済み証明書のアップロードを選択して、証明書のファイルをアップロードします。
これでApexからコールアウトできる準備が整いました。
Apexコードから証明書を使用してコールアウト
あとは、Apexからクライアント証明書を設定します。
やり方は簡単で、HttpRequestクラスのsetClientCertificateNameを使用するだけで設定可能です。
引数には、証明書の登録の時に作成した一意の名前をセットしてください。
HttpRequest req = new HttpRequest();
req.setEndpoint('コールアウト先のURL');
req.setMethod('GET');
req.setClientCertificateName('csr_hoge'); // 登録した一意の名前をセット
HttpResponse res = h.send(req);
// 以下省略
まとめ
まとめというよりは、ApexコールアウトのSSL認証で必要になるもの、ここを押さえておけばOK。
- リモートサイトの設定
- 証明書情報の登録
- サーバから発行された証明書をアップロード
- HttpRequestクラスのsetClientCertificateNameメソッドを使用して証明書情報をセット
コメント