Httpie: HTTPie๋Š” ์‹œ์Šคํ…œ ์ธ์ฆ์„œ๋ฅผ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2016๋…„ 06์›” 09์ผ  ยท  20์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: httpie/httpie

HTTPie๋Š” ์‹œ์Šคํ…œ ์ธ์ฆ์„œ๋ฅผ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.

http --debug -j https://example_using_my_ca.com

HTTPie 0.9.3
HTTPie data: /home/lukas/.httpie
Requests 2.10.0
Pygments 1.6
Python 3.4.3 (default, Oct 14 2015, 20:28:29) 
[GCC 4.8.4] linux

>>> requests.request(**{'allow_redirects': False,
 'auth': None,
 'cert': None,
 'data': '',
 'files': DataDict(),
 'headers': {'Accept': b'application/json',
             'Content-Type': b'application/json',
             'User-Agent': b'HTTPie/0.9.3'},
 'method': 'get',
 'params': ParamsDict(),
 'proxies': {},
 'stream': True,
 'timeout': 30,
 'url': 'https://example_using_my_ca.com',
 'verify': True})

Traceback (most recent call last):
  File "/usr/local/lib/python3.4/dist-packages/requests/packages/urllib3/connectionpool.py", line 578, in urlopen
    chunked=chunked)
  File "/usr/local/lib/python3.4/dist-packages/requests/packages/urllib3/connectionpool.py", line 351, in _make_request
    self._validate_conn(conn)
  File "/usr/local/lib/python3.4/dist-packages/requests/packages/urllib3/connectionpool.py", line 814, in _validate_conn
    conn.connect()
  File "/usr/local/lib/python3.4/dist-packages/requests/packages/urllib3/connection.py", line 289, in connect
    ssl_version=resolved_ssl_version)
  File "/usr/local/lib/python3.4/dist-packages/requests/packages/urllib3/util/ssl_.py", line 308, in ssl_wrap_socket
    return context.wrap_socket(sock, server_hostname=server_hostname)
  File "/usr/lib/python3.4/ssl.py", line 365, in wrap_socket
    _context=self)
  File "/usr/lib/python3.4/ssl.py", line 601, in __init__
    self.do_handshake()
  File "/usr/lib/python3.4/ssl.py", line 828, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.4/dist-packages/requests/adapters.py", line 403, in send
    timeout=timeout
  File "/usr/local/lib/python3.4/dist-packages/requests/packages/urllib3/connectionpool.py", line 604, in urlopen
    raise SSLError(e)
requests.packages.urllib3.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/bin/http", line 11, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.4/dist-packages/httpie/core.py", line 115, in main
    response = get_response(args, config_dir=env.config.directory)
  File "/usr/local/lib/python3.4/dist-packages/httpie/client.py", line 48, in get_response
    response = requests_session.request(**kwargs)
  File "/usr/local/lib/python3.4/dist-packages/requests/sessions.py", line 475, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python3.4/dist-packages/requests/sessions.py", line 585, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python3.4/dist-packages/requests/adapters.py", line 477, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)

์ฐธ๊ณ ๋กœ curl์€ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค : curl https://example_using_my_ca.com

๋ชจ๋“  20 ๋Œ“๊ธ€

ssl.get_default_verify_paths ()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ ๊ฒฝ๋กœ๋ฅผ ์–ป๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๊นŒ?

๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ–‰๋™์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

--verify์— no ๋˜๋Š” yes ์ด์™ธ์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์ „๋‹ฌ๋˜๋ฉด ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์š”์ฒญ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

--verify๊ฐ€ yes๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ :
1) REQUESTS_CA_BUNDLE์ด ์„ค์ •๋œ ๊ฒฝ์šฐ True๋ฅผ ์š”์ฒญ ํ™•์ธ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
2) elif ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ssl.get_default_verify_paths (). openssl_cafile_env๊ฐ€ ์„ค์ •๋˜์–ด ํ™•์ธ ์š”์ฒญ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
4) elif ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ssl.get_default_verify_paths (). openssl_capath_env๋Š” ํ™•์ธ ์š”์ฒญ์„ ํ†ต๊ณผํ•˜๋„๋ก ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
5) elif ssl.get_default_verify_paths (). capath๊ฐ€ None์ด ์•„๋‹™๋‹ˆ๋‹ค. ํ™•์ธ ์š”์ฒญ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
6) ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด True๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์š”์ฒญ ํ™•์ธ

๊ทธ๋Ÿฌ๋‚˜ ssl.get_default_verify_paths๋Š” python3.4 ์ดํ›„์—๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@luv ๋Š” 3.4+ ๋ฐ 2.7.10+์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ์„๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ์ด๊ฒƒ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์š”์ฒญ์ด ์ž์ฒด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. httpie์— ์ง€์†์ ์œผ๋กœ ๋Œ“๊ธ€์„ ๋‹ฌ์ง€ ๋งˆ์„ธ์š”. ์ด๊ฒƒ์€ httpie IMO๊ฐ€ ์•„๋‹Œ ์š”์ฒญ์— ์กด์žฌํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

@ sigmavirus24 ๋ญ์•ผ ? ๋Š์ž„์—†์ด ๋Œ“๊ธ€์„๋‹ค๋Š” ๊ฒƒ์ด ๋ฌด์Šจ ๋œป์ธ์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ์–ด์จŒ๋“  httpie ๊ธฐ๊ณ ์ž๋„ ์•„๋‹™๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹จ์ง€ ์–ด๋ฆฌ์„์€ ํŠธ๋กค์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค : /

์ž‘๋™ํ•˜๋Š” ๊ตฌํ˜„์ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด curl ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ•œ ๋ˆˆ์—๋ณด๊ธฐ ....

๋ชจ๋“  amiga ๋ฐ VMS ifdef์™€ ๋‹ค์–‘ํ•œ ssl ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ์ง€์›์„ ๋ฌด์‹œํ•˜๊ณ  ์‹ค์ œ๋กœ๋Š” ์–ด๋ฆฌ ์„๊ณ  openssl X509_ * ์กฐํšŒ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (์˜ˆ : Python SSL ๋ชจ๋“ˆ์˜ get_default_verify_paths ()์—์„œ ์‚ฌ์šฉ๋จ).

๋Œ€์‹  curl์€ ์ปดํŒŒ์ผ ํƒ€์ž„์— ์•Œ๋ ค์ง„ ์—ฌ๋Ÿฌ ์œ„์น˜๋ฅผ ๋ฐ˜๋ณต ํ•œ ๋‹ค์Œ (์ด m4dness https://github.com/curl/curl/blob/master/acinclude.m4#L2560 ์ฐธ์กฐ) ๋ช…์‹œ ์ ์œผ๋กœ (CURL_CA_BUNDLE ๋ฐ ) ๋Ÿฐํƒ€์ž„์‹œ SSL_CERT_DIR ๋ฐ SSL_CERT_FILE ํ™˜๊ฒฝ ๋ณ€์ˆ˜ (๋‹ค์‹œ X509_get_default_cert_file_env ()์™€ ๊ฐ™์€ ํ•ญ๋ชฉ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ). ๊ทธ๊ฒŒ ๋‹ค์•ผ.

๊ทธ๋ ‡๋‹ค๋ฉด ์ˆœ์ˆ˜ํ•œ ํŒŒ์ด์ฌ์—์„œ ๋™์ผํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? (์˜ˆ, ์ง€์˜ฅ์ฒ˜๋Ÿผ ๋น ๋ฅด๊ณ  ๋”๋Ÿฌ์›Œ ๋ณด์ด์ง€๋งŒ curl์—์„œ๋Š” ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค!) ๊ทธ๋Ÿฌ๋‚˜ Windows (ssl.enum_certificates?) ๋ฐ OS X ์ง€์› ์ถ”๊ฐ€ (์—ฌ๊ธฐ์—์„œ ํ™•์‹คํ•˜์ง€๋Š” ์•Š์ง€๋งŒ Python์€ OS X 10.6 ์ด์ƒ์—์„œ ์‚ฌ๊ณผ ์ œ๊ณต openssl ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.) ์ด๋ฏธ ๊ดœ์ฐฎ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค!).

@luv ์‹ ๊ณ  @ sigmavirus24 ๋Š”

์ด ๋ฌธ์ œ๋Š” 3.0.0 ๋ฆด๋ฆฌ์Šค๊นŒ์ง€ ์š”์ฒญ์—์„œ ์ˆ˜์ •๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค ... ๊ฐ€๋Šฅํ•œ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋กœ ์ธํ•ด SSL_CERT_FILE๋„ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค https://github.com/kennethreitz/requests/pull/2903

btw. ๋‚˜๋Š” ๋ฌด๋ก€ํ•˜๋‹ค๋Š” ๋œป์ด ์•„๋‹ˆ์—ˆ๋‹ค. ๋‚˜๋Š” ์ •๋ง๋กœ s / ๊ทธ๊ฐ€ ํŠธ๋กค๋งํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. :) ๋‚˜๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ๊ธฐ ์œ„ํ•ด ๋‚˜์„ฐ๊ณ  ํ•œ ๋ฒˆ๋„ ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•˜์ง€ ์•Š์€ ์‚ฌ๋žŒ์„ ์ฐพ์•˜๋‹ค. ๊ทธ๋Ÿฐ ์ ๋Œ€์ ์ธ ๋ฐ˜์‘์— ์ •๋ง ๋†€๋ž์Šต๋‹ˆ๋‹ค) ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚˜์—๊ฒŒ ๋‹ฅ์น˜๋ผ๊ณ  ๋งํ•˜๊ณ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค : /

@luv ๋‹ฅ์น˜ ๋ผ๊ณ  ๋งํ•˜์ง€

๋งˆ์ง€๋ง‰์œผ๋กœ ์ฝ”๋“œ ๊ธฐ์—ฌ ๋งŒ์ด ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๋ชจ๋“  ๊ธฐ์—ฌ๋ฅผ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด octohatrack ๊ณผ ๊ฐ™์€ ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๋“ค์ด ๋งค์šฐ ์š”์ฒญ '๊ฐœ๋ฐœ์„ ์ˆ˜ํ–‰ ํ•  ์‹œ๊ฐ„์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— @jkbrzt์— ๋Œ€ํ•œ httpie์— ๋ฒ„๊ทธ ๊ด€๋ จ ์—ฌ๋Ÿฌ ์š”์ฒญ์— ์‘๋‹ตํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์š”์ฒญ ๊ด€๋ จ ๋ฒ„๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด 99 %์˜ ์‹œ๊ฐ„์ด ์ด๋ฏธ ์ฒ˜๋ฆฌ ์ค‘์ด๊ธฐ ๋•Œ๋ฌธ์— ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค. ์šด ์ข‹๊ฒŒ๋„ @jkbrzt๋ฅผ ์œ„ํ•ด ๋‚˜๋Š” ์ด์ „์— ์ข‹์ง€ ์•Š์€ (๊ทธ๋ฆฌ๊ณ  ๋ช‡ ๋ฐฐ ๋” ๋‚˜์œ) ์ทจ๊ธ‰์„

์ฐธ๊ณ ๋กœ "they"๋Š” "s / he"๋งŒํผ ๋งŽ์€ ๋ฌธ์ž์ด๋ฉฐ ํ•œ ์‚ฌ๋žŒ์„ ์ง€์นญํ•˜๋Š” ๋ฐ์—๋„ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ›จ์”ฌ ๋” ์ผ๋ฐ˜์ ์œผ๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š”์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

@jkbrzt ๋‚˜๋Š” ์ด๊ฒƒ์„ ๋ฒ„๊ทธ๊ฐ€ ์•„๋‹Œ ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ๋ถ€๋ฅผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. Requests๋Š” Windows, * nixes ๋ฐ BSD์—์„œ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋ฉฐ ์‹ค์ œ๋กœ Requests์˜ ๋งŽ์€ ์‹œ์Šคํ…œ ๋ฐฐํฌ๋Š” ์ด๋Ÿฌํ•œ ๋™์ž‘์„ ์ ๊ทน์ ์œผ๋กœ ์ œ๊ฑฐํ•˜๊ณ  ์‹œ์Šคํ…œ ์ธ์ฆ์„œ ์ €์žฅ์†Œ / ๋ฒˆ๋“ค์„ ๊ฐ€๋ฆฌ ํ‚ต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž๊ฐ€์ด ๋™์ž‘์„ ํ•„์š”๋กœํ•˜๋Š” ๊ฒฝ์šฐ ์‹œ์Šคํ…œ ๋ฐฐํฌ์ž๊ฐ€ HTTPie (๋ฐ ๊ฐ€๋Šฅํ•˜๋ฉด ์‹œ์Šคํ…œ ํŒจํ‚ค์ง€ HTTPie)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒจํ‚ค์ง• ํ•œ Request ๋ฒ„์ „์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

"์ด ๋ฌธ์ œ ํ•ด๊ฒฐ"์— ๊ด€ํ•ด์„œ๋Š” ๊ณ ์ • ์ •์˜์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์š”์ฒญ์— ์ถ”๊ฐ€ ๋  ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์–ด๋Š ์‹œ์ ์—์„œ HTTPie๋Š” ๋ฌด๋ฃŒ๋กœ ๋™์ž‘์„ ์–ป์Šต๋‹ˆ๋‹ค. HTTPie๊ฐ€ ๋Œ€์‹  ์ด๊ฒƒ์„ ๋” ๋†’์€ ์šฐ์„  ์ˆœ์œ„๋กœ ๊ฐ„์ฃผํ•˜๋ฉด (@jkbrzt๊ฐ€ ์ ํ•ฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๋Œ€๋กœ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์Œ) ๊ฐœ๋ฐœ ๋…ธ๋ ฅ์„ ๋ณต์ œํ•˜์—ฌ์ด ์ž‘์—…์„ ๋” ๋นจ๋ฆฌ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Linux, @luv๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ

apt๋ฅผ ํ†ตํ•ด ์„ค์น˜๋œ HTTPie์™€ ๋™์ผํ•œ ๋ฌธ์ œ (ubuntu 14.04lts)

@luv 14.04 ๋ฐ 16.04์— ๋Œ€ํ•œ ์š”์ฒญ์ด ์‹œ์Šคํ…œ ์ธ์ฆ์„œ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋†€๋ž์Šต๋‹ˆ๋‹ค. Requests๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค์น˜ ํ–ˆ์Šต๋‹ˆ๊นŒ?

httpie์˜ ์šฐ๋ถ„ํˆฌ ๋ฐฐํฌํŒ์ด ์‚ฌ์šฉ๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  "์š”์ฒญ"๋ฐ "httpie"๋ฒ„์ „์„ ์ œ๊ฑฐํ–ˆ์œผ๋ฉฐ PyPI์˜ httpie๋ฅผ ์—ฌ์ „ํžˆ ์‚ฌ์šฉํ•˜๊ณ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. Ubuntu httpie๊ฐ€ "ImportError : cannot import name is_windows"์™€ ํ•จ๊ป˜ ์‹คํŒจํ•˜๋ฉฐ ์ด๋Š” ์•Œ๋ ค์ง„ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์ฒ˜์Œ์— python3์„ ์‚ฌ์šฉํ•ด์•ผํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— "pip3 uninstall"์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์žŠ๊ณ  "pip uninstall"๋งŒ ์‹คํ–‰ ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

761 ๋ช…์—๊ฒŒ ๋‚ด httpie ์„ค์ •์— ๋Œ€ํ•œ ์„ค๋ช…๊ณผ ํ•จ๊ป˜ "์ŠคํŒธ"์„ ๋ณด๋‚ธ ๊ฒƒ์— ์‚ฌ๊ณผ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์ €๋Š” Gentoo Linux, httpie-0.9.9 ๋ฐ requests-2.18.4 (์ตœ์‹  Gentoo์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋„๊ตฌ (openssl s_client, sslclient, curl)๋Š” ์„ค์น˜๋œ ๋กœ์ปฌ CA ์ธ์ฆ์„œ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€๋งŒ httpie๋Š” ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

$ openssl s_client -quiet -connect localhost:8082                                              
depth=1 CN = Local CA home.lan
verify return:1
depth=0 CN = localhost
verify return:1
^C
$ http -v https://localhost:8082/                                                              

http: error: SSLError: HTTPSConnectionPool(host='localhost', port=8082): Max retries exceeded with url: / (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",),)) while doing GET request to URL: https://localhost:8082/

์ž‘๋™ํ•˜๋„๋ก ์—…๋ฐ์ดํŠธํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ?

@powerman ๊ทธ ํŒจํ‚ค์ง€์˜ ์  ํˆฌ ์žฌ๋ฐฐํฌ ์ž์—๊ฒŒ ๋” ์ ์ ˆํ•œ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค.

@ sigmavirus24 ์™œ ๊ทธ๋ ‡์Šต๋‹ˆ๊นŒ? ๋‚ด ์งˆ๋ฌธ์€ ์ด๋Ÿฌํ•œ ์š”์ฒญ / httpie ๋ฒ„์ „์ด ์‹œ์Šคํ…œ CA ๋ชฉ๋ก์„ ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋‚ด ์‹œ์Šคํ…œ์— ๋ฌด์–ธ๊ฐ€ ์ž˜๋ชป ๊ตฌ์„ฑ๋˜์—ˆ๊ฑฐ๋‚˜ ๋ฒ„๊ทธ๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ์–ด๋–ค ๋ฒ„์ „์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

@powerman ์•„๋ฌด๊ฒƒ๋„ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ์‹œ์Šคํ…œ ์ธ์ฆ์„œ ๋ฒˆ๋“ค์„ ์ง€์›ํ•˜์ง€ ์•Š์ง€๋งŒ ๋ฐฐํฌ์˜ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์—์„œ ๋‘˜ ๋‹ค ์„ค์น˜ ํ•œ ๊ฒฝ์šฐ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ํŒจ์น˜ํ•˜์—ฌ ์‚ฌ์šฉํ–ˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์  ํˆฌ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹œ์Šคํ…œ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์  ํˆฌ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ๋Œ€ํ•ด ํ•œ ๊ฐ€์ง€ ์ถ”๊ฐ€ ์„ค๋ช…์„ ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. SSL ์š”์ฒญ์„ ํ•  ๋•Œ ์‚ฌ์šฉ์ž์™€ ํ”„๋ก์‹œ ์‚ฌ์ด์— ๋ณด์•ˆ ํ„ฐ๋„์„ ์„ค์ • ํ•œ ๋‹ค์Œ ํ”„๋ก์‹œ์™€ ๋Œ€์ƒ ์‚ฌ์ด์— ๋˜ โ€‹โ€‹๋‹ค๋ฅธ ํ„ฐ๋„์„ ์„ค์ •ํ•˜๋„๋ก ํŠน๋ณ„ํžˆ ์„ค๊ณ„๋œ ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒํ•˜๋ฉด ํ”„๋ก์‹œ๋ฅผ ํ†ต๊ณผํ•˜๋Š” ํŠธ๋ž˜ํ”ฝ์„ ์•ˆ์ „ํ•˜๊ฒŒ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜์—ฌ ์•„๋ฌด๋„ ๋ถˆ์พŒํ•œ ์ผ์„ํ•˜์—ฌ ์ˆจ๊ธฐ๋ ค๊ณ ํ•˜์ง€ ์•Š๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ถˆํ–‰ํžˆ๋„ httpie๊ฐ€ ๋‹ค์‹œ ๊ฐ€์ ธ ์˜ค๋Š” ์ธ์ฆ์„œ๊ฐ€ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค (์‹œ์Šคํ…œ ๋ฃจํŠธ์— ์žˆ์ง€๋งŒ httpie๊ฐ€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—).

์‹ค์ œ๋กœ NixOS์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4 ๋…„ ์ด์ƒ ํ›„ ...

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰