2018.02.15

Sitesで独自ドメインを設定する~HTTPS編~

  • このエントリーをはてなブックマークに追加
  • follow us in feedly
こんにちは。鍬田です。
今回はForce.com Sitesのカスタムドメインを使用して、HTTPS化する方法をご紹介します!

以前に弊社TECH BLOGの「Sitesへの独自ドメインの設定」という記事が執筆された時は、Force.com SitesのカスタムドメインのHTTPS対応がされてなかったのですが、その後のバージョンアップでHTTPSに対応しました。

Sitesへのカスタムドメインの設定

Sitesでのカスタムドメインの設定は省略します。

これからカスタムドメインを設定する場合は、弊社記事の「Sitesへの独自ドメインの設定」を参考に設定してもらえればと思います。


[注意!!]
本記事の内容はDeveloper/SandBox組織では設定できません。本番環境のみ設定が可能です。

SSL証明書の取得

1. CSRの取得

認証局に提出する署名リクエスト(Certificate Signing Request)をSalesforceから取得します。
・Salesforceの[設定] > [セキュリティのコントロール] > [証明書と鍵の管理] >[認証機関署名証明書の作成] を選択します。

・証明書と鍵の編集画面で各項目を入力します。一意の名前はここでは「SitesSSL」にしました。

・「証明書署名要求のダウンロード」ボタンを押下し、CSRファイルを取得します。
※CSRファイルを次のステップで使用します。

2. SSL証明書取得準備

今回は無料でSSL証明書が作成可能なLet's EncriptからSSL証明書を取得します。

SSL証明書をベンダーから購入する場合は、作成したCSRファイルにCA署名済の証明書をインポートする事でSSLの設定が可能です。

[注意!!]
Let's Encriptの証明書は有効期限が90日間のみです。

証明書を自動で更新するツールも存在しますが、Sitesの証明書を高頻度で更新する運用コストが発生します。実運用で使用する証明書はベンダーからの購入を推奨します。
Let's Encryptは、すべてのWebサーバへの接続を暗号化することを目指したプロジェクトである。

支払い、サーバ設定、メールによる確認、証明書の更新といった作業を省略することで、TLS暗号化における設定や保守の複雑さを大幅に削減することを意図している。

LinuxのWebサーバーでは、HTTPSの暗号化の設定および証明書の入手・更新がわずか2つのコマンドによって可能である。

3.環境構築

証明書取得ツールとしてcertbotを使用します。
Let's Encrypt は、クライアントソフトウェア「Certbot」を使用することで、SSL/TLS サーバ証明書の取得・更新作業を自動化できる仕組みになっています。

独自ドメインがあれば、簡単なコマンド操作で SSL/TLS 証明書(無料)を取得できます。
今回はWindows10から証明書の取得を試みましたが、certbotはWindows10が非対応のようでした。

その為、Docker for Windowsを使用してLinuxの実行環境を作成しました。
Docker for Windowsのインストール手順については割愛します。

-----------検証環境-----------
- Windows10 64bit pro
- Docker for Windows (※Dockerはprofessionalエディションでないと起動不可)
- JDK(ver 1.8):keytoolを使用
- openssl 1.0.2:pkcs12作成に使用

-----------Docker for Windows設定のポイント-----------
- WindowsのBIOSの設定で、virtualizationをenableに設定する
- [コントロールパネル] > [プログラム] > [プログラムと機能] > [Windowsの機能の有効化または無効化] > [コンテナー] & [Hyper-V]のチェックボックスをONにする
Dockerが設定済の前提で解説します。
まず、以下のコマンドを実行します。

4.証明書の取得

//docker imageの取得
> docker pull centos

//dockerコンテナの作成/実行
> docker run -d -it --name sites-ssl centos

//EPELパッケージのインストール
> rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

//certbotのインストール
> yum install certbot
dockerコンテナの作成
ホスト(Windows PC)からdockerコンテナにCSRファイルをコピーし、certbotを実行します。
//コマンド実行ディレクトリにcsrファイルを配置し、dockerコンテナ内コピー
> docker cp SitesSSLcsr sites-ssl:/tmp/SitesSSLcsr 

// certbotの実行
>certbot certonly \
  --csr SitesSSL.csr \
  --manual \
  --domain sites.rodia.online \
  --agree-tos \
  --manual-public-ip-logging-ok \
  --preferred-challenges dns
docker copy file
certbotを実行すると、DNS認証用ワンタイムトークンが発番されます。
※DNSの設定が完了するまでEnterはまだ押さない

certbot_execute

「VU8A_7......8Mo」の部分をDNSのTXTレコードに設定します。

- ホスト名:_acme-callenge.{サブドメイン}
- VALUE:{ワンタイムトークン}

add_dns_txt

以下のコマンドで設定が反映されたか確認出来ます。成功すると先ほど設定した、ワンタイムトークンが画面に表示されます。
※DNSが浸透するまで時間が掛かる場合があります。
//{ドメイン}の部分は自身のドメインに置き換える
nslookup -q=txt _acme-challenge.{ドメイン}
confirm_dns_txt

dns_txt_callenge_success

成功すると上記のように「Congratulations! 」の文字が表示されます。

次に「etc/letsencrypt/live/{ドメイン}」以下に作成された証明書が配置されるのでホスト(Windows)にコピーします。
//{ドメイン}の部分は自身のドメインに置き換える
docker cp sites-ssl:/:/etc/letsencrypt/live/{ドメイン} ./
docke_copy_to_host

5.証明書の整形

さて、コピーしたファイルを見ると「xxxx.pem」というファイルが複数存在します。
中身は以下のような内容となっています。

- cert1.pem:公開鍵
- chain1.pem:中間証明書
- fullchain1.pem:公開鍵と中間証明書を結合したもの
- privkey1.pem:秘密鍵

※ファイル名の数字部は証明書の作成/更新した回数により異なります。

そのままではアップロード出来ないので、pem > pkcs12 > JKS という流れで加工していきます。

まずはpemからpkcs12フォーマットに変換します。
>openssl pkcs12 -export \ 
-out info.p12 \
-inkey privkey1.pem \
-in fullchain1.pem \
-passout pass:123456 
create_pkcs12
次に作成したinfo.p12(pkcs12ファイル)から、以下のコマンドを実行しJKSにインポートします。
>keytool -importkeystore \
-srckeystore info.p12 \
-destkeystore cert.jks \
-srcstoretype pkcs12
keytool
実行するとパスワードの入力が求められますので、opensslコマンドで設定した「-passout pass:123456 」の部分を適宜置き換えて入力します。

cert.jksというファイルが出力されれば成功です!

証明書の取込み

既存の証明書を利用したい場合や上記の手順で、証明書を取得した場合はキーストアインポートを使用します。

また、Salesforceで作成したCSRファイルを使用して証明書をベンダーから購入した場合は、CSRを発行した画面の「署名済み証明書のアップロード」ボタンから証明書をアップロードします。

今回はキーストアインポートを使用した証明書取込み手順をご紹介します。

1.証明書のアップロード

作成した証明書をアップロードします。

・Salesforceの[設定] > [セキュリティのコントロール] > [証明書と鍵の管理] >[キーストアにインポート] を選択します。

・設定したパスワードと合わせて作成したjksファイルをアップロードします。

upload_jks_error

エラーが出ました。どうやら別名の設定が必要なようです。

cert.jksを配置しているフォルダに移動し、別名の確認と変更を行います。
以下のコマンドを実行します。
//別名の確認
>keytool -list -v -keystore cert.jks

//別名の変更。「sites」は任意の名前に設定可能。以下のコマンドは別名が「1」から「sites」に変更
keytool -keystore cert.jks -changealias -alias 1 -destalias sites
change_alias
再度Salesforceの「キーストアにインポート」にトライしエラーが発生しなければ成功です。

2.Sitesの設定

・Salesforceの設定画面 > クイック検索に「ドメイン」と入力し、ドメインの設定ページへ移動します。
・設定したカスタムドメインの編集ボタンを押下します。
・「Salesforce が Salesforce のサーバ上でユーザの HTTPS 証明書を使用して、HTTPS を介してドメインを提供する」を選択して作成した証明書と紐づけて保存します。

domain_ssl_setting

設定手順は以上です。

おわりに

SSL証明書を設定した後は、その後の証明書の更新をお忘れなく!
49 件

関連する記事