Windows11、Apacheでの自己証明書(オレオレ証明書)のやり方メモ

掲載日
更新日

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

環境

  • Windows11
  • Apache2.4

手順

証明書発行

  • Apacheのconf/openssl.confに、以下を追加します。
[ alternate_names ]
DNS.1        = example.com
DNS.2        = test.test

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コマンドで証明書を発行します。
    この時、あらかじめopenssl.confのパスを指定する必要があるため、setコマンドも実行しています。
> 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]:
# 省略
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を開いて以下を追加します。
    AddHandler、AddTypeは自分の環境に合わせてPHPの設定を入れていますが、実際は各自の環境に合わせて変更ください。
<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
    • BlueSkyで共有する
    • Hatenaで共有する
記事の作成者のW.Aのアイコン

この記事を書いた人

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

Comment

関連記事

  • SSLエラーで一部の環境のみ表示されない原因と対応のサムネイル画像

    SSLエラーで一部の環境のみ表示されない原因と対応

    掲載

    アクセスする環境(PC)によってサイトのSSL対応状況が異なっている(ブラウザの鍵マークが赤くなるPCと赤くならないPCがある)トラブルの原因が「中間証明書の期限切れ」だった時の備忘録。opensslコマンドを使った調査方法をまとめました。

  • 複数ドメイン管理でindex.htmlを省略リダイレクトするのサムネイル画像

    複数ドメイン管理でindex.htmlを省略リダイレクトする

    掲載

    一つのサーバーで複数のドメインのサイトを管理している場合に、全てのサイトで「index.html」へのアクセスを「index.html」が無いURLにリダイレクトさせたい時、一サイトずつ設定すると手間と維持のコストがかかります。そこで、Apacheの「HTTP_HOST」変数を使ってまとめてリダイレクトする方法の解説をしています。

  • Apache手動インストールしたらcertbot更新が大変だった話のサムネイル画像

    Apache手動インストールしたらcertbot更新が大変だった話

    掲載

    ApacheをAlmaLinux9に手動インストールしたところ、certbotで証明書を更新しようとすると「NoInstallationError」エラーが出ていたため、「httpdのパスを通す」「設定ファイルの場所を明示するもしくはシンボリックリンクを貼る」という対処方法をまとめた備忘録です。

check コピーしました!