Instalação e Configuração do Apache em Chroot + MySQL + PHP + SSL no OpenBSD 5.1

E ai galera, aqui eu vou abordar a instalação e configuração do Apache trabalhando em modo chroot no OpenBSD 5.1 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.1/packages/`machine -a`/

Agora vamos mandar instalar o PHP e o MySQL server

Primeiro precisamos descobrir a versão da biblioteca php-mysql

pkg_add php-mysql
Ambiguous: php-mysql could be php-mysql-5.3.10 php-mysql-5.2.17p5

Pronto aqui temos que a versão da nossa biblioteca PHP é php-mysql-5.3.10 vamos instalar ela e o MySQL server

pkg_add -v php-mysql-5.3.10 mysql-server

Agora precisamos acertar o link do php para o Apache

ln -s /var/www/conf/modules.sample/php-5.3.conf \
        /var/www/conf/modules/php.conf

Agora precisamos acertar o link do MySQL para o PHP

ln -fs /etc/php-5.3.sample/mysql.ini \
        /etc/php-5.3/mysql.ini

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.60-log OpenBSD port: mysql-server-5.1.60

Copyright (c) 2000, 2011, 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> quit

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

Vamos fazer um backup do arquivo my.cnf

cp /etc/my.cnf /etc/my.cnf.bkp

Agora vamos acertar a localização do socket do MySQL

vim /etc/my.cnf
[...]
[client]
#password       = your_password
port            = 3306
#Deixar o socket como abaixo
socket          = /var/www/var/run/mysql/mysql.sock
[...]
[mysqld]
port            = 3306
#Deixar o socket como abaixo
socket          = /var/www/var/run/mysql/mysql.sock
[...]

Agora vamos acertar o rc.conf para inicializar o Apache e o MySQL

vim /etc/rc.conf
[...]
#Deixar o httpd_flags como abaixo
httpd_flags=""          # for normal use: "" (or "-DSSL" after reading ssl(8))
#Deixar o pkg_scripts como abaixo
pkg_scripts="mysqld"

Agora vamos criar um arquivo para testarmos o php

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

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

vim /var/www/htdocs/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 mandar reiniciar o nosso servidor para recarregarmos todas as novas configurações

shutdown -r now

Agora vamos testar o php acessando http://ip_servidor/phpinfo.php

Agora vamos testar o MySQL acessando http://ip_servidor/mysql.php

Habilitando o https

Vamos criar a primeira chave do servidor

openssl genrsa -des3 -out /etc/ssl/private/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 /etc/ssl/private/server.key -out /etc/ssl/private/server.csr
Enter pass phrase for /etc/ssl/private/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) []:TI
Common Name (eg, fully qualified host name) []:openbsd.douglasqsantos.com.br
Email Address []:douglas@douglasqsantos.com.br

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 /etc/ssl/private/server.csr -signkey /etc/ssl/private/server.key -out /etc/ssl/server.crt
Signature ok
subject=/C=BR/ST=Parana/L=Curitiba/O=Douglas/OU=TI/CN=openbsd.douglasqsantos.com.br/emailAddress=douglas@douglasqsantos.com.br
Getting Private key
Enter pass phrase for /etc/ssl/private/server.key:

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

cd /etc/ssl/private
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 acertar o /etc/rc.conf para o apache reconhecer o https

vim /etc/rc.conf
[...]
httpd_flags="-DSSL"

Agora vamos parar o apache

apachectl stop
/usr/sbin/apachectl stop: httpd stopped

Agora vamos inicializar ele com o suporte a ssl

apachectl startssl
/usr/sbin/apachectl startssl: httpd started

Agora já podemos testar o apache em:

Agora vamos testar o php acessando https://ip_servidor/phpinfo.php

Agora vamos testar o MySQL acessando https://ip_servidor/mysql.php

Referências