Instalação e Configuração do Apache + MySQL + PHP + SSL no OpenBSD 5.4

E ai galera, aqui eu vou abordar a instalação e configuração do Apache trabalhando no OpenBSD 5.4 trabalhando em conjunto com o MySQL e PHP.

Vamos setar o endereço do nosso repositório

export PKG_PATH=ftp://openbsd.locaweb.com.br/pub/OpenBSD/5.4/packages/`machine -a`/

Agora vamos mandar instalar o apache2 pois o apache padrão do OpenBSD é o 1.3

pkg_add -v apache-httpd

Agora vamos mandar instalar o PHP e o MySQL server

Agora vamos mandar instalar o php-mysql-5.3.10 e vamos instalar também o MySQL server

pkg_add -v php-5.3.27-ap2 php-mysql-5.3.27 mysql-server

Agora vamos inserir uma entrada no apache para ele poder carregar o módulo do php

vim /etc/apache2/httpd2.conf
[...]
#Descomentar a linha 458
Include /etc/apache2/extra/httpd-vhosts.conf
[...]
#Insira na linha 477
Include /etc/apache2/extra/php.conf

Agora vamos criar o php.conf

vim /etc/apache2/extra/php.conf
LoadModule php5_module /usr/local/lib/php-5.3/libphp5.so

<IfModule mod_php5.c>
        AddType application/x-httpd-php .php .phtml .php3
        AddType application/x-httpd-php-source .phps
# Most php configs require this
        DirectoryIndex index.php
</IfModule>

Agora precisamos acertar o link do MySQL para o PHP

ln -sf /etc/php-5.3.sample/mysql.ini /etc/php-5.3/mysql.ini

Agora vamos ajustar o timezone do php

vim /etc/php-5.3.ini
[...]
date.timezone = 'America/Sao_Paulo'

Agora vamos criar o nosso Virtualhost

vim /etc/apache2/extra/httpd-vhosts.conf
<VirtualHost *:80> 
     ServerAdmin webmaster@douglasqsantos.com.br
     ServerName openbsd.douglasqsantos.com.br
     DocumentRoot "/var/www/openbsd"
   <Directory "/var/www/openbsd">
     Options -Indexes +FollowSymLinks +MultiViews
     AllowOverride All
     Order Allow,deny
     Allow From All
   </Directory>
 
   <IfModule mod_php5.c>
     AddType application/x-httpd-php .php
     php_flag expose_php Off
     php_flag allow_url_fopen Off
     php_flag allow_url_include Off
     php_flag magic_quotes_gpc Off
     php_flag register_globals Off
     php_flag disable_functions show_source
     php_flag disable_functions system
     php_flag disable_functions shell_exec
     php_flag disable_functions passthru
     php_flag disable_functions exec
     php_flag disable_functions popen
     php_flag disable_functions proc_open
     php_flag disable_functions symlink
     php_value upload_max_filesize  15M
     php_value post_max_size 15M
   </IfModule>
     CustomLog /var/log/apache2/openbsd.douglasqsantos.com.br.access.log combined 
     ErrorLog /var/log/apache2/openbsd.douglasqsantos.com.br.error.log 
     LogLevel warn 
     ServerSignature Off
</VirtualHost>

Agora vamos criar o diretório para armazenar o nosso site e o diretório para os logs do apache e vamos ajustar as permissões

mkdir /var/www/openbsd /var/log/apache2
chown -R _apache2:_apache2 /var/www/openbsd /var/log/apache2

Agora vamos instalar as tabelas base do MySQL

/usr/local/bin/mysql_install_db

Agora vamos iniciar o nosso MySQL

/etc/rc.d/mysqld start

Agora vamos definir a senha para o root do MySQL

/usr/local/bin/mysqladmin -u root password 'S3Nh4'

Agora vamos acessar o nosso MySQL para verificar se esta tudo ok

mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.1.70-log OpenBSD port: mysql-server-5.1.70v0

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> \q
Bye

Como pode ser notado o nosso MySQL está ok

Agora vamos acertar as permissões do tmp da jaula do MySQL

chmod 1777 /var/www/tmp

Agora vamos criar o diretório que vai receber o socket do MySQL e vamos acertar as permissões

mkdir -p /var/www/var/run/mysql
chown _mysql:_mysql /var/www/var/run/mysql
chmod 711 /var/www/var/run/mysql

Agora vamos inserir o apache e o mysql na inicialização do OpenBSD

vim /etc/rc.conf.local
httpd2_flags=""
mysqld_flags=""
pkg_scripts="mysqld httpd2"

Agora vamos criar um arquivo para testarmos o php

echo "<?php phpinfo(); ?>" > /var/www/openbsd/index.php

Agora vamos criar um arquivo para testarmos o php com o MySQL

vim /var/www/openbsd/mysql.php
<?php
$link = mysql_connect('localhost', 'root', 'S3Nh4');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';
mysql_close($link);
?>

Agora vamos iniciar o serviço do apache

/etc/rc.d/httpd2 start

Agora vamos mandar reiniciar o nosso servidor para recarregarmos todas as novas configurações

shutdown -r now

Agora vamos testar o php acessando http://openbsd.douglasqsantos.com.br ou http://ip_servidor

Agora vamos testar o MySQL acessando http://openbsd.douglasqsantos.com.br/mysql.php ou http://ip_servidor/mysql.php

Habilitando o https

Vamos criar o diretório para armazenar as chaves

mkdir /etc/apache2/ssl && cd /etc/apache2/ssl

Vamos criar a primeira chave do servidor

openssl genrsa -des3 -out server.key 1024
Generating RSA private key, 1024 bit long modulus
..........................................++++++
...++++++
e is 65537 (0x10001)
Enter pass phrase for /etc/ssl/private/server.key:
Verifying - Enter pass phrase for /etc/ssl/private/server.key:

Agora vamos gerar um pedido de assinatura do nosso certificado

openssl req -new -key server.key -out server.csr
Enter pass phrase for server.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) []:BR
State or Province Name (full name) []:Parana
Locality Name (eg, city) []:Curitiba
Organization Name (eg, company) []:Douglas
Organizational Unit Name (eg, section) []:IT
Common Name (eg, fully qualified host name) []:openbsd.douglasqsantos.com.br
Email Address []:douglas.q.santos@gmail.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:Douglas

Agora vamos assinar o nosso certificado

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Signature ok
subject=/C=BR/ST=Parana/L=Curitiba/O=Douglas/OU=IT/CN=openbsd.douglasqsantos.com.br/emailAddress=douglas.q.santos@gmail.com
Getting Private key
Enter pass phrase for server.key:

Agora vamos tirar a senha do certificado pois senão a cada vez que iniciarmos o apache ele vai solicitar a senha

cp server.key server.key.orig
openssl rsa -in server.key.orig -out server.key
Enter pass phrase for server.key.orig:
writing RSA key

Agora vamos ajustar o nosso virtualhost, aqui vamos forçar o virtualhost a utilizar o https

vim /etc/apache2/extra/httpd-vhosts.conf
<VirtualHost *:80>
    ServerName openbsd.douglasqsantos.com.br
    Redirect / https://openbsd.douglasqsantos.com.br/
</VirtualHost>
<VirtualHost *:443>
    ServerAdmin webmaster@douglasqsantos.com.br
    ServerName openbsd.douglasqsantos.com.br
    DocumentRoot "/var/www/openbsd"
     <Directory "/var/www/openbsd">
       Options -Indexes FollowSymLinks MultiViews
       AllowOverride All
       Order Allow,deny
       Allow From All
     </Directory>

     <IfModule mod_php5.c>
       AddType application/x-httpd-php .php
       php_flag expose_php Off
       php_flag allow_url_fopen Off
       php_flag allow_url_include Off
       php_flag magic_quotes_gpc Off
       php_flag register_globals Off
       php_flag disable_functions show_source
       php_flag disable_functions system
       php_flag disable_functions shell_exec
       php_flag disable_functions passthru
       php_flag disable_functions exec
       php_flag disable_functions popen
       php_flag disable_functions proc_open
       php_flag disable_functions symlink
       php_value upload_max_filesize  15M
       php_value post_max_size 15M
     </IfModule>
     CustomLog /var/log/apache2/openbsd.douglasqsantos.com.br-access.log combined
     ErrorLog /var/log/apache2/openbsd.douglasqsantos.com.br-error.log
     LogLevel warn
     SSLEngine on
     SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
     SSLCertificateFile "/etc/apache2/ssl/server.crt"
     SSLCertificateKeyFile "/etc/apache2/ssl/server.key"
    <FilesMatch "\.(cgi|shtml|phtml|php)$">
      SSLOptions +StdEnvVars
    </FilesMatch>
     BrowserMatch ".*MSIE.*" \
     nokeepalive ssl-unclean-shutdown \
     downgrade-1.0 force-response-1.0
     ServerSignature Off
</VirtualHost>

Agora vamos adicionar no httpd2 o listen 443 para que o apache possa escutar na porta de https

vim /etc/apache2/httpd2.conf
[...]
#Adicione na linha 42
Listen 443

Agora vamos reiniciar o apache

/etc/rc.d/httpd2 restart

Agora já podemos testar o apache em:

Agora vamos testar o php acessando https://openbsd.douglasqsantos.com.br ou https://ip_servidor

Agora vamos testar o MySQL acessando https://openbsd.douglasqsantos.com.br/mysql.php ou https://ip_servidor/mysql.php

Referências