Создание самоподписного SSL-сертификата

  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:043f80212a1596a7f4887889cc8cdbca' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>&nbsp;</p>\n<p class=\"rtejustify\">Собственно в эту заметку буду собирать инфу о сертификатах. Покупать доверенные сертификаты на все хосты как-то не судьба (особенно для обслуживания небольшого офиса на 5-10 рабочих мест), поэтому генерировать их будем сами.</p>\n<p class=\"rtejustify\">Все сертификаты на сервере будут размещаться в одной директории, соответственно необходимо создать ее:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td># <strong>mkdir /etc/ssl/certs</strong></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\"><span style=\"color:#ff0000\"><strong>ВАЖНО:</strong></span> При создании сертификатов обращаем внимание на поле <strong>&quot;Common Name&quot; </strong>- сюда необходимо вписать действительное DNS-имя сервера (<strong>FQDN</strong>),&nbsp;иначе сертификат не будет приниматься,&nbsp;в связи с&nbsp;недоверием к этому сертификату!</p>\n<p class=\"rtejustify\">&nbsp;</p>\n<hr />\n<p>&nbsp;</p>\n<p><strong>Exim</strong></p>\n<p class=\"rtejustify\">Почтовики,&nbsp;по определению,&nbsp;настраиваю с поддержкой <strong>SSL</strong>, соответственно необходим сертификат. В конфигурационном файле <strong>exim</strong>, например, за сертификат отвечают следующие строки:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td>tls_certificate = /etc/ssl/certs/mail.pem<br />\n tls_privatekey = /etc/ssl/certs/mail.pem</td>\n</tr>\n</tbody>\n</table>\n<p>Перейдем в каталог сертификатов:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td># <strong>cd</strong> <strong>/etc/ssl/certs</strong></td>\n</tr>\n</tbody>\n</table>\n<p>Сгенерируем сертификат. В процессе нужно будет ответить на несколько вопросов. Но ведь это нас не пугает?&nbsp;</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td>\n<p><strong># openssl req -new -x509 -days 3653 -nodes -out /etc/ssl/certs/mail.pem -keyout /etc/ssl/certs/mail.pem</strong></p>\n<p>Generating a 1024 bit RSA private key<br />\n ........++++++<br />\n .........................++++++<br />\n writing new private key to &#39;/etc/ssl/certs/mail.pem&#39;<br />\n -----<br />\n You are about to be asked to enter information that will be incorporated<br />\n into your certificate request.<br />\n What you are about to enter is what is called a Distinguished Name or a DN.<br />\n There are quite a few fields but you can leave some blank<br />\n For some fields there will be a default value,<br />\n If you enter &#39;.&#39;, the field will be left blank.<br />\n -----<br />\n Country Name (2 letter code) [AU]:<strong>UA</strong><br />\n State or Province Name (full name) [Some-State]:<strong>Kiev Region</strong><br />\n Locality Name (eg, city) []:<strong>Kiev</strong><br />\n Organization Name (eg, company) [Internet Widgits Pty Ltd]:<span style=\"color:#FF0000\"><strong>Somebody Ltd.</strong></span><br />\n Organizational Unit Name (eg, section) []:<strong>IT Department</strong><br />\n Common Name (eg, YOUR name) []:<span style=\"color:#FF0000\"><strong>mail.domain.com</strong></span><br />\n Email Address []:<span style=\"color:#FF0000\"><strong><span class=\"spamspan\"><span class=\"u\">username</span> [at] <span class=\"d\">domain [dot] com</span></span></strong></span></p>\n</td>\n</tr>\n</tbody>\n</table>\n<p>&nbsp;</p>\n<hr />\n<p>&nbsp;</p>\n<p><strong>Apache</strong></p>\n<p class=\"rtejustify\">Довольно часто необходимо на web-сервере организовать работу через <strong>https</strong>, а для этого соответственно нужно настроить поддержку <strong>SSL</strong> для <strong>Apache</strong>.</p>\n<p class=\"rtejustify\">Перейдем в каталог сертификатов:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td>\n<p># <strong>cd&nbsp;/etc/ssl/certs</strong></p>\n</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Генерируем сертификат (пароль вводим несложный,&nbsp;учитывая то, что скоро мы от него откажемся):</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td>\n<p><strong># openssl genrsa -out apache.key -rand randfile -des3 2048</strong></p>\n<p>0 semi-random bytes loaded<br />\n Generating RSA private key, 2048 bit long modulus<br />\n ...........+++<br />\n ..................................................+++<br />\n e is 65537 (0x10001)<br />\n Enter pass phrase for apache.key:<br />\n Verifying - Enter pass phrase for apache.key:</p>\n<p><strong># openssl req -new -x509 -key apache.key -out apache.crt -days 3653</strong><br />\n Enter pass phrase for apache.key:<br />\n You are about to be asked to enter information that will be incorporated<br />\n into your certificate request.<br />\n What you are about to enter is what is called a Distinguished Name or a DN.<br />\n There are quite a few fields but you can leave some blank<br />\n For some fields there will be a default value,<br />\n If you enter &#39;.&#39;, the field will be left blank.<br />\n -----<br />\n Country Name (2 letter code) [AU]:<strong>UA</strong><br />\n State or Province Name (full name) [Some-State]:<strong>Kiev Region</strong><br />\n Locality Name (eg, city) []:<strong>Kiev</strong><br />\n Organization Name (eg, company) [Internet Widgits Pty Ltd]:<span style=\"color:#FF0000\"><strong>Local Network</strong></span><br />\n Organizational Unit Name (eg, section) []:<strong>IT Department</strong><br />\n Common Name (eg, YOUR name) []:<span style=\"color:#FF0000\"><strong>web.domain.com</strong></span><br />\n Email Address []:<span style=\"color:#FF0000\"><strong><span class=\"spamspan\"><span class=\"u\">username</span> [at] <span class=\"d\">domain [dot] com</span></span></strong></span></p>\n</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Для избежания проблем в дальнейшем,&nbsp;значение &quot;<strong>Common Name</strong>&quot; необходимо &quot;привязать&quot;&nbsp;к имени домена.</p>\n<p class=\"rtejustify\">Избавляемся от пароля в сертификате:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td><strong># openssl rsa -in apache.key -out apache.key</strong><br />\n Enter pass phrase for apache.key:<br />\n writing RSA key</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Обезопасим систему:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td># <strong>chmod 400 apache.key</strong></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">На этом действия с сертификатом заканчиваются. Следующий шаг - добавить поддержку созданного сертификата в конфигурационный файл <strong>Apache</strong>. Достигается это внесением следующих строк в <strong>httpd.conf</strong>:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td>\n<p>Listen 443</p>\n<p>NameVirtualHost *:443</p>\n<p>&nbsp;</p>\n<p>&lt;VirtualHost *:443&gt;<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ServerName domain.com<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ServerAdmin hostmaster<span class=\"spamspan\"><span class=\"u\">hostmaster</span> [at] <span class=\"d\">domain [dot] com</span><span class=\"t\"> (@domain.com)</span></span></p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DocumentRoot /usr/local/www/apache22/data</p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ErrorLog /var/log/apache/domain.com-error.log<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TransferLog /var/log/apache/domain.com-access.log</p>\n<p>SSLEngine on<br />\n SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL<br />\n SSLCertificateFile &quot;/etc/ssl/certs/apache.crt&quot;<br />\n SSLCertificateKeyFile &quot;/etc/ssl/certs/apache.key&quot;</p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp; &lt;Directory &quot;/usr/local/www/apache22/data&quot;&gt;<br />\n &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;DirectoryIndex index.php<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; AllowOverride All<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; SSLRequireSSL<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; Order Deny,Allow<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; Allow from all<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Directory&gt;</p>\n<p>&lt;/VirtualHost&gt;<br />\n &nbsp;</p>\n</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Проверяем конфигурацию Apache, и если все в порядке, перезапускаем службу:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td><strong># apachectl configtest</strong><br />\n Syntax OK<br />\n <strong># apachectl graceful</strong></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Теперь можно подключаться к серверу по протоколу <strong>HTTPS</strong>.</p>\n<p>&nbsp;</p>\n', created = 1767377583, expire = 1767463983, headers = '', serialized = 0 WHERE cid = '2:043f80212a1596a7f4887889cc8cdbca' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a class=\"thickbox\" href=\"/files/imagepicker/1/wake_up_ua.png\"><img alt=\"Вставай, Україно!\" class=\"imgp_img\" src=\"/files/imagepicker/1/thumbs/wake_up_ua.png\" style=\"height:200px; width:150px\" /></a></p>\n', created = 1767377583, expire = 1767463983, headers = '', serialized = 0 WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:cc913d232116f0426090404133377d88' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a href=\"http://muff.kiev.ua/rss.xml\"><img alt=\"RSS\" width=\"160\" height=\"60\" src=\"http://muff.kiev.ua/files/muf-rss.png\" /></a></p>\n', created = 1767377583, expire = 1767463983, headers = '', serialized = 0 WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:39649256b636e3d5ded656bc52bd8c01' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
Версия для печатиОтправить другуPDF version

 

Собственно в эту заметку буду собирать инфу о сертификатах. Покупать доверенные сертификаты на все хосты как-то не судьба (особенно для обслуживания небольшого офиса на 5-10 рабочих мест), поэтому генерировать их будем сами.

Все сертификаты на сервере будут размещаться в одной директории, соответственно необходимо создать ее:

# mkdir /etc/ssl/certs

ВАЖНО: При создании сертификатов обращаем внимание на поле "Common Name" - сюда необходимо вписать действительное DNS-имя сервера (FQDN), иначе сертификат не будет приниматься, в связи с недоверием к этому сертификату!

 


 

Exim

Почтовики, по определению, настраиваю с поддержкой SSL, соответственно необходим сертификат. В конфигурационном файле exim, например, за сертификат отвечают следующие строки:

tls_certificate = /etc/ssl/certs/mail.pem
tls_privatekey = /etc/ssl/certs/mail.pem

Перейдем в каталог сертификатов:

# cd /etc/ssl/certs

Сгенерируем сертификат. В процессе нужно будет ответить на несколько вопросов. Но ведь это нас не пугает? 

# openssl req -new -x509 -days 3653 -nodes -out /etc/ssl/certs/mail.pem -keyout /etc/ssl/certs/mail.pem

Generating a 1024 bit RSA private key
........++++++
.........................++++++
writing new private key to '/etc/ssl/certs/mail.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:UA
State or Province Name (full name) [Some-State]:Kiev Region
Locality Name (eg, city) []:Kiev
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Somebody Ltd.
Organizational Unit Name (eg, section) []:IT Department
Common Name (eg, YOUR name) []:mail.domain.com
Email Address []:username [at] domain [dot] com

 


 

Apache

Довольно часто необходимо на web-сервере организовать работу через https, а для этого соответственно нужно настроить поддержку SSL для Apache.

Перейдем в каталог сертификатов:

# cd /etc/ssl/certs

Генерируем сертификат (пароль вводим несложный, учитывая то, что скоро мы от него откажемся):

# openssl genrsa -out apache.key -rand randfile -des3 2048

0 semi-random bytes loaded
Generating RSA private key, 2048 bit long modulus
...........+++
..................................................+++
e is 65537 (0x10001)
Enter pass phrase for apache.key:
Verifying - Enter pass phrase for apache.key:

# openssl req -new -x509 -key apache.key -out apache.crt -days 3653
Enter pass phrase for apache.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:UA
State or Province Name (full name) [Some-State]:Kiev Region
Locality Name (eg, city) []:Kiev
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Local Network
Organizational Unit Name (eg, section) []:IT Department
Common Name (eg, YOUR name) []:web.domain.com
Email Address []:username [at] domain [dot] com

Для избежания проблем в дальнейшем, значение "Common Name" необходимо "привязать" к имени домена.

Избавляемся от пароля в сертификате:

# openssl rsa -in apache.key -out apache.key
Enter pass phrase for apache.key:
writing RSA key

Обезопасим систему:

# chmod 400 apache.key

На этом действия с сертификатом заканчиваются. Следующий шаг - добавить поддержку созданного сертификата в конфигурационный файл Apache. Достигается это внесением следующих строк в httpd.conf:

Listen 443

NameVirtualHost *:443

 

<VirtualHost *:443>
        ServerName domain.com
        ServerAdmin hostmasterhostmaster [at] domain [dot] com (@domain.com)

        DocumentRoot /usr/local/www/apache22/data

              ErrorLog /var/log/apache/domain.com-error.log
              TransferLog /var/log/apache/domain.com-access.log

SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "/etc/ssl/certs/apache.crt"
SSLCertificateKeyFile "/etc/ssl/certs/apache.key"

     <Directory "/usr/local/www/apache22/data">
               DirectoryIndex index.php
               AllowOverride All
               SSLRequireSSL
               Order Deny,Allow
               Allow from all
      </Directory>

</VirtualHost>
 

Проверяем конфигурацию Apache, и если все в порядке, перезапускаем службу:

# apachectl configtest
Syntax OK
# apachectl graceful

Теперь можно подключаться к серверу по протоколу HTTPS.

 

Ваша оценка: Нет Средняя: 3.9 (9 голосов)

Вставай, Україно!

Литература

Существует рoвнo oдин интуитивнo пoнятный интерфейс - сoска. Остальные oсваиваются путем oбучения.