Azure Web Apps + Let’s EncryptでSSL化する!

こんにちは!

今回は、Azure Web Apps + Let’s EncryptでSSL化してみようと思います!
無料でサイトをSSL化です。

Let’s Encryptとは?

Let’s Encrypt は、認証局(CA)として「SSL/TLSサーバ証明書」を無料で発行するとともに、証明書の発行・インストール・更新のプロセスを自動化することにより、TLS や HTTPS(TLSプロトコルによって提供されるセキュアな接続の上でのHTTP通信)を普及させることを目的としているプロジェクトです。

引用:Let’s Encrypt 総合ポータル


証明書発行からSSL設定までの手順

▼前提条件
・Web AppのプランはBasic以上
・独自ドメイン設定済み

Azure ADへのアプリ追加

まず、Azureポータルにログインして、Azure ADを開きます。

「アプリの登録」→「新しいアプリケーションの登録」を開きます。

「作成」画面が開くので、「アプリの名前」・「アプリケーションの種類:Webアプリ/API」・「サインオンURL:適当」を設定します。
サインオンURLは、実際のWebサイトURLでなくても大丈夫です。

アプリの作成がされるとこのように表示されます。

※注意!
アプリケーションの作成は、SSL化したいWeb Appがあるサブスクリプションで作成する必要があります。

作成したアプリケーションを開き、キーの取得を行います。
「設定」→「キー」を開き、「説明:キーの説明」を入力し、上部「保存」をクリックします。
するとキーが表示されるのでメモします。

※注意!
このキーは、ページを遷移してしまうと見れなくなりますので、必ずメモしてください。

プロパティから「アプリケーションID」をコピーしておきます。


作成したアプリケーションにWeb Appの権限付与

Azure ADで作成したアプリケーションにSSL化したいWeb Appの権限を付与します。

SSL化したいWeb Appを開き。「アクセス制御(IAM)」→「+追加」をクリックします。
「アクセス許可の追加」が表示されるので、「役割:共同作成者」・「選択:作成したアプリケーション名」を設定して追加します。

追加するとこんな感じで表示されます。



ストレージアカウントのキー取得

ストレージアカウントを作成しておき、キーの取得をしてください。
ストレージアカウント名とキーをメモしておきます。



Web Appのアプリケーション設定

SSL化するWeb Appのアプリケーション設定を行います。

SSL化したいWeb App→「アプリケーション設定」→「アプリ設定」を開きます。
ここに書き値を追加します。

項目
AzureWebJobsStorage DefaultEndpointsProtocol=https;AccountName={storage account name};AccountKey={storage account key}
{storage account name}はストレージアカウント名を入力します。
AzureWebJobDashboard 上記と同じ値を入れます。
letsencrypt:Tenant xxxx.onmicrosoft.com
サブスクリプションのドメイン
letsencrypt:SubscriptionId サブスクリプションID
letsencrypt:ClientId Azure ADで作成したアプリケーションのアプリケーションID
letsencrypt:ClientSecret Azure ADで作成したアプリケーションのキー
letsencrypt:ResourceGroupName Web Appが配置されているリソースグループ名
letsencrypt:ServicePlanResourceGroupName Web Appのサービスプランが配置されているリソースグループ名

※注意!
Web Appとサービスプランが別のリソースグループに配置されている場合エラーとなるので、同じリソースグループに配置する必要があります。

拡張機能のインストール

SSL化したいWeb Appの「拡張機能」を開き、上部「追加」をクリックします。

「拡張機能の選択」の中に「Azure Let’s Encript (x86)」があるので選択します。
64bitのWeb Appの場合はx64を選択します。

インストールが完了するとこのように表示されます。



証明書のインストール

では、証明書のインストールを行っていきます!

インストールした拡張機能の「Azure Let’s Encript (x86)」を開き、上部「参照」をクリックします。

「Authentication Settings」が開きます。
ここはこのまま次に進みます。

「Custom Domains and SSL」が開くので、ここも次に進みます。

「Request and Install Certificate」が開くので、「Hostnames:設定した独自ドメイン」を選択、「Email:メールアドレス」を入力して「Request and Install Certificate」をクリックします。

証明書のインストールが成功すると下記画面になります。

ここで失敗するとこんな画面になります。

このエラーが表示されたら下記を行ってください。

エラー画面が表示されたら(403エラー)

解決方法は2つあります。
まず1から行ってダメであれば、2もお試しください。

1、Web Appに登録したAzure ADのアプリケーションの権限を変更する

先程は、共同管理者に設定したかと思います。

これを「所有者」に変更します。
所有者にするには、先程登録したものを削除して、もう一度登録します。

これをやったら再度証明書のインストールを行います。

2、サブスクリプションの権限もAzure ADで作ったアプリケーションに付与する

「サブスクリプション」を開き、上記と同じ方法でアプリケーションに権限を付与します。
権限は「所有者」にします。

これで、再度証明書のインストールを行ってください。
2をやれば確実に行けると思います。

証明書の割り当て

証明書のインストールが完了するとWeb Appの証明書のことろに証明書が表示されます。
この証明書をバインドします。

「バインディングの追加」をクリックします。
証明書とドメインを選択して。「SSLの種類」では「SNI SSL」を選択します。
保存をして、下記のように表示されます。



それでは、HTTPSで接続!

WebサイトにHTTPSで接続してみます。
鍵マークが表示され証明書を開くと「発行者:Let’s Encrypt Authority X3」となっていることが確認できます。

これでLet’s Encryptを利用したSSL化は以上です。

意外と簡単に無料でSSLサイトを作成できます。
証明書の有効期限は3か月となっていますが、Web Jobにより自動更新されます。