Я хочу добиться высокой степени безопасности своей системы. Как и какими средствами мне этого достичь?
Достижение любой цели не обходится без определённых жертв (переосмыслив которые в будущем, Вы можете даже принять их за благо), и важным шагом на таком пути будет отказ от MS Windows. Однако, это не означает что переход произойдёт моментально и без трудностей, но нужно понемногу работать в этом направлении и изучать Unix-системы, Linux или *BSD.
Зацикленность людей на Windows и поиск решений для укрепления этой ОС напоминает визит к врачу тяжело больного пациента, который просит быстродействующего и быстропомогающего лекарства. Врач понимает, что такое лекарство может ему временно помочь, однако оно не вылечит болезнь, не увеличит срок жизни, и больной всё равно продолжит идти к могиле. Вместо этого ему предлагаются кардинальные методы (*nix-система), которые могут помочь, но они не действуют моментально, требуют терпения и выдержки, требуют сменить привычный образ жизни, требуют регулировать своё питание, и ещё много в чём себя контролировать/исправлять. Но, как показывает практика, больные в большинстве тем не менее выбирают морфий Windows. [ источник ]
Стандарной программой шифрования в линуксе является PGP - Pretty Good Privacy (бесплатна для некоммерческого использования) или открытый аналог этой GnuPG - Gnu Privacy Guard.
Рас/шифровывание с использованием пары ключей проходит на два-три порядка медленнее, в сравнении с симметричным алгоритмом, требует бо́льших вычислительных ресурсов, поэтому на практике используются смешанные шифры:
Для реализации ЭЦП необходимо, чтобы шифр обладал тем свойством, что и открытый ключ, и секретный ключ может быть использован алгоритмом шифрования в качестве открытого ключа т.е., могут быть использованы для шифрования данных. RSA - является таким алгоритмом.
gpg --gen-key
gpg --list-keys /home/user/.gnupg/pubring.gpg --------------------------------- pub 1024D/95447C14 2014-02-08 Name Family <user@nowhere.someplace.com> sub 2048g/96D6CDAD 2014-02-08
gpg --output revoke.asc --gen-revoke 95447C14
После создания ключа и сертификата отзыва необходимо сделать резервную копию полученных файлов (по-умолчанию распологаются в ~/.gpg/) в защищённом хранилище.
gpg --edit-key 4600813F
или по данным пользователя
gpg --edit-key user@nowhere.someplace.com
# публичные ключи gpg --list-keys # приватные ключи gpg --list-secret-keys
# запрос публичного ключа gpg --keyserver subkeys.pgp.net --recv-keys 5B20C7D2 # отправка своего публичного ключа на сервер gpg --keyserver subkeys.pgp.net --send-keys 5B20C7D2 # обновление ключей в локальном хранилище ключей gpg --refresh-keys --keyserver subkeys.pgp.net # экспорт публичного ключа в файл gpg --armor -output 4600813F.pub --export 4600813F # импортировать открытый ключ из файла gpg --fetch-keys http://example.com/4600813F.pub
gpg --output file.txt.gpg --encrypt --recipient name@dei.uc.pt file.txt
gpg --recipient name@dei.uc.pt --detach-sign file.txt
gpg --sign --recipient name@dei.uc.pt file.txt
gpg --sign --encrypt --recipient name@dei.uc.pt file.txt
gpg --output file.txt --decrypt file.txt.gpg
gpg --verify file.txt.sig file.txt
gpg --output file.txt.gpg --symmetric file.txt
gpg --output file.txt --decrypt file.txt.gpg
Дана машина, доступная из сети по ssh, на машине установлен криптографический пакет gpg, установлен vim с плагином vim-gnupg, а также дополнительно доступен git.
Задача обеспечить приватный доступ и хранение паролей на данной машине. Источник: тыц.
gpg --encrypt --recipient master@jurik-phys.net test.txt
sudo apt-get install vim-scripts
# создаём локальный каталог плагина mkdir ~/.vim/plugin # создаём символическую ссылку на плагин ln -s /usr/share/vim-scripts/plugin/gnupg.vim ~/.vim/plugin/gnupg.vim
vim test.txt.gpg
После ввода парольной фразы к закрытому ключу, открывается файл в расшифрованном виде, который может быть прозрачно отредактирован и сохранён.
vim secret.gpg
Для большего удобства предлагается установить следующие настройки в .vimrc. Подробности используемых опций см. в первоисточнике, тыц.
" Tell the GnuPG plugin to armor new files. let g:GPGPreferArmor=1 " Tell the GnuPG plugin to sign new files. let g:GPGPreferSign=1 augroup GnuPGExtra " Set extra file options. autocmd BufReadCmd,FileReadCmd *.\(gpg\|asc\|pgp\) call SetGPGOptions() " Automatically close unmodified files after inactivity. autocmd CursorHold *.\(gpg\|asc\|pgp\) quit augroup END function SetGPGOptions() " Set updatetime to 1 minute. set updatetime=60000 " Fold at markers. set foldmethod=marker " Remove comment symbols. set commentstring=%s " Automatically close all folds. set foldclose=all " Only open folds with insert commands. set foldopen=insert endfunction
Для генерации можно использовать утилиту pwgen прямо из vim'а
:r!pwgen -sy 12 1
По материалам habrahabr.ru, дополнительная литература.
1. Регистрация на сайте https://login.wosign.com/reg.html и подтверждение электронной почты.
2. Заказ бесплатного сертификата по адресу https://buy.wosign.com/free/. Рядом с ценой (обозначено красным цветом) нажать на синий квадрат (получение бесплатного сертификата), ниже зелёная кнопка - продолжить оформление сертификата.
3. Ввод нужных доменных имен, подтверждение владения доменом. При вводе домена в виде www.example.com, example.com выписывается сервисом автоматически.
4. Генерация на сервере приватного ключа и CSR (Certificate Signing Request) - запроса на получение сертификата, который представляет собой текстовый файл, содержащий в закодированном виде информацию об администраторе домена и открытый ключ:
openssl req -out mydomain.com.csr -new -sha256 -newkey rsa:2048 -nodes -keyout mydomain.com.key
При генерации CSR необходимо ввести, как минимум:
Указанные в CSR данные, должны соответствовать данным, указанным в Whois-сервисе по домену.
5. Вставка содержимого файла mydomain.com.csr в форму сайта. Завершение формальностей с вводом пароля, принятием лицензионного соглашения и т.д.
6. Скачивание zip-архива с сертификатом сайта с сайта или по ссылке в письме. При подписывании сертификата возможна задержка на несколько часов.
7. После установки сертификата и сгенерированного приватного ключа на сайт, желательно проверить уровень безопасности сайта через SSL-тестере.
8. Настройка OCSP stapling на сервере для полученного сертификата.
По материалам 8host.com и , habrahabr.ru
Получение корневого и промежуточного сертификата CA.
wget -O - https://www.startssl.com/certs/ca.pem | tee -a ca-certs.pem > /dev/null wget -O - https://www.startssl.com/certs/sub.class1.server.ca.pem | tee -a ca-certs.pem > /dev/null
Cертификаты в формате DER необходимо сконвертировать в PEM.
wget -O - http://aia.startssl.com/certs/ca.crt | openssl x509 -inform DER -outform PEM | tee -a ca-certs.pem > /dev/null wget -O - http://aia1.wosign.com/ca1g2-server1-free.cer | openssl x509 -inform DER -outform PEM | tee -a ca-certs.pem > /dev/null wget -O - http://aia6.wosign.com/ca6.server1.free.cer | openssl x509 -inform DER -outform PEM | tee -a ca-certs.pem > /dev/null
Редактирование файла виртуальных хостов SSL. В директиву <VirtualHost></VirtualHost> добавить:
SSLCACertificateFile /etc/ssl/ca-certs.pem SSLUseStapling on
Вне директивы <VirtualHost></VirtualHost> указать кэш
SSLStaplingCache shmcb:/tmp/stapling_cache(128000)
Протестировать изменённый конфиг и перезагрузить настройки:
apachectl -t service apache2 reload
Проверка результата на SSL-тестере.
Protocol Details ---------------- OCSP stapling Yes
На следующий день после удачной настройки сайт перестал открываться в ошибкой
sec_error_ocsp_try_server_later
В логах apach'а ошибка Bad gateway 502. Вероятно, что проявилась обозначенная на хабре проблема.
Способ 1. Рекомендованный: (digicert.com).
Использование Forward Secrecy определяется набором используемых шифров.
SSLProtocol all -SSLv2 -SSLv3 SSLHonorCipherOrder On SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4"
Способ 2. Простой, но увеличивающий нагрузку на сервер: (raymii.org).
Увеличение стойкости DH-шифров.
#Generate the parameters cd /etc/ssl/certs openssl dhparam -out dhparam.pem 4096 # Add the following to your Apache config. SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem"
HSTS - HTTP Strict Transport Security. Включение, согласно, itigloo.com.
a2enmod headers
<VirtualHost *:443> # Guarantee HTTPS for 1 Year including Sub Domains Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"