Windows11、Apacheでのオレオレ証明書のやり方メモ

掲載日

サービスワーカークリップボードなど、localhosthttpsじゃないと処理できないjsの機能が最近多く、ローカルでの実装が大変なでWindows、Apache環境での警告が出ないオレオレ証明書の入れ方の備忘録を残しておきます。

環境

  • Windows11
  • Apache2.4

手順

証明書発行

  • Apacheのconf/openssl.confに、以下を追加します。
[ alternate_names ]
DNS.1        = example.com
# example.comの所を任意のドメインに変更。複数ある場合以下のような形で追加できる
DNS.2        = test.test
 
  • 同じくconf/openssl.confで、[ v3_ca ]という段落があるので探して追記します。
[ v3_ca ]
# 省略
subjectAltName=@alternate_names
keyUsage= digitalSignature, keyEncipherment
# 省略 

 

  • 同じくconf/openssl.confで、copy_extensionsという項目があるので、探してコメントアウトします。
# copy_extensions = copy
↓
copy_extensions = copy 

 

  • 上記設定完了後にコマンドプロンプト開いて証明書を発行します。
# openssl.confのパスをあらかじめ指定する必要がある。
> set OPENSSL_CONF=C:\XXXXX\XXXXX\conf\openssl.cnf
> openssl genrsa -out private.key 3072
Generating RSA private key, 3072 bit long modulus (2 primes)
# 省略
> openssl req -new -x509 -key private.key -sha256 -out certificate.pem -days 730
You are about to be asked to enter information that will be incorporated
# 省略
-----

# 色々聞かれますが、全てエンターキーでOKです。
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:

証明書インストール

上記までの処理を行うと、実行したディレクトリ上に以下の二つのファイルが作成されます。

  • private.key
    いわずもがな秘密鍵
  • certificate.crt
    証明書

 

certificate.crtを信頼できる証明書としてインストールしていきます。

 

  1. まず、certificate.crtをダブルクリックすると、以下のようなウィンドウが開きます。
    証明書のインストールウィンドウのスクリーンショット。
    「証明書のインストール」ボタンをクリックします。
  2. 証明書のインポートウィザードが開きます。
    保存場所の「ローカルコンピューター」をクリックし、「次へ」をクリックします。
    証明書のインポートウィザードのスクリーンショット。
  3. 「証明書をすべて次のストアに配置する」をクリックし、「参照」ボタンをクリックします。
    証明書ストアのスクリーンショット。
  4. 「証明書ストアの選択」ウィンドウが開くので、「信頼されたルート証明機関」をクリックし、「OK」ボタンをクリックします。
    証明書ストアのスクリーンショット。
  5. インポートウィザードに戻るので、「次へ」ボタンをクリックします。
    インポートウィザードに戻ったスクリーンショット。
  6. 完了画面が表示されるので、「完了」ボタンをクリックします。
    インポートウィザードの完了画面のスクリーンショット。
    正しくインポートされたウィンドウのスクリーンショット。

Apacheでテスト用サイトをhttpsで表示する

  • conf/httpd.confを開いて以下を追加します。
<Directory "C:\xxx\xxx"> # C:\xxx\xxxに任意のテストしたいサイトのディレクトリ
    AllowOverride All
    Require all granted
    Options Indexes FollowSymLinks
    AddHandler php-script .php .html # この辺は環境に合わせて設定する
    AddType application/x-httpd-php .php .html
</Directory>
<VirtualHost *:443>
  ServerName test.test:443 # test.testは任意のテスト用ドメイン
  DocumentRoot "C:\xxx\xxx"
  ErrorLog "logs/ssl-test-error.log"
  CustomLog "logs/ssl-test.log" common
  SSLEngine on
  # 証明書発行手順で発行した鍵のディレクトリとファイル名
  SSLCertificateFile "C:\xxx\xxx\xxx.crt"
  SSLCertificateKeyFile "C:\xxx\xxx\xxx.key"
</VirtualHost> 

 

  • hostsに追加します。
    hostsはwindowsなら通常 C:\Windows\System32\drivers\etc\にあると思います。)
xxx.xxx.xxx.xxx    test.test 
# xxx.xxx.xxx.xxx: 自分のローカルIP 
# test.test: テスト用ドメイン 

 

  • コマンドプロンプトを起動し、httpdサービスを再起動します。
httpd -k restart
or 
httpd -k graceful

確認

httpsでテストサイトにアクセスし、警告が表示されないことを確認します。

(chromeで確認しています。EdgeやFireFoxでも同じ手順でいけるのかは不明。)

chromeブラウザで開発用のhttpsのサイトにアクセスし、証明書エラーが表示されていないことを確認するスクリーンショット。

所感

以下の理由でローカルでhttps入れてテストしたかったので、この方法でしばらくいけそうです。

  • ngrok等は一時的とはいえ外部にサービス公開されるので嫌
  • サーバー用意してLet's Encrypt入れて開発環境をちゃんとするのは趣味なのにお金かかるので嫌
  • localhostで使用出来る機能もあるけど、実環境はhttpsでアクセスするし、意外とhttps接続やドメイン由来のエラーも多いのでちゃんとローカルと実機環境を近づけたい
  • 適当なオレオレ証明書だと都度警告画面が出て来るのが面倒

参考リンク

set OPENSSL_CONF=C:\XXXXX\XXXXX\conf\openssl.cnf
記事の作成者のA.W.のアイコン

この記事を書いた人

A.W.
茨城県在住Webエンジニアです。 PHP、PostgreSQL、Linuxなどを業務で使用しています。 趣味ではGoやNuxt、Flutterをやってます。

Comment

関連記事

check コピーしました!