대규모 테넌트 애플리케이션의 향후 릴리스에 대해 SSL 종료를 수행하기 위해 haproxy 1.5.14를 설정하고 있습니다. 수백 개의 도메인 이름이 앱에 사용됩니다. 대부분의 인증서는 와일드카드용입니다.
모든 *.pem 파일을 디렉토리에 넣고 다음 바인드 라인을 사용하여 해당 디렉토리에서 haproxy를 지정했습니다.
bind *:443 ssl crt /media/windowsshare/aleyant-fs/ssl/pem/
훌륭하게 작동합니다. 브라우저는 SNI를 사용하여 도메인 이름을 보내고, haproxy는 올바른 인증서를 찾고, TLS가 협상된 다음 haproxy가 이를 백엔드에 전달합니다. 정말 멋지네요...
... 중간 인증서가 사용되지 않는다는 점만 제외됩니다.
나는 지시를 따랐다.여기. 각 pem 파일에는 개인 키, 도메인 인증서 및 중간 인증서가 연결되어 포함되어 있습니다. 예를 들어 다음은 pem 파일 중 하나입니다(개인 키는 생략됨).
Bag Attributes
Microsoft Local Key set: <No Values>
localKeyID: 01 00 00 00
friendlyName: le-6636f293-52ab-4054-9479-d004fe39ca60
Microsoft CSP Name: Microsoft RSA SChannel Cryptographic Provider
Key Attributes
X509v3 Key Usage: 10
-----BEGIN PRIVATE KEY-----
---------------OMITTED FOR SECURITY ------------
-----END PRIVATE KEY-----
Bag Attributes
localKeyID: 01 00 00 00
friendlyName: v6.pressero.com (Wildcard)
subject=/OU=Domain Control Validated/CN=*.v6.pressero.com
issuer=/C=BE/O=GlobalSign nv-sa/CN=AlphaSSL CA - SHA256 - G2
-----BEGIN CERTIFICATE-----
MIIE3TCCA8WgAwIBAgISESHTmCuIWLtnW8IH/eJb79kQMA0GCSqGSIb3DQEBCwUA
....
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIETTCCAzWgAwIBAgILBAAAAAABRE7wNjEwDQYJKoZIhvcNAQELBQAwVzELMAkG
...
-----END CERTIFICATE-----
하지만 openssl을 확인해보면 haproxy가 전체 체인을 제공하지 않는 것을 알 수 있습니다.
CONNECTED(00000003)
--- Certificate chain 0 s:/OU=Domain Control Validated/CN=*.abp-inc.com
i:/C=BE/O=GlobalSign nv-sa/CN=AlphaSSL CA - SHA256 - G2
-----BEGIN CERTIFICATE-----
MIIE0TCCA7mgAwIBAgISESHIIsDizkD1ipb3UIUxxmbbMA0GCSqGSIb3DQEBCwUA
....
-----END CERTIFICATE-----
---
Server certificate
subject=/OU=Domain Control Validated/CN=*.abp-inc.com
issuer=/C=BE/O=GlobalSign nv-sa/CN=AlphaSSL CA - SHA256 - G2
---
No client certificate CA names sent
Peer signing digest: SHA512
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 1936 bytes and written 482 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES128-SHA256
Session-ID: 6112D93EF9ABB9FC9286BA4D5761012208599691BFCF6258ECA6E03B25146F71
Session-ID-ctx:
Master-Key: 400EF52DB453A3D4AB9BC00CDFD713B7298DE03F101F3646D95A6F3D7E78E4D8FD582688109AF3E8A7B957DE8F788D0A
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket lifetime hint: 300 (seconds)
TLS session ticket:
0000 - f3 a9 9e 90 5d a1 b7 75-b7 ef db 10 92 ef 87 1f ....]..u........
0010 - 3d ff f1 17 e4 34 6f 72-c8 fe 2b d5 ca c0 4e 81 =....4or..+...N.
0020 - f7 85 5b 6f 87 b0 51 47-d9 4a 2c 2a 0d 98 59 62 ..[o..QG.J,*..Yb
0030 - ca ef dc cd 9e 09 43 dd-37 a9 8a a3 1a c3 f9 b1 ......C.7.......
0040 - 9e e5 c6 99 b4 96 f0 4b-52 22 f8 db 17 50 9d 0a .......KR"...P..
0050 - 75 4d 33 f2 96 32 6d 67-b7 ec fc a6 c9 5e c9 1e uM3..2mg.....^..
0060 - 47 6c f0 69 61 5d 12 ed-9c 52 51 2e 5a f5 74 68 Gl.ia]...RQ.Z.th
0070 - e7 17 9d ca 14 49 3e 84-c6 da 4a 8d 8b 18 f8 a4 .....I>...J.....
0080 - ca 1b 3c 17 60 0d 42 15-48 55 64 74 79 12 8f 4d ..<.`.B.HUdty..M
0090 - 17 2f 28 d1 72 01 11 bc-e5 b3 02 0c da 47 1b 3b ./(.r........G.;
Start Time: 1444168700
Timeout : 300 (sec)
Verify return code: 21 (unable to verify the first certificate)
---
HTTP/1.0 400 Bad request
Cache-Control: no-cache
Connection: close
Content-Type: text/html
<html><body><h1>400 Bad request</h1> Your browser sent an invalid request. </body></html>
closed
어떤 제안이라도 대단히 감사하겠습니다.
답변1
나는 바보다. 따라해서 바로 해냈어요이것, 그런데 제가 테스트를 잘못했어요. -servername
에 대한 인수를 잊어버렸습니다 openssl s_client -connect ...
. SNI가 haproxy로 전송되지 않은 상태에서 다음을 선택했습니다.첫 번째내가 가지고 있던 디렉토리에서 PEM 파일을 찾았습니다.~ 아니다(아직)에 중간 인증서를 추가했습니다.