Pyca/cryptography
(수학적 방법론을 다루는 학문은 Cryptography 항목 참조)
cryptography is a package designed to expose cryptographic primitives and recipes to Python developers.
Installation
Fernet
Fernet guarantees that a message encrypted using it cannot be manipulated or read without the key. Fernet is an implementation of symmetric (also known as “secret key”) authenticated cryptography. Fernet also has support for implementing key rotation via MultiFernet.
>>> from cryptography.fernet import Fernet
>>> # Put this somewhere safe!
>>> key = Fernet.generate_key()
>>> f = Fernet(key)
>>> token = f.encrypt(b"A really secret message. Not for prying eyes.")
>>> token
b'...'
>>> f.decrypt(token)
b'A really secret message. Not for prying eyes.'
Troubleshooting
AttributeError: 'builtins.Certificate' object has no attribute '_x509'
-
AttributeError: 'X509' object has no attribute '_x509' · Issue #3701 · psf/requests - AttributeError: 'X509' object has no attribute '_x509' — The Geek Blog
- Python requests and streaming - AttributeError: 'X509' object has no attribute '_x509' - Stack Overflow
다음과 같은 에러가 발생할 수 있다.
Traceback (most recent call last):
File "/home/aaeon/Documents/vms/.venv/lib/python3.9/site-packages/aiohttp/web_protocol.py", line 433, in _handle_request
resp = await request_handler(request)
File "/home/aaeon/Documents/vms/.venv/lib/python3.9/site-packages/aiohttp/web_app.py", line 504, in _handle
resp = await handler(request)
File "/home/aaeon/Documents/vms/.venv/lib/python3.9/site-packages/aiohttp/web_middlewares.py", line 117, in impl
return await handler(request)
File "/home/aaeon/Documents/vms/.venv/lib/python3.9/site-packages/answer_plugin_vms/server/stream_server.py", line 93, in middleware
return await handler(request)
File "/home/aaeon/Documents/vms/.venv/lib/python3.9/site-packages/answer_plugin_vms/server/stream_server.py", line 193, in post_jsep
answer = await self.do_jsep(offer.type, offer.sdp)
File "/home/aaeon/Documents/vms/.venv/lib/python3.9/site-packages/answer_plugin_vms/server/mixin/ss_rtc.py", line 137, in do_jsep
await pc.setRemoteDescription(offer)
File "/home/aaeon/Documents/vms/.venv/lib/python3.9/site-packages/aiortc/rtcpeerconnection.py", line 828, in setRemoteDescription
transceiver = self.__createTransceiver(
File "/home/aaeon/Documents/vms/.venv/lib/python3.9/site-packages/aiortc/rtcpeerconnection.py", line 1067, in __createTransceiver
dtlsTransport = self.__createDtlsTransport()
File "/home/aaeon/Documents/vms/.venv/lib/python3.9/site-packages/aiortc/rtcpeerconnection.py", line 1044, in __createDtlsTransport
dtlsTransport = RTCDtlsTransport(iceTransport, self.__certificates)
File "/home/aaeon/Documents/vms/.venv/lib/python3.9/site-packages/aiortc/rtcdtlstransport.py", line 375, in __init__
self.__ctx = certificate._create_ssl_context()
File "/home/aaeon/Documents/vms/.venv/lib/python3.9/site-packages/aiortc/rtcdtlstransport.py", line 211, in _create_ssl_context
_openssl_assert(lib.SSL_CTX_use_certificate(ctx, self._cert._x509) == 1) # type: ignore
AttributeError: 'builtins.Certificate' object has no attribute '_x509'
참고로 테스트 환경은 Ubuntu 18.04 였다.
첫 번째로 테스트 해본 것은 requests 버전 다운그레이드:
아돼더라. 그래서 Pyca/cryptography 버전을 다운그레이드:
성공했다!!
다만 몇 가지 경고가 출력되더라...
/home/aaeon/Documents/vms/.venv/lib/python3.9/site-packages/aiortc/rtcdtlstransport.py:211: CryptographyDeprecationWarning: This version of cryptography contains a temporary pyOpenSSL fallback path. Upgrade pyOpenSSL now.
_openssl_assert(lib.SSL_CTX_use_certificate(ctx, self._cert._x509) == 1) # type: ignore
/home/aaeon/Documents/vms/.venv/lib/python3.9/site-packages/aiortc/rtcdtlstransport.py:186: CryptographyDeprecationWarning: This version of cryptography contains a temporary pyOpenSSL fallback path. Upgrade pyOpenSSL now.
value=certificate_digest(self._cert._x509), # type: ignore
참고로 pyOpenSSL 버전을 그레이드 하라는군... (아직 안해봄)