Одним из хороших решений, вероятно, является использование SSL (то есть HTTPS). Вы можете создать центр сертификации на стороне сервера, а затем попросить этот центр сертификации подписать сгенерированный вами сертификат клиента. Убедитесь, что сервер HTTP настроен на доверие к вновь созданному центру сертификации.
Как только это будет сделано, вы должны установить сертификат на стороне клиента. Клиент должен представить сертификат при разговоре с HTTP-сервером. Вы должны настроить HTTP-сервер так, чтобы при размещении на защищенных URL-адресах запрашивался доверенный сертификат.
Потрясающий пример того, как это сделать с Apache HTTPD, опубликован прямо здесь !
В документе, на который я ссылаюсь, не описывается, как настроить центр сертификации и создавать самозаверяющие сертификаты, но существует множество примеров, например, здесь .
Это хорошее решение, потому что:
- пароли не хранятся в открытом виде
- если закрытый ключ сертификата клиента украден или скомпрометирован, вы можете отозвать его на стороне сервера
Ключевым моментом здесь является то, что клиент предоставляет свои учетные данные на сервер, что противоположно тому, что обычно делается в контексте браузера. Вы также можете заставить клиента доверять только что созданному центру сертификации, чтобы он знал, что он обращается к нужному серверу, а не к человеку посредине.