SSL ์ธ์ฆ์ ๋ฐ ํค์ ํจ๊ป gunicorn์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. TLS ์ฐ๊ฒฐ 1.0์ ์ ๊ณตํฉ๋๋ค. TLS 1.2๋ฅผ ์ฌ์ฉํ๋๋ก gunicorn์ ๊ตฌ์ฑํ ์ ์์ต๋๊น?
@rrajaravi๋ , ์๋ ํ์ธ์, http://docs.gunicorn.org/en/latest/settings.html#ciphers๋ฅผ ์ค์ ํด ๋ณด์ จ์ต๋๊น ?
์ถฉ๋
์๋ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
์ด ๋ฌธ์ ๋ฅผ ๋ซ์ ์ ์์ต๋๊น?
TL;DR
Gunicorn์ ๋ค์์ ์ง์ํ๋ ๊ฒ์ผ๋ก ๋ณด์
๋๋ค.
TLSv1
SSLv2
๋ค์์ ์ง์ํ์ง ์์ต๋๋ค.
SSLv3
SSLv23
TLSv1_1
TLSv1_2
@berkerpeksag http://docs.gunicorn.org/en/latest/settings.html#ciphers ์ ๋ฌธ์๊ฐ ์ฌ๋ฐ๋ฅด์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
ssl.py์์ ํ๋กํ ์ฝ์ ์ฐพ์์ต๋๋ค. TLSv1 ๋ฐ SSLv2๋ฅผ ์ ์ธํ๊ณ ๋ Ubuntu 14.04 LTS, Python 3.5.1, OpenSSL 1.0.1f 2014๋
1์ 6์ผ์ ๋ช
๋ น์ค ์ต์
์์ ์ ๊ณต๋ ๋ ์๋ํ์ง ์์ต๋๋ค.
๋๋จธ์ง๋ ์ค๋ฅ์ ํจ๊ป ์คํจํฉ๋๋ค.
[2016-03-22 08:51:49 +0000] [2924] [์ค๋ฅ] ์์
์ ํ๋ก์ธ์ค์ ์์ธ:
์ญ์ถ์ (๊ฐ์ฅ ์ต๊ทผ ํธ์ถ ๋ง์ง๋ง):
ํ์ผ "/home/me/Envs/myproject/lib/python3.5/site-packages/gunicorn/workers/sync.py", 126ํ, ํธ๋ค
self.cfg.ssl_options)wrap_socket์ ํ์ผ "/usr/local/lib/python3.5/ssl.py", ์ค 1064์ํธ = ์ํธ)ํ์ผ "/usr/local/lib/python3.5/ssl.py", ์ค 690, **์ด๊ธฐํ
self._context.set_ciphers(์ํธ)
ssl.SSLError: ('์ํธ๋ฅผ ์ ํํ ์ ์์ต๋๋ค.',)
/usr/local/lib/python3.5/ssl.py
๋ค์ ์์๋ ๋ค์ํ SSL ํ๋กํ ์ฝ ๋ณํ์ ์๋ณํฉ๋๋ค.
PROTOCOL_SSLv2
PROTOCOL_SSLv3
PROTOCOL_SSLv23
PROTOCOL_TLSv1
PROTOCOL_TLSv1_1
PROTOCOL_TLSv1_2
๋ถ๋ฅํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. @edwardotis. ๋ฌธ์๋ฅผ ๋ช ํํ ํ๊ธฐ ์ํด ์ด๊ฒ์ ๋ค์ ์ด๊ฒ ์ต๋๋ค.
@berkerpeksag ๋ ์ข์ ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ฉํ๊ณ ์์ต๋๊น?
TLSv1
๋ ์ด์ Python ๋ฒ์ ์์๋ ๊ด์ฐฎ์ ๋ณด์ด์ง๋ง ๊ธฐ๋ณธ๊ฐ์ SSLv23
๋ก ๋ณ๊ฒฝํ์ฌ ์ต์์ ์ฌ์ฉ ๊ฐ๋ฅํ ํ๋กํ ์ฝ(ํด๋ผ์ด์ธํธ์ ์๋ฒ ๋ชจ๋์ ๋ํด)์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ํ Gunicorn 20์์ SSLv2
๋๋ SSLv3
๊ฐ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ ์์ธ๋ฅผ ๋ฐ์์์ผ์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค(๋ค์ 19.x ๋ฆด๋ฆฌ์ค์์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค).
@berkerpeksag : +1:
๋๊ตฌ๋ ์ง ์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ์ ๊ตฌํํ์ต๋๊น? ๊ทธ๋ ์ง ์๋ค๋ฉด ๊ธฐํ๋ฅผ ์ ๊ณตํ๊ณ ํ๋ณด๋ฅผ ์์ํ๊ฒ ์ต๋๋ค.. ์ํธ๋ฅผ > TLSv1.0์ผ๋ก ์ค์ ํ ์ ์๋ค๋ ๊ฒ์ ์ฐ๋ฆฌ์๊ฒ ์ค์ํ๋ฉฐ ์ฐ๋ฆฌ๊ฐ ๋ณผ ์ ์๋ ๊ฒ์์ ๋ณผ ๋ 1๋ณด๋ค ํฐ TLS ๋ฒ์ ์ ํ ์ ์์ต๋๋ค. t be set.. ๊ทธ๋ฅ ๊ธฐ๋ณธ๊ฐ์ด 1.0์ผ๋ก ๋์๊ฐ๋๋ค(์ฐ๋ฆฌ๋ ๋ฌธ์์ ๋์ด๋ ๊ฒ์ ์๋ํ๊ณ ์ฌ๊ธฐ์ ๋์ด๋ ์์๋ ์๋ฌด ์์ฉ์ด ์์์ต๋๋ค) -- ๋จ์ง No cipher can be selected
์ถ๋ ฅํฉ๋๋ค
@AndrewJHart ๊ต์ฅํ ๊ฑฐ์ผ ! :) ๊ฐ์ฌ!
๋ค๋ฅธ ๋ฒ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค. ๋ช
๋ น์ค์์ --ssl-version
์ ์์๋ฅผ ์ง์ ํ๊ธฐ ssl
stdlib ๋ชจ๋์์ ๊ฐ์ ธ์ต๋๋ค.
$ python -c "import ssl; print(ssl.PROTOCOL_SSLv23)"
2
$ python -c "import ssl; print(ssl.PROTOCOL_TLSv1_2)"
5
--ssl-version 2
๋๋ --ssl-version 5
๋ฅผ ์ง์ ํ๊ธฐ๋ง ํ๋ฉด TLS 1.2 ์ํธ๋ฅผ ์ง์ํด์ผ ํฉ๋๋ค.
@AndrewJHart SSL ๊ฐ์ ์ ๊ธฐ์ฌํ๊ณ ์ถ๋ค๋ฉด #1440์ ์ดํด๋ณด์ธ์. ์๋ฒ ์ํธ ์์ ๊ธฐ๋ณธ ์ค์ ๊ณผ ๊ฐ์ด ์ปจํ ์คํธ๋ฅผ ๋ ์ ์ ์ดํ๋ ค๋ฉด SSLContext๋ฅผ ์ฌ์ฉํ๋๋ก ์ ํํด์ผ ํฉ๋๋ค. ๋๊ธฐํ ์์ ์์ ๋ํด ์ด๋ฅผ ๊ตฌํํ๊ธฐ ์์ํ๋ ์์ ํจ๊ป ํด๋น ๋ฌธ์ ์ ๋ํ ์ฐจ์ด์ ์ ์ ์ ๊ฒ์ํ๊ฒ ์ต๋๋ค. SSL ์ง์์ ๊ฐ์ ํ๋ ๋ฐ ๋์์ ์ฃผ์๋ฉด ๋๋จํ ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
๋ํ TLSv1 ๋์ SSLv23 ์์๋ฅผ ์ฌ์ฉํ๋๋ก gunicorn/config.py์ ๊ธฐ๋ณธ๊ฐ์ ๋ณ๊ฒฝํ๋ ๊ฐ๋จํ pull ์์ฒญ์ด ์ข์ต๋๋ค.
์ฃ์กํฉ๋๋ค. #1140์ด๋ผ๊ณ ๋งํ๊ณ ์ถ์์ต๋๋ค.
์ ์ด ๋ฌธ์ ๊ฐ ๋ค์ ์ด๋ ธ๋์ง ์ดํด๊ฐ ๋์ง ์์ต๋๋ค. --ssl-version 2
Gunicorn์ ํ
์คํธํ์ผ๋ฉฐ TLS 1.2 ์ํธ๊ฐ ์ ๋๋ก ์๋ํ๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค.
๋๋ ๋ซ์ ๊ฒ์ด์ง๋ง, ๋ด๊ฐ ์๋ชปํ๋ค๊ณ ์๊ฐํ๋ค๋ฉด ๋ค์ ์ด๊ณ ์ค๋ช ํ์ญ์์ค.
๊ธฐ๋ณธ๊ฐ ๋ณ๊ฒฝ์ ์ถ์ ํ๊ธฐ ์ํด #1249๋ฅผ ์ด์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ ์ด์ ๋ก ๋ค์ ์ด์์ต๋๋ค.
a) ์ฌ์ฉ์๋ 2
๋๋ 5
๋์ 'SSLv23'
๋๋ 'TLSv1_2'
๋ฅผ ์ ๋ฌํ ์ ์์ด์ผ ํฉ๋๋ค.
b) ์ฌ์ฉ ๊ฐ๋ฅํ ์ต์
์ Python ๋ฌธ์๋ก ๋ฆฌ๋๋ ์
ํ๋ ๋์ ๋ฌธ์ํํด์ผ ํฉ๋๋ค. https://docs.python.org/3.5/library/ssl.html ์ stdlib์์ ๊ฐ์ฅ ๊ธด ๋ฌธ์ ์ค ํ๋์ด๋ฉฐ ์ฌ์ฉ์๋ ์ฌ์ฉ ๊ฐ๋ฅํ ์ต์
์ ํ์ธํ๋ ๋ฐ ๋๋ฌด ๋ง์ ์๊ฐ์ ํ ์ ํด์๋ ์๋ฉ๋๋ค.
๋ฌธ์ ๋ ์ด๋ธ์ ์ถ๊ฐํ์ฌ ๋ค์ ์ด์์ต๋๋ค.
19.5 ๋ฆด๋ฆฌ์ค ์ ์(์ฆ, ๊ฒฐํผ ์ ) ๋ซ์ ์ ์๋ค๋ฉด ์ฌ๊ธฐ์ ๋ฌด์์ด ํ์ํ์ง ์๋ ค์ฃผ์ญ์์ค. :)
์ด๊ฒ์ ๋ช
๋ช
๋ ์์์ ๋ํ ์ง์๋ง ์ ๊ณตํ๊ธฐ ์ํด ์ฌ์ ํ ์ด๋ ค ์์ต๋๋ค.
--ssl-๋ฒ์ ํ๋๊ทธ.
2016๋ 5์ 2์ผ ์์์ผ 05:43 Benoit Chesneau [email protected]์์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
19.5 ๋ฆด๋ฆฌ์ค ์ ์ ๋ซ์ ์ ์๋ค๋ฉด ์ฌ๊ธฐ์ ๋ฌด์์ด ํ์ํ์ง ์๋ ค์ฃผ์ญ์์ค.
(์ฆ, ๊ฒฐํผ ์ ) ๋ฉ์ง ๊ฒ์ ๋๋ค :)โ
์ด๊ธฐ/๋ซ๊ธฐ ์ํ๋ฅผ ์์ ํ๊ธฐ ๋๋ฌธ์ ์ด ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/benoitc/gunicorn/issues/1114#issuecomment -216225302
์ง๊ธ์ 3.x ๋ฒ์ ์ ์์ด๋ฒ๋ฆฌ์. ๋ชจ๋ ๋ฒ์ ์ python์์ ์ง์ํ๊ธฐ ์ํด ์ถ๊ฐํด์ผ ํ๋ ์์๋ ๋ฌด์์ ๋๊น?
๋ค์์ ๊ฐ๋ ์ฆ๋ช ์ ๋๋ค. https://github.com/benoitc/gunicorn/pull/1454
ํน์ ๋ค๋ฅธ ๋ฒ์ ์ TLS์์ ํ์ฑํ ๋๋ ๋นํ์ฑํํ ์ ์์ต๋๊น? ์๋ฅผ ๋ค์ด, ์ด์ ๋ฒ์ ์ ๋นํ์ฑํํ๊ฑฐ๋ ํ์ฑํํ ์ ์๊ธฐ๋ฅผ ์ํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ ๋๋ค. ๋ฌธ์์์ "--ssl-version"์ ์ฌ์ฉํ์ฌ ์ด์ ๋ฒ์ ์ ๋นํ์ฑํํ ์ ์๋์ง ๋๋ ๋ ๋ฒ ์ด์ ์ฌ์ฉํ ์ ์๋์ง(์: SSL3 ๋นํ์ฑํ ๋ฐ TLS1.0 ๋นํ์ฑํ) ๋ช ํํ์ง ์์ต๋๋ค.
๊ทธ ์ฌ์ฉ ์ ํ์ด ํ์ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐ SSLContext
์๋ก์ด ์ต์
์ ์ถ๊ฐ --ssl-options
(์ฐ๋ฆฌ๊ฐ ์๋ง ์ฌ์ฉ ssl.create_default_context()
์ SSLv3 ๋ฐ TLS 1.0์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋นํ์ฑํ ํ ์ ์๋๋ก) ๋๋ฌธ์์ด ๋๋ฌด ๋ง์ ์กฐํฉ์ด --ssl-version
๋ช
๋ช
๋ ์์๋ฅผ ํ์ฉํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง ์ฌ์ฉ์๋ ์ฌ์ ํ Gunicorn ๊ตฌ์ฑ ํ์ผ์ ๋ฃ์ ์ ์์ต๋๋ค.
ssl_options = ssl.OP_NO_COMPRESSION | ssl.OP_NO_SSLv2 | ssl.OP_NO_SSLv3
ํ๋กํ ์ฝ _๋ฐ ์ ํํ ๋ฒ์ _์ ๋ชจ๋ ์ง์ ํ๊ธฐ ์ํด PROTOCOL_
*๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ssl_options
๊ฐ ํ์ฌ ๊ตฌํ๋์ด ์์ง ์๋ค๊ณ ๊ฐ์ ํ๊ณ #1680์ ์ฌ๋ ธ์ต๋๋ค.
๋๊ตฐ๊ฐ ๋๋ฅผ ์ํ ์ง์นจ์ด ์์ ์ ์์ต๋๊น? ๋๋ ์ ์ ๋์ ์ด๊ฒ์ผ๋ก ๊ณ ์ํ๊ณ ์์ต๋๋ค. ๋ด ํ๊ฒฝ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Python 3.4.3
gunicorn==19.9.0
pyOpenSSL==18.0.0
cryptography==2.4.2
์ ๋ gunicorn ํ๋๊ทธ --ssl-version 5
๋ด ์๋ฒ๊ฐ TLS 1.2๋ฅผ ์ ๊ณตํ๋ ๊ฒ ๊ฐ์ง๋ง ๋ณด์๋์ง ์์ ์ํธ ์ ํ๊ตฐ์ ๋ง์ด ํ์ฉํฉ๋๋ค. ์ํธ ์ ํ๊ตฐ์ ์ด๋ป๊ฒ ์ ํํ ์ ์์ต๋๊น? --ciphers
ํ๋๊ทธ๋ฅผ ์๋ํ์ง๋ง ์ด์ด ์์์ต๋๋ค.
๊ฐ์ฌ!
--ssl-version 5 --ciphers ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256
์ ์๋ํฉ๋๋ค:
~# openssl s_client -connect localhost:443 - ์ํธ ECDHE-RSA-AES256-GCM-SHA384
์ฐ๊ฒฐ๋จ(00000003)
๊น์ด=3...
~# openssl s_client - ๋ก์ปฌ ํธ์คํธ ์ฐ๊ฒฐ:443 -์ํธํ DHE-RSA-AES256-GCM-SHA384
์ฐ๊ฒฐ๋จ(00000003)
140497569816640: ์ค๋ฅ:14094410 :SSL ๋ฃจํด:ssl3_read_bytes :sslv3 ๊ฒฝ๊ณ ํธ๋์ ฐ์ดํฌ ์คํจ:../ssl/record/rec_layer_s3.c :1407:SSL ๊ฒฝ๊ณ ๋ฒํธ 40
@lemrouch ๊ฐ์ฌํฉ๋๋ค. ์ด์ ์๋ ์ ๊ทธ๊ฒ์ด ํจ๊ณผ๊ฐ ์์๋์ง ํ์คํ์ง ์์ต๋๋ค. ๊ทธ๊ฒ์ ์ง๊ธ ๋๋ฅผ ์ํด ์ผํ๊ณ ์์ต๋๋ค!
gunicorn flask ์์ฉ ํ๋ก๊ทธ๋จ์ TLS1.0 ๋์ TLS 1.2๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น? ์ผ๋ถ๋ ๋ฃ์ด์ผ ํ๋ ํฐ๋ฏธ๋ ๋ช ๋ น์ด๋ ์ฝ๋๋ฅผ ๊ณต์ ํ ์ ์์ต๋๊น?
@rkbala ์ด๊ฒ์ ๋ด ํ๋ผ์คํฌ ์ฑ์ ๋ํ ๊ด๋ จ ์ฝ๋์ ๋ชจ์ต์ ๋๋ค.
...
from ssl import SSLContext, PROTOCOL_TLSv1_2, OP_NO_SSLv3, OP_NO_TLSv1, OP_NO_TLSv1_1
...
ssl = SSLContext(PROTOCOL_TLSv1_2)
ssl.set_ciphers('ECDH+AES256:ECDH+AES128:' +
'!aNULL:!eNULL:!MD5:!DSS:!RC4:!SSLv2:!SSLv3:!TLSv1')
ssl.options |= OP_NO_SSLv3
ssl.options |= OP_NO_TLSv1
ssl.options |= OP_NO_TLSv1_1
ssl.load_cert_chain('/etc/letsencrypt/live/fullchain.pem',
'/etc/letsencrypt/live/privkey.pem')
...
if __name__ == '__main__':
app.run(host='0.0.0.0', port='443', ssl_context=ssl)
@rkbala ์ด๊ฒ์ ๋ด ํ๋ผ์คํฌ ์ฑ์ ๋ํ ๊ด๋ จ ์ฝ๋์ ๋ชจ์ต์ ๋๋ค.
... from ssl import SSLContext, PROTOCOL_TLSv1_2, OP_NO_SSLv3, OP_NO_TLSv1, OP_NO_TLSv1_1 ... ssl = SSLContext(PROTOCOL_TLSv1_2) ssl.set_ciphers('ECDH+AES256:ECDH+AES128:' + '!aNULL:!eNULL:!MD5:!DSS:!RC4:!SSLv2:!SSLv3:!TLSv1') ssl.options |= OP_NO_SSLv3 ssl.options |= OP_NO_TLSv1 ssl.options |= OP_NO_TLSv1_1 ssl.load_cert_chain('/etc/letsencrypt/live/fullchain.pem', '/etc/letsencrypt/live/privkey.pem') ... if __name__ == '__main__': app.run(host='0.0.0.0', port='443', ssl_context=ssl)
@pixelrebel ๊ฐ์ฌํฉ๋๋ค!! ํด๋ณด๊ณ ์๋ ค๋๋ฆฌ๊ฒ ์ต๋๋ค.
์ด ssl.options |=OP_NO_*๋ ๋ฌด์์ ์๋ฏธํฉ๋๊น?
์ํธ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๊น? ์๋๋ฉด ์์ set_ciphers๊ฐ ๋ฌด์์ ์ํธ๋ฅผ ์ค์ ํฉ๋๊น?
@rkbala ๋นํธ ๋จ์ ๋๋ ์ฐ์ฐ์ด ํ์ํ ์ด์ ๋ฅผ ๊ธฐ์ตํ ์ ์์ต๋๋ค. ํ์ํ์ง ์์ ์๋ ์์ต๋๋ค. ํ ์คํธํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
TLS 1.2์ ํธํ๋๋ ์ํธ๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์ ๊ฒฝ์ฐ์๋ ์ฑ์์ Slack๊ณผ ํต์ ํ ์ ์๋ API๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋์ Slackbot์ด ์ฌ์ฉํ๋ ์ํธ๋ฅผ ์ง์ํ๊ธฐ๋ง ํ๋ฉด ๋์์ต๋๋ค.
@rkbala IO๋ ๋ด๊ฐ ๊ทธ ๊ตฌ๋ฌธ์ด ํ์ํ ์ด์ ๋ฅผ ๊ธฐ์ตํ์ง ๋ชปํ๋ค๋ ์ ์ ๋ถ๋ช ํ ํด์ผ ํ์ง๋ง ๋น์์๋ ๋ด ์ฑ์ด TLS1.2๋ง ์ฌ์ฉํ๊ณ ๋ ๋ฎ์ ๋ฒ์ ์ ์ฌ์ฉํ์ง ์๋๋ก ํ๊ธฐ ์ํด OP_NO_* ์ต์ ์ ๋ช ์์ ์ผ๋ก ์ง์ ํด์ผ ํ์ต๋๋ค.
@rkbala ๋นํธ ๋จ์ ๋๋ ์ฐ์ฐ์ด ํ์ํ ์ด์ ๋ฅผ ๊ธฐ์ตํ ์ ์์ต๋๋ค. ํ์ํ์ง ์์ ์๋ ์์ต๋๋ค. ํ ์คํธํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
TLS 1.2์ ํธํ๋๋ ์ํธ๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์ ๊ฒฝ์ฐ์๋ ์ฑ์์ Slack๊ณผ ํต์ ํ ์ ์๋ API๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋์ Slackbot์ด ์ฌ์ฉํ๋ ์ํธ๋ฅผ ์ง์ํ๊ธฐ๋ง ํ๋ฉด ๋์์ต๋๋ค.
์๊ฒ ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค. ์ง์ ํ์ง ์์ผ๋ฉด gunicorn์ด ๊ธฐ๋ณธ ํ์ด์ฌ ์ํธ๋ฅผ ์ฌ์ฉํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ด๊ฐ ํ๋ ธ๋ค๋ฉด ์ ์ ํ์ญ์์ค.
๋ํ ์์ ํ๋ผ์คํฌ ์ฝ๋๋ gunicorn์ด TLSv1.2์์๋ง ํ๋ผ์คํฌ ์ฑ์ ์์ํ๋๋ก ํฉ๋๊น? ์ง๋ฌธ์ gunicorn์ ํตํด ํ๋ผ์คํฌ ์ฑ์ ์คํํ๊ณ ์ถ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋๋ ์ค๋ gunicorn ํฐ๋ฏธ๋ ๋ช ๋ น "gunicorn โssl-version TLSV1_2 project:app "์ด tls v1.2์์ ํ๋ผ์คํฌ ์ฑ์ ์์ํ๋ค๋ ๊ฒ์ ๋ฐฐ์ ์ต๋๋ค. ์ด๋ค ๋ฐฉ๋ฒ์ด ๋ ํจ์จ์ ์ ๋๊น?
์, TLS 1.2๋ง ์ํํฉ๋๋ค. ๋ค๋ฅธ ๋ชจ๋ ๊ฒ์ AFAIK์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ๋์ผํ ํจ๊ณผ๊ฐ ์๋ค๊ณ ๊ฐ์ ํ์ง๋ง ๋ช ๋ น์ค ์ต์ ์ ์ฌ์ฉํ๋ฉด ์คํฌ๋ฆฝํธ์ ์ต์ ์ด ๋ฌด์๋ฉ๋๋ค. ๋๋ ๊ฒฐ์ฝ gunicorn์ ์ ๋ฌธ๊ฐ๊ฐ ์๋๋๋ค. ๊ทธ๋ฌ๋ ๋ด ์ถฉ๊ณ ๋ฅผ ํ ์์ ์๊ธ์ผ๋ก ๋ฐ์๋ค์ด์ญ์์ค.
์, TLS 1.2๋ง ์ํํฉ๋๋ค. ๋ค๋ฅธ ๋ชจ๋ ๊ฒ์ AFAIK์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ๋์ผํ ํจ๊ณผ๊ฐ ์๋ค๊ณ ๊ฐ์ ํ์ง๋ง ๋ช ๋ น์ค ์ต์ ์ ์ฌ์ฉํ๋ฉด ์คํฌ๋ฆฝํธ์ ์ต์ ์ด ๋ฌด์๋ฉ๋๋ค. ๋๋ ๊ฒฐ์ฝ gunicorn์ ์ ๋ฌธ๊ฐ๊ฐ ์๋๋๋ค. ๊ทธ๋ฌ๋ ๋ด ์ถฉ๊ณ ๋ฅผ ํ ์์ ์๊ธ์ผ๋ก ๋ฐ์๋ค์ด์ญ์์ค.
@pixelrebel ๊ฐ์ฌํฉ๋๋ค. ๊ทธ ๋ถ๋ถ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.