SSH のように、ある秘密鍵を持っている人のアクセスを許可するような認証を
HTTP で行うためにはどうすればいいのでしょうか?

まぁ普通に sshd を立ち上げて、
Webサーバ側では localhostからだけ受け付けるようにしておいて、
トンネリングでアクセスさせるという方法もありなのかもしれませんが、
スマートでは無いように思います。