今回のテーマは暗号化です。SMTPやPOP3プロトコルでは平文パスワードがネットワーク上を流れることが知られていますが、
たとえば、
信頼されたネットワーク内のみで運用するのであれば話は別ですが、
暗号化の種類
データを暗号化させるためには、
ひとつ目の方法はSSL/
もうひとつの方法は、
今回は前者のSSLによる設定を紹介します。
OpenLDAPとSSL/TLS設定 
SSL設定を行うためにはサーバ鍵、
ちなみに、
サーバ鍵の作成
opensslコマンドを使ってサーバ鍵を作成しますが、
% mkdir /tmp/ssl % cd /tmp/ssl % openssl genrsa -in server.key.tmp -out server.key Generating RSA private key, 1024 bit long modulus ................................................................++++++ .++++++ unable to write 'random state' e is 65537 (0x10001) Enter pass phrase for server.key.tmp: パスフレーズを入力 Verifying - Enter pass phrase for server.key.tmp: パスフレーズを入力 % openssl rsa -in server.key.tmp -out server.key Enter pass phrase for server.key.tmp: 先ほどのパスフレーズを入力 writing RSA key
次に自分自身でサインする証明書を作成します。今回の目的は先に述べたよう、
% openssl req -new -x509 -days 3650 -key server.key -out server.crt 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]:JP State or Province Name (full name) [Some-State]:Tokyo Locality Name (eg, city) []:Minato-ku Organization Name (eg, company) [Internet Widgits Pty Ltd]:BLUECOARA Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []:secure.bluecoara.net Email Address []:
整理しておきますと、
-----BEGIN RSA PRIVATE KEY----- 
MIICXgIBAAKBgQDJU87P/DCNcbT1GbUF4GGsd0AlA637NO9RZ8VV3WGca5ovPqII 
SYYjCEaVdlLdhfw545W5gS4LprsAFU00DKz9G+WAk2GwZgFxO8W5xB8RtvUTokeK 
s/PsOxDFR8PX2UTRZqZePnfxtAHx/Yd7e5EfamZpJ5/eqshjIbcP3p6MUQIDAQAB 
AoGBAMMTb9tb03faa6rqo9rz1fCVBBRZgmVcn19Tm4RdpE06fgW1PK+m/lBHno0I 
P7biMsms2dELeKBVh/DGsy3x8lL+eFEBYo9d9jeHUY6E0Y4e1GhNDisZwKehQUiV 
VwqHI81YbDMmtrZ2U4RWuddgKSyeVa+o63zYqhw/Tps7H+zZAkEA6FD2Sl12ISKZ 
WOZsj6q0orS4TjAjNOU+Z3Ql0deHzkbRN4xJL4QizVIP36+aiEpWydW7d7cnaxu1 
Hpoy7bti4wJBAN3aF2ql39nzwpYaQclbXYVgpsoxSPiapo/8ZpuV7dR6izuqW84l 
BsefE+1cfoU3yKtkZd6xRwG5gw5lqts31jsCQQDi2aQWK7tdUcbCC4d4pm1q7+OE 
3faTAUN1i/IePUMshvRnNIKGdpXxPi+n8naInWawAhfkJ6HDMjQjJNmUUMWXAkEA 
ydlgbNw266rpZIDHUlkaofvqRRTKe8bZvS+8e9rR5P0KKWM63Di8DmwiSVhalQLI 
RYi3VwKcxGjxYOwHpCUNeQJAAoEVQVxUhQq2aXKOaEdjjmODTh+WnbY0OcRgX6KX 
ZDKv4VOV+kRO5G1pKjtM/PMclhzf4l5lHZe5/BWE1LA2Gw== 
-----END RSA PRIVATE KEY----- -----BEGIN CERTIFICATE----- 
MIIDEDCCAnmgAwIBAgIJALnZerfv4y/qMA0GCSqGSIb3DQEBBQUAMGQxCzAJBgNV 
BAYTAkpQMQ4wDAYDVQQIEwVUb2t5bzESMBAGA1UEBxMJTWluYXRvLWt1MRIwEAYD 
VQQKEwlCTFVFQ09BUkExHTAbBgNVBAMTFHNlY3VyZS5ibHVlY29hcmEubmV0MB4X 
DTA4MDUwNDAzMjMxM1oXDTE4MDUwMjAzMjMxM1owZDELMAkGA1UEBhMCSlAxDjAM 
BgNVBAgTBVRva3lvMRIwEAYDVQQHEwlNaW5hdG8ta3UxEjAQBgNVBAoTCUJMVUVD 
T0FSQTEdMBsGA1UEAxMUc2VjdXJlLmJsdWVjb2FyYS5uZXQwgZ8wDQYJKoZIhvcN 
AQEBBQADgY0AMIGJAoGBAMlTzs/8MI1xtPUZtQXgYax3QCUDrfs071FnxVXdYZxr 
mi8+oghJhiMIRpV2Ut2F/DnjlbmBLgumuwAVTTQMrP0b5YCTYbBmAXE7xbnEHxG2 
9ROiR4qz8+w7EMVHw9fZRNFmpl4+d/G0AfH9h3t7kR9qZmknn96qyGMhtw/enoxR 
AgMBAAGjgckwgcYwHQYDVR0OBBYEFP2Kyzw0LBvTf2Q5DjVpckh/2tXAMIGWBgNV 
HSMEgY4wgYuAFP2Kyzw0LBvTf2Q5DjVpckh/2tXAoWikZjBkMQswCQYDVQQGEwJK 
UDEOMAwGA1UECBMFVG9reW8xEjAQBgNVBAcTCU1pbmF0by1rdTESMBAGA1UEChMJ 
QkxVRUNPQVJBMR0wGwYDVQQDExRzZWN1cmUuYmx1ZWNvYXJhLm5ldIIJALnZerfv 
4y/qMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAOjeLtA8YNh6QUuoP 
tLYt6RcJgWLVqpkpFv8f3kJgY02AIeSvcWP7sHCFtALf4YkhKEG8eKfQt3kA2jHb 
C3XJzxWGHMLoMBwe3IPdQbeadp8NyWVq6PqlAp0SpX42qRA3oUK0w6d/S4GUnE0S 
8n8o7k/mglbG1Q+aQdY9JQbD+o8= 
-----END CERTIFICATE----- では、
# cp server.key /etc/openldap/ # cp server.crt /etc/openldap/ # chmod 600 /etc/openldap/server.key # chown ldap:ldap /etc/openldap/server.*
また、
slapd.confの設定 
slapd.
# CAバンドルが必要な場合には指定
#TLSCACertificateFile /etc/openldap/ca-bundle.crt 
TLSCertificateFile /etc/openldap/server.crt 
TLSCertificateKeyFile /etc/openldap/server.key 最後にslapdプロセスを再起動して準備は完了です。このように証明書情報を適切にセットしておくと、
クライアントからの接続確認
接続確認をするために、
ldapsearch -x -H "ldaps://10.0.100.10/" -b "dc=example,dc=com" ldap_bind: Can't contact LDAP server (-1) additional info: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
あれれ、
冒頭で軽く触れたように、
そこで、
TLS_REQCERT     neverもしOpenLDAPをソースからコンパイルした場合には、
正しく設定した場合は、
% ldapsearch -x -H "ldaps://10.0.100.10/" -b "dc=example,dc=com" 
-- 省略 --
# hogeuser, People, example.com 
dn: uid=hogeuser,ou=People,dc=example,dc=com 
objectClass: account 
objectClass: posixAccount 
objectClass: ldapPublicKey 
uid: hogeuser 
cn: hogeuser 
loginShell: /bin/bash 
uidNumber: 2000 
gidNumber: 2000 
homeDirectory: /home/hogeuser 
sshPublicKey: ssh-dss AAAAB3NzaC1kc3MAAACBAJ5sBOzM/PCkETefX7yzrs+oEVOp3hwuBSpL 
 96pbkfoyQ5jvMABT6aGzXqQUTZu00Gke+G+CJeOg3rw9K7+ghrNuB4Rv33l1LdILjTTMFqDsvMo02 
 Un6DKv/EvAW++rarKDDU5DMJOEPqkOWTsPb683WP77fHcBxKsALVtVAFTMzAAAAFQDVPmzJd39IYv 
 KMWQsJQvzPefUX8wAAAIEAliBMDP2SFtPoAZMAbCtAwWtQmXh7C/+CJwrQEJMDYb1Pp+7jaOk+7Ag 
 sGMTA2abtSsPDvvhlrNXOyqx+EMYxibwnX4dnGS7NQAsQhqUmvqzzKfySD/UvJ6GQYtB9FMpju0L/ 
 qH5B5jtdfwggXTaGRXuadnzAZ7rrOOMvosqyhc8AAACBAInNQo10pbrnkp9grL+Db2/Rp1JXVajN0 
 2isPzfpS7uX9rohAlyTVLAjlwLwTGrp6CFwG4/t9e7jxlIo4Wm2r7LXgLr9u7+dg+oMENJpYkt/0N 
 tLBq40dICE8yhha58cQau5z98Ajc6dO9yvB2Bp6C3oDIiumPq/e2IMGjYYrtcP nomo@rx8 
実際にtcpdumpなどで636/
StartTLS
こちらもOpenLDAPに限った話ではなく、
この接続はldapsearchコマンドに-Zオプションを渡すだけで実現できます。それぞれのコマンドを実行中に389/
496.959580   10.0.100.1 -> 10.0.100.10  TCP 51450 > ldap [SYN] Seq=0 Win=5840 Len=0 MSS=1460 TSV=63349770 TSER=0 WS=7 
496.960331  10.0.100.10 -> 10.0.100.1   TCP ldap > 51450 [SYN, ACK] Seq=0 Ack=1 Win=5792 Len=0 MSS=1460 TSV=424013 TSER=63349770 WS=2 
496.960368   10.0.100.1 -> 10.0.100.10  TCP 51450 > ldap [ACK] Seq=1 Ack=1 Win=5888 Len=0 TSV=63349771 TSER=424013 
496.966756   10.0.100.1 -> 10.0.100.10  LDAP bindRequest(1) "" simple 
496.966934  10.0.100.10 -> 10.0.100.1   TCP ldap > 51450 [ACK] Seq=1 Ack=15 Win=5792 Len=0 TSV=424019 TSER=63349772 
496.967765  10.0.100.10 -> 10.0.100.1   LDAP bindResponse(1) success 
496.967786   10.0.100.1 -> 10.0.100.10  TCP 51450 > ldap [ACK] Seq=15 Ack=15 Win=5888 Len=0 TSV=63349772 TSER=424021 
496.968298   10.0.100.1 -> 10.0.100.10  LDAP searchRequest(2) "dc=example,dc=com" wholeSubtree 
496.971835  10.0.100.10 -> 10.0.100.1   LDAP searchResEntry(2) "dc=example,dc=com" 
496.973767  10.0.100.10 -> 10.0.100.1   LDAP searchResEntry(2) "ou=People,dc=example,dc=com" 
496.973854   10.0.100.1 -> 10.0.100.10  TCP 51450 > ldap [ACK] Seq=71 Ack=208 Win=5888 Len=0 TSV=63349774 TSER=424022 
496.974530  10.0.100.10 -> 10.0.100.1   LDAP searchResEntry(2) "ou=Group,dc=example,dc=com" 
496.975029  10.0.100.10 -> 10.0.100.1   LDAP searchResEntry(2) "cn=sshuser,ou=Group,dc=example,dc=com" 
496.975088   10.0.100.1 -> 10.0.100.10  TCP 51450 > ldap [ACK] Seq=71 Ack=417 Win=5888 Len=0 TSV=63349774 TSER=424025 
496.975724  10.0.100.10 -> 10.0.100.1   LDAP searchResEntry(2) "cn=hogeuser,ou=Group,dc=example,dc=com" 
496.976129  10.0.100.10 -> 10.0.100.1   LDAP searchResEntry(2) "uid=sshuser,ou=People,dc=example,dc=com" 
496.976146   10.0.100.1 -> 10.0.100.10  TCP 51450 > ldap [ACK] Seq=71 Ack=1411 Win=7680 Len=0 TSV=63349775 TSER=424027 
496.977116  10.0.100.10 -> 10.0.100.1   LDAP searchResEntry(2) "uid=hogeuser,ou=People,dc=example,dc=com" 
496.977590  10.0.100.10 -> 10.0.100.1   LDAP searchResDone(2) success 
496.977607   10.0.100.1 -> 10.0.100.10  TCP 51450 > ldap [ACK] Seq=71 Ack=2301 Win=9344 Len=0 TSV=63349775 TSER=424028 
496.977764   10.0.100.1 -> 10.0.100.10  LDAP unbindRequest(3) 
496.977975   10.0.100.1 -> 10.0.100.10  TCP 51450 > ldap [FIN, ACK] Seq=78 Ack=2301 Win=9344 Len=0 TSV=63349775 TSER=424028 
496.979528  10.0.100.10 -> 10.0.100.1   TCP ldap > 51450 [FIN, ACK] Seq=2301 Ack=79 Win=5792 Len=0 TSV=424031 TSER=63349775 
496.979562   10.0.100.1 -> 10.0.100.10  TCP 51450 > ldap [ACK] Seq=79 Ack=2302 Win=9344 Len=0 TSV=63349775 TSER=424031  513.712634   10.0.100.1 -> 10.0.100.10  TCP 51451 > ldap [SYN] Seq=0 Win=5840 Len=0 MSS=1460 TSV=63353959 TSER=0 WS=7 
513.712858  10.0.100.10 -> 10.0.100.1   TCP ldap > 51451 [SYN, ACK] Seq=0 Ack=1 Win=5792 Len=0 MSS=1460 TSV=426214 TSER=63353959 WS=2 
513.712890   10.0.100.1 -> 10.0.100.10  TCP 51451 > ldap [ACK] Seq=1 Ack=1 Win=5888 Len=0 TSV=63353959 TSER=426214 
513.713697   10.0.100.1 -> 10.0.100.10  LDAP extendedReq(1) LDAP_START_TLS_OID 
513.713825  10.0.100.10 -> 10.0.100.1   TCP ldap > 51451 [ACK] Seq=1 Ack=32 Win=5792 Len=0 TSV=426216 TSER=63353959 
513.714085  10.0.100.10 -> 10.0.100.1   LDAP extendedResp(1) [LDAP_START_TLS_OID responseName missing] 
513.714101   10.0.100.1 -> 10.0.100.10  TCP 51451 > ldap [ACK] Seq=32 Ack=15 Win=5888 Len=0 TSV=63353959 TSER=426217 
513.717707   10.0.100.1 -> 10.0.100.10  SSLv2 Client Hello 
513.721392  10.0.100.10 -> 10.0.100.1   TLSv1 Server Hello, Certificate, Server Hello Done 
513.722359   10.0.100.1 -> 10.0.100.10  TLSv1 Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message 
513.726489  10.0.100.10 -> 10.0.100.1   TLSv1 Change Cipher Spec, Encrypted Handshake Message 
513.727464   10.0.100.1 -> 10.0.100.10  TLSv1 Application Data, Application Data 
513.727822  10.0.100.10 -> 10.0.100.1   TLSv1 Application Data, Application Data 
513.728385   10.0.100.1 -> 10.0.100.10  TLSv1 Application Data, Application Data 
513.728864  10.0.100.10 -> 10.0.100.1   TLSv1 Application Data, Application Data 
513.729058  10.0.100.10 -> 10.0.100.1   TLSv1 Application Data, Application Data 
513.729175  10.0.100.10 -> 10.0.100.1   TLSv1 Application Data, Application Data 
513.729871   10.0.100.1 -> 10.0.100.10  TCP 51451 > ldap [ACK] Seq=584 Ack=1533 Win=13056 Len=0 TSV=63353963 TSER=426228 
513.730069  10.0.100.10 -> 10.0.100.1   TLSv1 Application Data, Application Data, Application Data, Application Data, Application Data, Application Data, Application Data, 
513.730250  10.0.100.10 -> 10.0.100.1   TLSv1 Application Data 
513.730266   10.0.100.1 -> 10.0.100.10  TCP 51451 > ldap [ACK] Seq=584 Ack=3887 Win=18816 Len=0 TSV=63353963 TSER=426231 
513.731168   10.0.100.1 -> 10.0.100.10  TLSv1 Application Data, Application Data 
513.731567  10.0.100.10 -> 10.0.100.1   TLSv1 Encrypted Alert 
513.731691  10.0.100.10 -> 10.0.100.1   TCP ldap > 51451 [FIN, ACK] Seq=3924 Ack=658 Win=6864 Len=0 TSV=426233 TSER=63353963 
513.731914   10.0.100.1 -> 10.0.100.10  TLSv1 Encrypted Alert 
513.748263  10.0.100.10 -> 10.0.100.1   TCP ldap > 51451 [RST] Seq=3925 Win=0 Len=0 
513.748373   10.0.100.1 -> 10.0.100.10  TCP 51451 > ldap [RST, ACK] Seq=695 Ack=3925 Win=18816 Len=0 TSV=63353968 TSER=426232 このように、
最後に
今回はSSL/
暗号化は効果的なセキュリティ対策ですが、
本当にそのネットワーク上にSSLが必要なのか検討した上で、
