Предположим, что работает сервер PostgreSQL и на нем включен SSL. Используя «стандартные» инструменты Linux и PostgreSQL, как я могу проверить его сертификат SSL?
Я надеюсь на результат, похожий на тот, который вы получите от бега openssl x509 -text ...
. И я надеюсь получить ответ из командной строки с одним или двумя строками, чтобы мне не пришлось прибегать к анализатору пакетов.
У меня нет доступа к серверу PostgreSQL, поэтому я не могу просмотреть его файлы конфигурации напрямую.
У меня нет логина суперпользователя, поэтому я не могу получить значение ssl_cert_file
параметра и затем pg_read_file
его.
Использование openssl s_client -connect ...
не работает, потому что PostgreSQL, похоже, не хочет делать рукопожатие SSL сразу.
Из быстрого просмотра psql
документации я не смог найти параметр командной строки, который заставляет его показывать эту информацию при запуске. (Хотя это действительно показывает мне определенную информацию о шифре.)
String connectionURL = "jdbc:postgresql://server:62013/dbname"; Properties props = new Properties(); props.setProperty("user", "username"); props.setProperty("password", "password"); props.setProperty("ssl", "true"); props.setProperty("sslfactory", DumperFactory.class.getName()); Connection con = null; // Load the Driver class. Class.forName("org.postgresql.Driver"); con = DriverManager.getConnection(connectionURL, props);
Если вы не хотите беспокоиться об установке Java и компиляции, и у вас уже есть Python, вы можете попробовать этот скрипт Python: https://github.com/thusoy/postgres-mitm/blob/master/postgres_get_server_cert.py
Я использую это, чтобы проверить даты сертификата:
Или для полного сертификата в виде текста:
источник
curl https://raw.githubusercontent.com/thusoy/postgres-mitm/master/postgres_get_server_cert.py | python - example.com:5432
(но будьте уверены в том, что вы выполняете таким образом !!)Ответ CSD действительно спас меня. Вот более подробное прохождение для тех из нас, кто не знает или забыл Java.
Убедитесь, что ваш сервер может компилировать Java. Попробуйте выполнить команду «which javac», если она выводит что-то вроде «... no javac in ...», то вам нужно установить JDK (JRE не будет работать, у него есть «java», но не «javac»).
Установите postgresql-jdbc, если у вас его еще нет. Для RHEL6 команда "yum install postgresql-jdbc". Выясните, где установлены файлы JAR. Их будет несколько, по одному для каждой версии. Я использовал "/usr/share/java/postgresql-jdbc3.jar".
Скопируйте код csd и вставьте информацию базы данных (другой ответ) или используйте мою слегка измененную версию в конце этого ответа. Сохраните его в файле с именем «ShowPostgreSQLCert.java». Прописные / строчные буквы имеют значение, называйте это как угодно, и оно не будет компилироваться.
В каталоге с файлом ShowPostgreSQLCert.java выполните следующую команду (при необходимости измените местоположение postgresql-jdbc3.jar): «javac -cp /usr/share/java/postgresql-jdbc3.jar ShowPostgreSQLCert.java». Теперь у вас должно быть 3 файла .class в одном каталоге.
Наконец, выполните следующую команду: «java -cp.: / Usr / share / java / postgresql-jdbc3.jar ShowPostgreSQLCert». "." после "-cp" означает, что он должен искать в текущем каталоге файлы .class. Вы можете вставить полный путь к файлам классов здесь, просто не забудьте оставить «:» между путем и расположением файла .jar.
Если вам нужно выполнить команду на другом компьютере, вам нужно установить один и тот же файл jar (postgresql-jdbc3.jar), или вы можете просто скопировать его с сервера, на котором вы скомпилировали файлы .class. Затем просто скопируйте файлы .class и запустите команду из 5. после изменения путей.
Я немного изменил код, чтобы вы могли передавать информацию о базе данных в командной строке, а не компилировать ее в файл .class. Просто запустите его без каких-либо аргументов, и он покажет сообщение, показывающее, какие аргументы он ожидает. код + модификации csd:
источник
Я добавил код из /programming/3313020/write-x509-certificate-into-pem-formatted-string-in-java для вывода сертификатов в виде PEM и удалил необходимость указывать БД, имя пользователя или пароль (они не нужны для получения сертификата).
Используя это, я смог убедиться, что перезапуск PostgreSQL, к сожалению, кажется необходимым для перехода на новый сертификат.
Не будучи Java-разработчиком, мои шаги по сборке и запуску, вероятно, не так хороши, но они работают, если вы можете найти postgresql jdbc
Компилировать:
Бежать:
Пример вывода:
Источник:
источник