blob: b138673c59c240f83433d3a2ab79c5eccc7dd0f3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
# This file contains a partial Apache2 server configuration which
# enables reverse proxy service for Kea RESTful API. An access to
# the service is protected by client's certificate verification
# mechanism. Before using this configuration a server administrator
# must generate server certificate and private key as well as
# the certificate authority (CA). The clients' certificates must
# be signed by the CA.
#
# Note that the steps provided below to generate and setup certificates
# are provided as an example for testing purposes only. Always
# consider best known security measures to protect your production
# environment.
#
# The server certificate and key can be generated as follows:
#
# openssl genrsa -des3 -out kea-proxy.key 4096
# openssl req -new -x509 -days 365 -key kea-proxy.key -out kea-proxy.crt
#
# The CA certificate and key can be generated as follows:
#
# openssl genrsa -des3 -out ca.key 4096
# openssl req -new -x509 -days 365 -key ca.key -out ca.crt
#
#
# The client certificate needs to be generated and signed:
#
# openssl genrsa -des3 -out kea-client.key 4096
# openssl req -new -key kea-client.key -out kea-client.csr
# openssl x509 -req -days 365 -in kea-client.csr -CA ca.crt \
# -CAkey ca.key -set_serial 10 -out kea-client.crt
#
# Note that the 'common name' value used when generating the client
# and the server certificates must differ from the value used
# for the CA certificate.
#
# The client certificate must be deployed on the client system.
# In order to test the proxy configuration with 'curl' run
# command similar to the following:
#
# curl -k --key kea-client.key --cert kea-client.crt -X POST \
# -H Content-Type:application/json -d '{ "command": "list-commands" }' \
# https://kea.example.org/kea
#
# On some curl running on macOS the crypto library requires a PKCS#12
# bundle with the private key and the certificate as the cert argument.
# The PKCS#12 file can be generated by:
#
# openssl pkcs12 -export -in kea-client.crt -inkey kea-client.key \
# -out kea-client.p12
#
# If the password is kea, curl command becomes:
#
# curl -k --cert kea-client.p12:kea -X POST \
# -H Content-Type:application/json -d '{ "command": "list-commands" }' \
# https://kea.example.org/kea
#
#
# In order to use this configuration within your Apache2 configuration
# put the following line in the main Apache 2 configuration file:
#
# Include /path/to/kea-httpd2.conf
#
# and specify a path appropriate for your system.
#
#
# Apache2 server configuration starts here.
#
# Address and port that the server should bind to.
# Usually an explicit address is specified to avoid binding to
# many addresses. For testing https connection on the localhost
# use:
# Listen [::1]:443 or
# Listen 127.0.0.1:443
Listen *:443
# List the ciphers that the client is permitted to negotiate,
# and that httpd will negotiate as the client of a proxied server.
# See the OpenSSL documentation for a complete list of ciphers, and
# ensure these follow appropriate best practices for this deployment.
# httpd 2.2.30, 2.4.13 and later force-disable aNULL, eNULL and EXP ciphers,
# while OpenSSL disabled these by default in 0.9.8zf/1.0.0r/1.0.1m/1.0.2a.
SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4
SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4
# User agents such as web browsers are not configured for the user's
# own preference of either security or performance, therefore this
# must be the prerogative of the web server administrator who manages
# cpu load versus confidentiality, so enforce the server's cipher order.
SSLHonorCipherOrder on
# List the protocol versions which clients are allowed to connect with.
# Disable SSLv2 and SSLv3 by default (cf. RFC 7525 3.1.1). TLSv1 (1.0)
# should be disabled as quickly as practical. By the end of 2016, only
# the TLSv1.2 protocol or later should remain in use.
SSLProtocol all -SSLv2 -SSLv3
SSLProxyProtocol all -SSLv2 -SSLv3
# Semaphore:
# Configure the path to the mutual exclusion semaphore the
# SSL engine uses internally for inter-process synchronization.
SSLMutex "file:/usr/local/var/run/apache2/ssl_mutex"
<VirtualHost *:443>
# For URLs such as https://kea.example.org/kea, forward the requests
# to http://127.0.0.1:8000
ProxyPass /kea http://127.0.0.1:8000/
ProxyPassReverse /kea http://127.0.0.1:8000/
# Disable connection keep alive between the proxy and Kea because
# Kea doesn't support this mechanism.
SetEnv proxy-nokeepalive 1
# Set server name.
ServerName kea.example.org
# Enable SSL for this virtual host.
SSLEngine on
# Server certificate and private key.
SSLCertificateFile "/path/to/kea-proxy.crt"
SSLCertificateKeyFile "/path/to/kea-proxy.key"
# Enable verification of the client certificate.
SSLVerifyClient require
# Certificate Authority. Client certificate must be signed by the CA.
SSLCACertificateFile "/path/to/ca.crt"
</VirtualHost>
|