社内PCでMicrosoft Edgeを使いはじめて困ったのが file:// URLに対応していないことでした。これはIEモードにすることで回避していましたが、最近になってEdgeのバージョン95からIntranetFileLinksEnabledのグループポリシー、Microsoft EdgeからのイントラネットゾーンファイルURLリンクをWindowsファイルエクスプローラーで開くことを許可する、の項目として新設されHTTPSのサイトからだけですがEdgeでもエクスプローラーで file:// のリンク先を開けられるようになったこと以下のサイトで知りました。
問題は社内のサイトをHTTPS化に必要な証明書の入手方法です。内部の独自ドメインというかドメイン名なしのサーバー名だけでサイトへアクセスしているので、Let's Encryptを使った無料の証明書入手もダメそう。それに数ヶ月とか1年毎に証明書の有効期限を迎えてその都度更新作業するのも手間です。ということで社内専用の認証局、CAを構築して自己証明書を使ったHTTPSサーバーの運用を目指します。
最初はWindows ServerのActive Directory証明書サービスを使ってドメイン内の各PCに自己証明書を配布しようと考えたのですが、どうもサブドメインの管理権限ではダメでEnterprise Adminsの権限がないとエンタープライズCAを導入できないようです。そのため証明書ストアへの自動追加ができません。AD証明書サービスにはスタンドアロンCAとして構築して証明書の発行は可能で、グループポリシーを使っての証明書配布となりますが、これだとAD証明書サービスを導入するメリットに欠けます。
ということでUbuntu 20.04でCAの構築と証明書の発行をすることにしました。ネットを検索するとそのものずばりのページがありました。
easy-rsaを使ってのCA構築と証明書作業となります。easyrsaはスクリプトファイルで、opensslコマンドで各種実行する作業を簡易化できる感じですね。easy-rsaのインストールと、一般ユーザーの作業ディレクトリーの準備をして、作業ディレクトリー内のvarsファイルを自分の環境に合わせて編集します。うちでは以下の行を変更しました。
set_var EASYRSA_REQ_COUNTRY "JP"
set_var EASYRSA_REQ_PROVINCE "TODOHFUKEN"
set_var EASYRSA_REQ_CITY "MACHI"
set_var EASYRSA_REQ_ORG "My Company Name"
set_var EASYRSA_REQ_EMAIL "mail@mydomain.local"
set_var EASYRSA_REQ_OU "My Domain"
set_var EASYRSA_ALGO "ec"
set_var EASYRSA_CA_EXPIRE 10950
set_var EASYRSA_CERT_EXPIRE 7300
set_var EASYRSA_CRL_DAYS 7300
アルゴリズムで楕円曲線を選んだのは、古いOSやブラウザは考慮しなくていいことと、こちらのほうがRSAに比べてサーバーの負荷が相対的に低いらしいことから。あとCAの有効期限を30年ちかくの10950日。証明書と失効リストの有効期限を20年としています。
そして手順書通りに
$ ./easyrsa init-pki
$ ./easyrsa build-ca
としてCAを構築、作成された~/easy-rsa/pki/ca.crtファイルが公開証明書となりますので、Windowsのドメインサーバーにコピーして、グループポリシーの、ポリシー、Windowsの設定、セキュリティの設定、公開キーのポリシー、信頼されたルート証明機関にca.crtファイルをインポートして公開証明書の配布は完了です。
次に各Webサーバーでの証明書の要求ファイルCSRの発行と、それに対するCAでの署名となりますが、それらは別の日の記事に。
クライアント側のMicrosoft Edgeからはグループポリシーで上記、IntranetFileLinksEnabledを有効にして file:// URLでエクスプローラーが開くようになったものの、クリックのたびに
このサイトは、URL:File Protocolを開こうとしています。
との確認メッセージが出ます。常に許可するにチェックをして開くとすれば、次からは出ないようになりますが、これを出したくない設定を探すとありました。これもEdgeのグループポリシーで、AutoLaunchProtocolsFromOrigins、ユーザーにメッセージを表示せずに、一覧表示された元の場所から外部アプリケーションを起動できるプロトコルの一覧を定義します、で指定可能でした。値として以下の文字列を入力。
[{"protocol":"file","allowed_origins":["https://winiis","https://ubuntu"]}]
これでメッセージなしにファイルエクスプローラーが開きます。
でもセキュリティの制限からfile:// で指定したそのものではなくて、1階層上のフォルダが開くので想定した場所でないのがいまひとつです。まあこれでも前進したということでこの辺は許容するしかないんでしょうね。