Apache tls — различия между версиями
Материал из pNp Wiki
Andy (обсуждение | вклад) (→Включение TLS в Apache) |
Andy (обсуждение | вклад) (→Включение TLS в Apache) |
||
| Строка 18: | Строка 18: | ||
SSLProtocol all -SSLv2 -SSLv3 | SSLProtocol all -SSLv2 -SSLv3 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| − | Далее следует создать сертификат. | + | Далее следует создать сертификат. Сделать это можно несколькими способами: |
| + | |||
| + | ==== Создание сертификата при помощи cli ==== | ||
| + | Помнить все ключи для openssl не обязательно, достаточно поглядеть в имеющихся <code>Makefile</code>'ах: | ||
| + | <syntaxhighlight lang="bash"> | ||
| + | [root@vm-01 certs]# rpm -ql openssl | head | ||
| + | /etc/pki/CA | ||
| + | /etc/pki/CA/certs | ||
| + | /etc/pki/CA/crl | ||
| + | /etc/pki/CA/newcerts | ||
| + | /etc/pki/CA/private | ||
| + | /etc/pki/tls/certs/Makefile | ||
| + | /etc/pki/tls/certs/make-dummy-cert | ||
| + | /etc/pki/tls/certs/renew-dummy-cert | ||
| + | /etc/pki/tls/misc/CA | ||
| + | /etc/pki/tls/misc/c_hash | ||
| + | [root@vm-01 certs]# | ||
| + | </syntaxhighlight> | ||
| + | Посмотрим содержимое <code>/etc/pki/tls/certs/Makefile</code>: | ||
| + | <syntaxhighlight lang="bash"> | ||
| + | [root@vm-01 certs]# cat /etc/pki/tls/certs/Makefile | ||
| + | UTF8 := $(shell locale -c LC_CTYPE -k | grep -q charmap.*UTF-8 && echo -utf8) | ||
| + | SERIAL=0 | ||
| + | DAYS=365 | ||
| + | KEYLEN=2048 | ||
| + | TYPE=rsa:$(KEYLEN) | ||
| + | |||
| + | .PHONY: usage | ||
| + | .SUFFIXES: .key .csr .crt .pem | ||
| + | .PRECIOUS: %.key %.csr %.crt %.pem | ||
| + | |||
| + | usage: | ||
| + | @echo "This makefile allows you to create:" | ||
| + | @echo " o public/private key pairs" | ||
| + | @echo " o SSL certificate signing requests (CSRs)" | ||
| + | @echo " o self-signed SSL test certificates" | ||
| + | @echo | ||
| + | @echo "To create a key pair, run \"make SOMETHING.key\"." | ||
| + | @echo "To create a CSR, run \"make SOMETHING.csr\"." | ||
| + | @echo "To create a test certificate, run \"make SOMETHING.crt\"." | ||
| + | @echo "To create a key and a test certificate in one file, run \"make SOMETHING.pem\"." | ||
| + | @echo | ||
| + | @echo "To create a key for use with Apache, run \"make genkey\"." | ||
| + | @echo "To create a CSR for use with Apache, run \"make certreq\"." | ||
| + | @echo "To create a test certificate for use with Apache, run \"make testcert\"." | ||
| + | @echo | ||
| + | @echo "To create a test certificate with serial number other than zero, add SERIAL=num" | ||
| + | @echo "You can also specify key length with KEYLEN=n and expiration in days with DAYS=n" | ||
| + | @echo | ||
| + | @echo Examples: | ||
| + | @echo " make server.key" | ||
| + | @echo " make server.csr" | ||
| + | @echo " make server.crt" | ||
| + | @echo " make stunnel.pem" | ||
| + | @echo " make genkey" | ||
| + | @echo " make certreq" | ||
| + | @echo " make testcert" | ||
| + | @echo " make server.crt SERIAL=1" | ||
| + | @echo " make stunnel.pem SERIAL=2" | ||
| + | @echo " make testcert SERIAL=3" | ||
| + | |||
| + | %.pem: | ||
| + | umask 77 ; \ | ||
| + | PEM1=`/bin/mktemp /tmp/openssl.XXXXXX` ; \ | ||
| + | PEM2=`/bin/mktemp /tmp/openssl.XXXXXX` ; \ | ||
| + | /usr/bin/openssl req $(UTF8) -newkey $(TYPE) -keyout $$PEM1 -nodes -x509 -days $(DAYS) -out $$PEM2 -set_serial $(SERIAL) ; \ | ||
| + | cat $$PEM1 > $@ ; \ | ||
| + | echo "" >> $@ ; \ | ||
| + | cat $$PEM2 >> $@ ; \ | ||
| + | $(RM) $$PEM1 $$PEM2 | ||
| + | |||
| + | %.key: | ||
| + | umask 77 ; \ | ||
| + | /usr/bin/openssl genrsa -aes128 $(KEYLEN) > $@ | ||
| + | |||
| + | %.csr: %.key | ||
| + | umask 77 ; \ | ||
| + | /usr/bin/openssl req $(UTF8) -new -key $^ -out $@ | ||
| + | |||
| + | %.crt: %.key | ||
| + | umask 77 ; \ | ||
| + | /usr/bin/openssl req $(UTF8) -new -key $^ -x509 -days $(DAYS) -out $@ -set_serial $(SERIAL) | ||
| + | |||
| + | TLSROOT=/etc/pki/tls | ||
| + | KEY=$(TLSROOT)/private/localhost.key | ||
| + | CSR=$(TLSROOT)/certs/localhost.csr | ||
| + | CRT=$(TLSROOT)/certs/localhost.crt | ||
| + | |||
| + | genkey: $(KEY) | ||
| + | certreq: $(CSR) | ||
| + | testcert: $(CRT) | ||
| + | |||
| + | $(CSR): $(KEY) | ||
| + | umask 77 ; \ | ||
| + | /usr/bin/openssl req $(UTF8) -new -key $(KEY) -out $(CSR) | ||
| + | |||
| + | $(CRT): $(KEY) | ||
| + | umask 77 ; \ | ||
| + | /usr/bin/openssl req $(UTF8) -new -key $(KEY) -x509 -days $(DAYS) -out $(CRT) -set_serial $(SERIAL) | ||
| + | [root@vm-01 certs]# | ||
| + | </syntaxhighlight> | ||
| + | Для создания <code>crt</code> сертификата нам подойдет нижняя строка, с небольшой модификацией: | ||
| + | <syntaxhighlight lang="bash"> | ||
| + | [root@vm-01 certs]# /usr/bin/openssl req -new -nodes -x509 -days 365 -out /etc/pki/tls/certs/vm-01.example.com.crt -keyout /etc/pki/tls/private/vm-01.example.com.key | ||
| + | Generating a 2048 bit RSA private key | ||
| + | ........................................+++ | ||
| + | ........................................+++ | ||
| + | writing new private key to '/etc/pki/tls/private/vm-01.example.com.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) [XX]:RU | ||
| + | State or Province Name (full name) []:Moscow | ||
| + | Locality Name (eg, city) [Default City]:Moscow | ||
| + | Organization Name (eg, company) [Default Company Ltd]:Horns and Hoofs | ||
| + | Organizational Unit Name (eg, section) []: | ||
| + | Common Name (eg, your name or your server's hostname) []:vm-01.example.com | ||
| + | Email Address []: | ||
| + | [root@vm-01 certs]# | ||
| + | </syntaxhighlight> | ||
| + | Проверим наличие нужных файлов: | ||
| + | <syntaxhighlight lang="bash"> | ||
| + | [root@vm-01 certs]# ls -lahi /etc/pki/tls/certs/vm-01.example.com.crt | ||
| + | 57343108 -rw-r--r--. 1 root root 1.3K Jan 31 10:00 /etc/pki/tls/certs/vm-01.example.com.crt | ||
| + | [root@vm-01 certs]# ls -lahi /etc/pki/tls/private/vm-01.example.com.key | ||
| + | 34004217 -rw-r--r--. 1 root root 1.7K Jan 31 10:00 /etc/pki/tls/private/vm-01.example.com.key | ||
| + | [root@vm-01 certs]# | ||
| + | </syntaxhighlight> | ||
Версия 10:03, 31 января 2018
Содержание
Конфигурирование Apache. Конфигурация TLS
Предварительные требования
- Виртуальная машина с двумя сетевыми интерфейсами
- Установленные пакеты:
bash-completion,policycoreutils,policycoreutils-python,policycoreutils-devel,setroubleshoot-server,httpd,httpd-manual,elinks,curl,perl,openssl,mod-ssl
Включение TLS в Apache
Установим mod_ssl
[root@vm-01 ~]# yum install -y mod_ssl crypto-utilsПосле инсталляции пакета, у нас появился файл /etc/httpd/conf.d/ssl.conf в котором указываются настройки защищенного
соединения для вебсервера. Нам нужно дописать в него параметр -SSLv3 в секцию SSLProtocol:
# SSL Protocol support:
# List the enable protocol levels with which clients will be able to
# connect. Disable SSLv2 access by default:
SSLProtocol all -SSLv2 -SSLv3Далее следует создать сертификат. Сделать это можно несколькими способами:
Создание сертификата при помощи cli
Помнить все ключи для openssl не обязательно, достаточно поглядеть в имеющихся Makefile'ах:
[root@vm-01 certs]# rpm -ql openssl | head
/etc/pki/CA
/etc/pki/CA/certs
/etc/pki/CA/crl
/etc/pki/CA/newcerts
/etc/pki/CA/private
/etc/pki/tls/certs/Makefile
/etc/pki/tls/certs/make-dummy-cert
/etc/pki/tls/certs/renew-dummy-cert
/etc/pki/tls/misc/CA
/etc/pki/tls/misc/c_hash
[root@vm-01 certs]#Посмотрим содержимое /etc/pki/tls/certs/Makefile:
[root@vm-01 certs]# cat /etc/pki/tls/certs/Makefile
UTF8 := $(shell locale -c LC_CTYPE -k | grep -q charmap.*UTF-8 && echo -utf8)
SERIAL=0
DAYS=365
KEYLEN=2048
TYPE=rsa:$(KEYLEN)
.PHONY: usage
.SUFFIXES: .key .csr .crt .pem
.PRECIOUS: %.key %.csr %.crt %.pem
usage:
@echo "This makefile allows you to create:"
@echo " o public/private key pairs"
@echo " o SSL certificate signing requests (CSRs)"
@echo " o self-signed SSL test certificates"
@echo
@echo "To create a key pair, run \"make SOMETHING.key\"."
@echo "To create a CSR, run \"make SOMETHING.csr\"."
@echo "To create a test certificate, run \"make SOMETHING.crt\"."
@echo "To create a key and a test certificate in one file, run \"make SOMETHING.pem\"."
@echo
@echo "To create a key for use with Apache, run \"make genkey\"."
@echo "To create a CSR for use with Apache, run \"make certreq\"."
@echo "To create a test certificate for use with Apache, run \"make testcert\"."
@echo
@echo "To create a test certificate with serial number other than zero, add SERIAL=num"
@echo "You can also specify key length with KEYLEN=n and expiration in days with DAYS=n"
@echo
@echo Examples:
@echo " make server.key"
@echo " make server.csr"
@echo " make server.crt"
@echo " make stunnel.pem"
@echo " make genkey"
@echo " make certreq"
@echo " make testcert"
@echo " make server.crt SERIAL=1"
@echo " make stunnel.pem SERIAL=2"
@echo " make testcert SERIAL=3"
%.pem:
umask 77 ; \
PEM1=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
PEM2=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
/usr/bin/openssl req $(UTF8) -newkey $(TYPE) -keyout $$PEM1 -nodes -x509 -days $(DAYS) -out $$PEM2 -set_serial $(SERIAL) ; \
cat $$PEM1 > $@ ; \
echo "" >> $@ ; \
cat $$PEM2 >> $@ ; \
$(RM) $$PEM1 $$PEM2
%.key:
umask 77 ; \
/usr/bin/openssl genrsa -aes128 $(KEYLEN) > $@
%.csr: %.key
umask 77 ; \
/usr/bin/openssl req $(UTF8) -new -key $^ -out $@
%.crt: %.key
umask 77 ; \
/usr/bin/openssl req $(UTF8) -new -key $^ -x509 -days $(DAYS) -out $@ -set_serial $(SERIAL)
TLSROOT=/etc/pki/tls
KEY=$(TLSROOT)/private/localhost.key
CSR=$(TLSROOT)/certs/localhost.csr
CRT=$(TLSROOT)/certs/localhost.crt
genkey: $(KEY)
certreq: $(CSR)
testcert: $(CRT)
$(CSR): $(KEY)
umask 77 ; \
/usr/bin/openssl req $(UTF8) -new -key $(KEY) -out $(CSR)
$(CRT): $(KEY)
umask 77 ; \
/usr/bin/openssl req $(UTF8) -new -key $(KEY) -x509 -days $(DAYS) -out $(CRT) -set_serial $(SERIAL)
[root@vm-01 certs]#Для создания crt сертификата нам подойдет нижняя строка, с небольшой модификацией:
[root@vm-01 certs]# /usr/bin/openssl req -new -nodes -x509 -days 365 -out /etc/pki/tls/certs/vm-01.example.com.crt -keyout /etc/pki/tls/private/vm-01.example.com.key
Generating a 2048 bit RSA private key
........................................+++
........................................+++
writing new private key to '/etc/pki/tls/private/vm-01.example.com.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) [XX]:RU
State or Province Name (full name) []:Moscow
Locality Name (eg, city) [Default City]:Moscow
Organization Name (eg, company) [Default Company Ltd]:Horns and Hoofs
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:vm-01.example.com
Email Address []:
[root@vm-01 certs]#Проверим наличие нужных файлов:
[root@vm-01 certs]# ls -lahi /etc/pki/tls/certs/vm-01.example.com.crt
57343108 -rw-r--r--. 1 root root 1.3K Jan 31 10:00 /etc/pki/tls/certs/vm-01.example.com.crt
[root@vm-01 certs]# ls -lahi /etc/pki/tls/private/vm-01.example.com.key
34004217 -rw-r--r--. 1 root root 1.7K Jan 31 10:00 /etc/pki/tls/private/vm-01.example.com.key
[root@vm-01 certs]#