レンタルサーバーSSL、HTTPS強制・リダイレクト・Basic認証でも更新する方法

2019-10-09

近年レンタルサーバーではlet’s encrypt によるSSL化が常識になっている。ボタン一つでSSLの設定が完了し更新作業もよしなにやってくれる。なのでレンサバでも簡単にhttps化出来るわけだ。

一方、レンサバではapacheやnginxのconfはいじれないのが一般的だ。つまりhttps強制やリダイレクト・リライト・basic認証などは基本的に.htaccessで設定する。これ設定を誤ればlets encryptの更新がコケてしまう。

SSLの更新が失敗するのは?(.well-knownディレクトリ)

let’s encrypt では更新時に以下のパスにアクセスする。

your-domain.com:80/.well-known/*

つまりhttpリクエストで、.well-knownディレクトリにアクセスできる必要があるのだ。なので全てのアクセスに対してhttps強制やBasic認証をかけていたらレンタルサーバーのSSl自動更新時に失敗してしまう。

.htaccessでSSL更新可能設定

通常はapacheやnginxのconfでこの.well-knownに対しての80ポートアクセスを許可(妨げない設定)してlet’s encryptの更新を正常に動作するようにする。しかし前述の通りレンタルサーバーではそれができないので.htaccssで設定するしかない。

HTTPS強制に対しては以下のような設定か。

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !(^/\.well-known/)
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

サイト全体にBasic認証がかかっている時のLets encryptの更新は以下か。

SetEnvIf Request_URI "/.well-known*" wn
AuthUserFile "/hoge/.htpasswd"
AuthName "Please enter your ID and password"
AuthType BASIC
Satisfy any

require valid-user

Order Deny,Allow
Deny from all 
allow from env=wn