Как удалить скрытую игру в Steam из Списка желаемого

Проблема

Вы добавили какую-то игру в “стиме” в “Список желаемого”. Но потом эту игру удалили, она исчезла из “списка”, но продолжает учитываться при общем подсчете “списка желаемого”. Т.е. если вы полностью очистите этот “список”, у вас всё равно будет одна желанная игра.

Read More

the trustAnchors parameter must be non-empty

При использовании распакованной версии OpenJDK 8, столкнулся с проблемой, что любое обращение к HTTPS обращается ошибками вида:

java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty

Гугление предлагает в основном только однотипные решения: переустановить ca-certificates-java или “колдунства” вокруг команды update-ca-certificates. Однако проблема и её решение на деле оказались очень банальными.

Причины

Дело в том, что в распакованной версии OpenJDK 8 контейнер сертификатов openjdk-8/jre/lib/security/cacerts просто пуст:

keytool -v -list -keystore openjdk-8/jre/lib/security/cacerts -storepass changeit
Keystore type: JKS
Keystore provider: SUN

Your keystore contains 0 entries

А вот в распакованной версии OpenJDK 11 (например) с этим всё в порядке:

keytool -v -list -keystore openjdk-11/lib/security/cacerts -storepass changeit
Keystore type: JKS
Keystore provider: SUN

Your keystore contains 92 entries
. . .

Решение

При запуске java-приложения нужно добавить параметр javax.net.ssl.trustStore, который будет указывать на cacerts с актуальными сертификатами:

/opt/openjdk-8/bin/java -Djavax.net.ssl.trustStore=/opt/openjdk-11/lib/security/cacerts -jar someApp.jar

Импорт сертификатов Let's Encrypt в JKS

Дано:

  • fullchain3.pem
  • privkey3.pem

Импортируем:

  1. Конвертируем сертификаты pem в p12 (PKCS12):
openssl pkcs12 -export -in fullchain3.pem -inkey privkey3.pem -out pkcs.p12 -name "Let's Encrypt"
  1. Импортируем p12 в jks
keytool -importkeystore -srckeystore pkcs.p12 -srcstoretype PKCS12 -destkeystore keystore.jks

Enjoy.

Для проверки, можно выполнить команду

keytool -list -v -keystore keystore.jks -storepass keyStorePassword

В листинге искать “Alias name: Let’s Encrypt”

Amazon SES: PKIX path building failed

Проблема: при попытке отправить email через Amazon SES, приложение валит ошибками вида PKIX path building failed.

Причины: банально, но похоже у вас “протух” сертификат “амазона”.

Когда я столкнулся с этой проблемой, java-приложение использовало контейнер сертифитатов формата JKS. И когда я его пролистал, то подозрение по истёкшему сертификату подтвердилось. Решение напрашивается само собой: импортировать в контейнер свежий/актульный сертификат. Вот только где его взять?

Решение:

  1. В терминале на сервере (ну или можете у себя локально в linux среде) выполнить команду:
openssl s_client -connect email.eu-west-1.amazonaws.com:443

Адрес и порт email.eu-west-1.amazonaws.com:443 у вас может быть другим - смотрите по ситуации.

На выходе команды получим много текста, но нам нужен только блок сертификата:

-----BEGIN CERTIFICATE-----
. . .
-----END CERTIFICATE-----
  1. Сохраняем этот сертификат (вместе с BEGIN и END стоками) в файл aws_ses.crt

  2. Импортируем этот сертификат в контейнер сертификатов:

keytool -import -file aws_ses.crt -alias 'aws ses' -keystore tls/keystore.jks

Будет вначале запрошен пароль от keystore.jks, затем спросят “хотим ли мы доверять импортированному сертификату”. Отвечаем yes.

Enjoy.

Теперь письма должны отправляться.

Шпаргалка по SCREEN

Синтаксис

screen [options] [command]

Параметры

-dсоздать сеанс в detached режиме. Это значит, что "скрин" будет создан в фоне.
-Sуказание названия для вновь созданного "скрина"
-lsсписок доступных сеансов
-wipeочистить список от "мертвых" сеансов
-xподключится к сеансу по его pid его названию
-Xвыполнить screen-команду внутри сеанса, не подключаясь к нему
[command]это команда, выполняемая сразу по запуску screen-сеанса.

Read More

Восстановление блога

После долгого времени сопровождающейся моей ленью, а так же ожидания освобождения “угнанного” домена, блог всё же будет восстановлен, но не в полном объёме.

В данный момент блог находится в аварийно-восстановительном состоянии: индексация никакой, оформление стоковое, многие старые статьи
остались “за бортом”. И нет, это не потому что они у меня не сохранились. Просто по прошествию времени я взглянул на них трезво и… понял что часть устарела, а часть - не нужна вовсе. Так же я всё еще не знаю как быть со статьями группы “Уроки во Bukkit”: сами статьи устарели, а нужно ли писать новые/обновленные - не знаю. С того времени многое поменялось и подобных статей на русском уже предостаточно (как мне показалось). Это, собственно, решать вам - читателям. Пока что комментариев в блоге нет (но они будут), то свои мысли на этот счет можно излить мне в личку в VK.

Classloader: динамичкеская загрузка классов

Вот вам простой вопрос: как идентифицируются классы в JVM? Правильный ответ: по полному имени класса, состоящее из имени пакета и собственного имени класса. Из этого напрашивается вывод, что в программе не может существовать два класса с одинаковыми полными именами. Однако, это не так. Как и в начальной школе, где нас учили правилу “на ноль делить нельзя”, а потом в старших классах рассказали про бесконечность, так и в Java есть “маленькая ложь”.

В действительности, классы идентифицируются по имени пакета, собственного имени класса и… загрузчику, Classloader‘у. Таким образом, в программе могут существовать два класса с одинаковыми полными именами и не конфликтовать друг с другом.

Об этом и других вкусностях Classloader‘а мы сегодня и поговорим.

Read More

Шпаргалка по SSH

Ключи

Генерация ключа

ssh-keygen

Указать другой выходной файл

ssh-keygen -f ./path/to/file

Сменить пароль на ключ

ssh-keygen -p
  • ~/.ssh/id_rsa.pub - открытый ключ. Его копируют на сервера, куда нужно получить доступ;
  • ~/.ssh/id_rsa - закрытый ключ. Его нельзя никому показывать. В случае утечки - срочно менять ключ.

Копирование ключа на сервер

ssh-copy-id user@server

Если консоль будет ругаться на “неизвестный хост” (Warning: Permanently added the RSA host key for IP address 'x.x.x.x' to the list of known hosts.), то нужно создать файл ~/.ssh/config и прописать туда следующее:

UserKnownHostsFile ~/.ssh/known_hosts

Read More

Как отключить ping отклик на Linux

Для отключения пинга, из-под root‘а выполняем следующую команду:

echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all

Что бы обратно включить ping, меняем 1 на 0

echo 0 >/proc/sys/net/ipv4/icmp_echo_ignore_all

Так же можно воспользоваться для этих целей iptables:

iptables -I INPUT -p icmp -j DROP

Но в отличии от “редактирования” файла icmp_echo_ignore_all, iptables позволяет запретить пинг только на определенном сетевом интерфейсе:

iptables -I INPUT -i eth0 -p icmp -j DROP

Источники: