Я ищу способ сгенерировать сертификаты SSL на внешнем сервере Linux, но не могу найти лучший способ.
Сценарий:
Когда пользователь регистрируется на веб-сайте (на веб-сервере), я хочу, чтобы веб-сервер отправлял сообщение на другой сервер, где для пользователя будут сгенерированы сертификат SSL и ключ. Веб-сервер должен отправить username
пользователя на внешний сервер. Я знаю, что для безопасности лучше создавать сертификаты SSL на отдельном компьютере, а не на веб-сервере.
Веб-сервер также является системой Linux и будет использовать PHP, поэтому, может быть, PHP должен отправить это сообщение на «ssl-generation-server»? Я думал использовать BASH
script и такую команду curl, потому что это самый простой способ, который я могу придумать:
exec("curl http://ssl-gen-server/generate.php > /dev/null 2>&1 &");
Я не хочу, чтобы вызов PHP на веб-сервере ждал ответа от generate.php
, поэтому я перенаправлю его, чтобы он был асинхронным.
После того, как SSL и ключ были сгенерированы, они должны быть отправлены обратно на веб-сервер, чтобы их можно было представить пользователю. Но проблема здесь: как «ssl-gen-server» может связаться с веб-сервером и сообщить о сертификате SSL?
Лучше ли автоматизировать вход по SSH с веб-сервера на сервер SSL-gen и запускать там команды?
Я знаю, что в PHP есть openssl_csr_new
, но, возможно, лучше генерировать сертификаты с фактическим openssl
команда?
(это должен быть комментарий, но немного длинный)
Я думал об использовании сценария BASH и такой команды curl
Это очень странный способ решения проблемы. Даже если бы это был единственный возможный способ вызвать удаленный URL-адрес из PHP, есть много вещей, которые неправильны при взаимодействии с curl.
Вы также, кажется, очень запутались в связи между CSR и сертификатами. Вы пытаетесь решить детали реализации без какого-либо очевидного учета архитектуры и на самом деле не дали объяснения того, чего вы пытаетесь достичь (это сертификат на стороне клиента? Сертификат и ключ должны быть развернуты на сервере ?). Кто такой центр сертификации? Вы пытаетесь автоматизировать существующий процесс или это новая возможность?
Похоже, вы не понимаете необходимости отделить создание CSR от подписания сертификата.
Хотя на детали вызова легко ответить, в вашем вопросе так много особенностей, касающихся целостности и конфиденциальности службы, игнорировать их и объяснять любые решения вызова было бы довольно безответственно.
Лучший совет (хотя все еще несколько опасный в отсутствие модели использования) - это рекомендация ansi_lumen использовать letsencrypt.
Вам нужно решение PKI, включающее центр сертификации и способы выдачи сертификатов. Полнофункциональные продукты включают FreeIPA (также известный как Red Hat Identity Manager) или службы сертификации Active Directory.
В любом случае изучите что-нибудь вроде торговец сертификатом для выдачи запросов на сертификаты. У него гораздо лучше определенный API, чем у openssl. В качестве бонуса у него есть функция автоматического продления.
Если вам все равно, использует ли он ваш PKI, внедрите Let's Encrypt и позвольте им выдавать сертификаты.
Наконец, прежде чем реализовывать свои собственные с помощью сценариев оболочки openssl, лучше не обращайте внимания на помощников по созданию сертификатов. Если вы действительно хотите, прочтите несколько руководств, чтобы понять, как правильно делать PKI. Я рекомендую пару, авторами Стефан Х. Холек или Джейми Нгуен.