Windows Server の証明書サービスを復旧させる方法

amatsukami.jp サーバの SSL 通信部分はボクしか使わないため、オレオレ証明書を使っている。この証明書はボクが勝手に発行したので、他人がブラウザで開くとエラーが出る。ボクのためだけの物なので今の所は問題が無い。
でね、この勝手に証明書を発行するシステムが Windows Server にはあるわけだけど、ftp の証明書の期限が切れていたので更新しようとしたら更新ページがエラーで表示されない。なんだこれ?? 何かいじったかなと思っていじって見るも特に設定は問題なさそうに見える。

エラーの内容は、web.config ファイルが見つからない的な内容なのだが……う~ん、あるよなぁと思っていろいろ調べて見ると、本来あった場所の web.config を見に行かずになぜか C:\Windows\System32\certsrv\ っていうフォルダを参照しに行ってた。

なんだこりゃー!?

何かのパッチでそういう設定に変わったのかしら? Windows Server 2016 や 2019 がそうなってるとか?

そんなわけで C:\Windows\System32\certsrv\ に関係するファイルをコピーしたら普通に動くようになった。もー!

もう一つトラブル事。今、仕事で組んでいるシステムがだいぶ完成してきて、色んな人がアクセスするようになった。ボクはサーバ上のファイルを直接編集していたんだけど、それだとボクのミスでうまく動かなかったりすることがある。そんなときに他の人がアクセスしに来ると、動かないぞってことになってしまう。

そこでボクの開発機にウェブサーバを立ち上げて、開発はそこでやることにし、今のサーバはちゃんと動くものだけ更新することにした。そこで自分のマシンに IIS を入れて PHP を入れて MySQL を入れたんだけどこの時、MySQL の Version 8 を入れてみたのね? SQL 文なんてのは共通だし、別に何か問題が起きるなんてことはないだろうと思って、この新しい開発環境に今まで開発してきたソースファイルをぶっ込んだから、いきなり動かないwww

おい。

エラー内容は SQL 文の Syntax エラー。構文エラーだ。単純にスペルミスとかそういう系のミス。えー、そんなバカな、ちゃんと動くソースですぜ? 間違ってるわけないじゃん、と該当する SQL 文とにらめっこするもどこがおかしいのか全く解らない。
そりゃそうだ、元の環境では動くんだもの。

これは MySQL5.6 系と 8 系で何か根本的なことが変わったのか?
とはいえ SQL 文は規格化されていて、MySQL のバージョンが上がったからと言って勝手に変えていいものじゃない。まぁでもダメ元で調べて見たら、MySQL 8 から新しい内部関数が増えていることが解った。そしてその増えた関数の名前が今回のシステムで使っているカラム名と同じだったのだ。
つまり MySQL はそれを命令だと解釈していたため、エラーになっていたのである。
もー!

解決策はこのカラム名を別の名前に変えるか、カラムを必ず ` で囲むか。
まぁ開発中のものなんでカラム名を変えたので良かったのだけど、ボクの中で意味が定着してしまっていて他の単語がすぐにおもいうかばなかったので `で囲んだ。すると問題なく動いた。

下の写真は大戸屋のカツ煮定食。大戸屋ってセントラルキッチンじゃないのでカツ煮もホクホクとイイ感じのが出てくるんだろうなと思って頼んだんだけど、脂でベチョベチョのカツだった。残念。