Блог Ерёмина Андрея обо всём на свете…

Archive for Октябрь, 2010

Как я в Питере был…


В свой первый отпуск на новой работе решил съездить в город на Неве.  Как я и предполагал – Питер понравился сильнее, чем Москва. Как-то там всё, хоть и старо, но по-новому. Метро так вообще сказка – народу мало, указатели поудобнее сделаны, чем в Москве (не заблудишься), даже реклама в вагонах не просто приклеена на стенки, а вставляется в специальные для неё такие боксы чтоли, один только минус – глубоко спускаться на эскалаторе. Кстати, в Питере вагоны метро неизресованные (WoW).

IMG_8117

Город показался чистеньким, в отличие от нашей столицы. Конечно же, я не был на окраинах, где, я уверен, не всё так красиво, как в центре, но, всё же как-то лучше, чем у нас, хотя может просто показалось.

DSC04631 (2)

Главное, что не понравилось  -это сотрудники государственных учереждений, работающих в кассах, а также гиды. У них прямо и вопроса не спросишь. Видимо, считают, что ты сам всё должен знать. Возникает тогда вопрос – а им за что зарплату платят? А да, ещё задолбал мужик с рекламы оператора Tele2. Вот интересно, а петербуржцы к нему привыкли уже, или тоже бесятся?

DSC04649

Medal of Honor


Всегда задавался вопросом – для кого разрабатывается серия игр Medal of Honor? На неё всегда  тратится куча денег (разработка, пиар), а в итоге получается слабенькая игра с геймплеем от DOOM (взял пушку и стреляй во всё, что движется, без всяких роликов, заскриптованных сцен, интригующего сюжета и тому подобное). Видимо, в этом году таким же вопросом задалась и Electronic Arts и решила просто скопировать по максимому всё, что только можно из Call of Duty Modern Warefare. Скопировать поулчилось очень даже не плохо. В то время как COD рассказывает нам каждый раз бредовый сюжет в стиле Тома Кленси о мировом кризисе с ядерными взрывами, русскими, террористами, MOH повествует о вплоне реальных событиях в Афганистане.

moh 2010-10-18 21-51-00-44

Сюжет не предвещает никаких резких поворотов, захватывающих сцен, как в COD MW2, но всё же рассказывает достаточно интересную историю в стиле Падения чёрного ястреба. Предстоит поиграть как за бойца “Котиков”, так и за стрелка из отряда Рейнжеров, дадут полетать на апаче и порулить квадроциклом.

moh 2010-10-18 13-44-03-94

Что не понравилось? Во-первых, зависающий AI. Помню, в далёком 2004 году в Half-Life 2 приходилось загружать сейв, если вдруг случайно зайдёшь туда, куда не надо, или сделаешь какое-либо действие слишком быстро, после чего AI просто зависал, в ожидании срабатывания триггера, который, увы, активировать уже не удасться. Но то было в 2004 году, сейчас-то на дворе 2010! Во-вторых, нет в игре нечто такого, что заставляло бы играть в неё снова и снова. Если в COD частенько ловишь себя на мысли – “Вот-вот, ещё 5 минут и точно спать пойду”, то здесь, что-то вроде – “Так! Если через 5 минут ничего интересного не будет – удалю нафиг!”.

Но всё же не жалею, что потратил пол дня на эту игру.

Используем сертификаты x.509 в apache


Была у меня на работе задачка — сделать авторизацию пользователей на сайте через сертификаты X.509. Вроде бы, всё просто – погуглил, почитал, оказалось, десятки разных статей и все противоречат друг другу.

Создание сертификатов

Первое, что сделаем, это создадим серверный и клиентские сертификаты. Нужна програмка openssl.exe (у меня установлен xampp, в нём есть всё, что нужно – вам его тоже советую). Итак, в папке /сервер/apache/bin находим openssl.exe и создаём файлы ca.config и openssl.cnf. Также, создадим папку db, а в ней папки certs, newcerts, пустые текстовые файлы index.txt и serial (внутри этого файла написать “01” без ковычек.)

Содержимое файла ca.config

[ ca ]
default_ca             = CA_CLIENT       # При подписи сертификатов
# использовать секцию CA_CLIENT

[ CA_CLIENT ]
dir                    = ./db            # Каталог для служебных файлов
certs                  = $dir/certs      # Каталог для сертификатов
new_certs_dir          = $dir/newcerts   # Каталог для новых сертификатов
database               = $dir/index.txt  # Файл с базой данных
# подписанных сертификатов
serial                 = $dir/serial     # Файл содержащий серийный номер
# сертификата
# (в шестнадцатиричном формате)
certificate            = ./ca.crt        # Файл сертификата CA
private_key            = ./ca.key        # Файл закрытого ключа CA

default_days           = 365             # Срок действия подписываемого
# сертификата
default_crl_days       = 7               # Срок действия CRL (см. $4)
default_md             = md5             # Алгоритм подписи

policy                 = policy_anything # Название секции с описанием
# политики в отношении данных
# сертификата

[ policy_anything ]
countryName            = optional        # Код страны – не обязателен
stateOrProvinceName    = optional        # ……
localityName           = optional        # ……
organizationName       = optional        # ……
organizationalUnitName = optional        # ……
commonName             = supplied        # …… – обязателен
emailAddress           = optional        # ……

Содержимое файла openssl.cnf

# =================================================
# OpenSSL configuration file
# =================================================
RANDFILE         = .rnd
[ ca ]
default_ca       = CA_default
[ CA_default ]
dir              = .
certs            = $dir
new_certs_dir    = $dir
crl_dir          = $dir
database         = $dir/db/index.txt
private_key      = $dir/ca.key
certificate      = $dir/ca.crt
serial           = $dir/db/serial
crl              = $dir/crl.pem
RANDFILE         = $dir/db/private/.rand
default_days     = 365
default_crl_days = 30
default_md       = sha1
preserve         = no
policy           = policy_anything
name_opt         = ca_default
cert_opt         = ca_default
[ policy_anything ]
countryName             = optional
stateOrProvinceName     = optional
localityName            = optional
organizationName        = optional
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional
[ req ]
default_bits            = 1024
default_md              = sha1
default_keyfile         = privkey.pem
distinguished_name      = req_distinguished_name
x509_extensions         = v3_ca
string_mask             = nombstr
[ req_distinguished_name ]
countryName             = Country Name (2 letter code)
countryName_min         = 2
countryName_max         = 2
stateOrProvinceName     = State or Province Name (full name)
localityName            = Locality Name (eg, city)
0.organizationName      = Organization Name (eg, company)
organizationalUnitName  = Organizational Unit Name (eg, section)
commonName              = Common Name (eg, YOUR name)
commonName_max          = 64
emailAddress            = Email Address
emailAddress_max        = 64
[ usr_cert ]
basicConstraints        = CA:FALSE
# nsCaRevocationUrl       = https://url-to-exposed-clr-list/crl.pem
[ ssl_server ]
basicConstraints        = CA:FALSE
nsCertType              = server
keyUsage                = digitalSignature, keyEncipherment
extendedKeyUsage        = serverAuth, nsSGC, msSGC
nsComment               = «OpenSSL Certificate for SSL Web Server»
[ ssl_client ]
basicConstraints        = CA:FALSE
nsCertType              = client
keyUsage                = digitalSignature, keyEncipherment
extendedKeyUsage        = clientAuth
nsComment               = «OpenSSL Certificate for SSL Client»
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage         = nonRepudiation, digitalSignature, keyEncipherment
[ v3_ca ]
basicConstraints        = critical, CA:true, pathlen:0
nsCertType              = sslCA
keyUsage                = cRLSign, keyCertSign
extendedKeyUsage        = serverAuth, clientAuth
nsComment               = «OpenSSL CA Certificate»
[ crl_ext ]
basicConstraints        = CA:FALSE
keyUsage                = digitalSignature, keyEncipherment
nsComment               = «OpenSSL generated CRL»

открываем cmd.exe (Пуск –> Выполнить –> cmd –> enter), далее запускаем через cmd программу openssl.exe и приступаем непосредственно к созданию наших сертификатов.

1) создаём серверный ключ и сертификат

req -new -x509 -days 365 -sha1 -newkey rsa:1024 -nodes -keyout server.key -out server.crt -subj ‘/O=НазваниеКомпании/OU=Подразделение/CN=localhost’

Укажите здесь название вашей компании, подразделения, а также доменное имя.

2) создаём CA сертификат для авторизации пользователей

req  -config openssl.cnf  -new  -x509  -days 3652  -sha1  -newkey rsa:1024  -keyout ca.key  -out ca.crt -subj ‘/O=Организация/OU=Подразделение’

Укажите здесь название вашей компании, подразделения.

3) создаём пользовательские сертификаты

  • req -new -sha1 -newkey rsa:1024 -nodes -keyout server.key -out request.pem -subj ‘/O=Skif Grid/OU=PSI RAS/CN=localhost’
  • ca -config openssl.cnf -policy policy_anything -extensions ssl_server -out signed.pem -infiles request.pem
  • x509 -in signed.pem -out server.crt
  • openssl pkcs12 -export –in signed.pem –inkey server.key -certfile ca.crt -name «Имя\Отчество» -out user.p12

Получившееся ca.crt и user.p12 импортируем в браузер. С сертификатами покончено, теперь пришло время Apach’a.

Настройка Apache

Открываем файл /сервер/apache/conf/extra/httpd-ssl.conf, стираем всё, что там есть и копируем туда следующее:

ErrorLog    D:/www/apache/logs/ssl_error.log
LogLevel warn

Listen 443

AddType application/x-x509-ca-cert .crt .pem
AddType application/x-pkcs7-crl    .crl
AddType application/x-pkcs12-cert  .p12

SSLPassPhraseDialog  builtin
SSLSessionCache         dbm:logs/ssl.scache
SSLSessionCacheTimeout  300
SSLMutex  default
SSLOptions +StdEnvVars +ExportCertData +StrictRequire

NameVirtualHost *:443

<VirtualHost _default_:443>

AddDefaultCharset utf-8
AddCharset utf-8 *

DocumentRoot «D:/www/htdocs»
ServerName http://www.youhost.ru:443
ServerAdmin admin@nocrash.ru.ru
ErrorLog D:/www/apache/logs/ssl_error1.log

SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLProtocol all -SSLv2
SSLOptions +StdEnvVars +ExportCertData

SSLCertificateFile conf/ssl/server.crt
SSLCertificateKeyFile conf/ssl/server.key
SSLCACertificateFile conf/ssl/ca/ca.crt

SSLVerifyClient require
SSLVerifyDepth 1

SSLProxyEngine off

<Location />

</Location>
SetEnvIf User-Agent ..*MSIE.*. nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
</VirtualHost>

Если мы хотим сделать авторизацию не обязательной (скажем, чтобы, если у пользователя не будет сертификата, то показать ему красивую страничку с надписью, скажем – получите сначала сертификат), то SSLVerifyClient поставьте как optional.

В папке /сервер/apache/conf/ создадим папку ssl. В неё скопируем созданные нами чуть раньше файлы server.crt, server.key, ca.crt

Проверяем

Если сервер был запущен – перезапустите его. Создадим простенькую страничку на php со следующем кодом:

<?
echo “<pre>”;
print_r($_SERVER);
echo “</pre>”;
?>

Сохраним, и зайдём на неё через https, т.е, скажем так: https://localhost/ssl_try.php

¦С¦¦¦¬TЛ¦-TП¦-¦-TЛ¦¦

Браузер должен показать вам окно выбора сертификата. Если SSLVerifyClient установлен как require, то при неправильном сертификате браузер выдаст вам страницу с ошибкой.

Если же всё прошло хорошо, то мы увидим нашу страницу со всеми серверными переменными, включая SSL_CLIENT_CERT, в котором хранится клиентский сертификат (из неё же можно будет вытащить, при необходимости, нужные нам данные – имя, организация, email  и т.д.)

2

Полезные ссылки

  1. OpenSSL Functions
  2. X.509 PKI LOGIN WITH PHP AND APACHE
  3. Client certificates with apache
  4. Авторизация с помощью клиентских SSL сертификатов.

Civilization V


Совсем недавно вышла в свет новая часть игры Civilization. Первые впечателния — это невообразимый восторг – уж всё тут удобно, красиво и функционально. Со временем, однако, начинаешь находить серьёзные недостатки. Благо, их не так много.

CivilizationV 2010-10-02 21-09-25-87

Первое, что стоит отметить (для меня это главное) – другая система боя. Теперь в одной клетке может находиться только один военный юнит – от этого  реалистичность и сложность боёв игре заметно возростает.

Добавилась возможность докупать территорию, а ещё – культурные границы, при расширении, не “отбирают” территорию у соседнего государства. Отныне, чтобы расширять свои владения придётся по-настоящему попотеть.

CivilizationV 2010-10-02 18-43-49-38

Сменился и графический движок (уф, игра не тормозит на моём компе – значит жить можно). Добавили анимацию лидеров – если честно, то непонятно зачем – пялиться на говорящего не по-русски мужика или бабу смысла не вижу.

CivilizationV 2010-10-02 18-06-20-77

В общем, первые несколько дней я был просто в восторге от игры. А затем узнал, что нет тут шпионажа (может и есть, но значит запрятан он так, глубоко что не найдёшь), нельзя торговать технологиями и картами.

Но в целом, после Civilization V, в предыдущие игры играть как-то уже и не хочется.

CivilizationV 2010-10-02 18-06-36-12

Почти самый лучший блог Лиру


Закончился конкурс “Премия ALEXRUS’а 2010”, проводимый уже во второй раз моим другом ALEXRUS. Победителем стал блог “игра в правду”, а его автор получит 3000 р. и футболку. Поздравляю!

Как и в прошлый раз  мне довелось поучаствовать в конкурсе в качестве жюри. В этом году пришлось просмотреть аж 90 блогов, к сожалению, больше половины из которых это просто личные дневники про то, как у автора болела голова, и ему ничего не хотелось делать. Больше всего убивали блоги с таким ужасным цветовым оформлением, что кроме как рвотный рефлекс они ничего больше не вызывали. Девушки (а именно их блоги в основном имели такой отвратительный дизайн) – у вас действительно бывают интересные дневники, где можно найти много весёлого и полезного, но только в том случае, если это можно будет прочесть. Уважайте своих читателей – не раскрашивайте оформление во все цвета радуги.

Ждём третью премию! (тоже через 2 года?)

Облако меток