Versi 2.7
library SSL Python tidak
digunakan lagi.
Sebagai gantinya, gunakan versi terbaru, yang saat ini 2.7.11
.
App Engine mendukung library SSL Python native untuk runtime Python 2.7 melalui library SSL yang harus Anda tambahkan ke aplikasi.
Menentukan library SSL
Jika ingin menggunakan SSL Python native, Anda harus mengaktifkannya dengan menentukan ssl
untuk konfigurasi libraries
di app.yaml
aplikasi Anda. Anda harus menggunakan
versi library terbaru, yang saat ini
adalah versi 2.7.11. Versi ini mendukung TLS versi 1.0, 1.1, dan 1.2 serta sesuai dengan versi SSL dari Python 2.7.11 dan seterusnya:
libraries:
- name: ssl
version: latest
Menyediakan sertifikat otoritas
Untuk melakukan handshake SSL, Anda harus memiliki file yang berisi sertifikat certificate authority gabungan. Anda dapat mengupload file sendiri dengan aplikasi Anda, atau menggunakan file yang disediakan oleh App Engine: /etc/ca-certificates.crt
.
Melakukan handshake SSL
Metode wrap_socket
Python 2.7 menggunakan dua parameter nama
file yang berisi kunci dan sertifikat klien. Di lingkungan App Engine, ini merupakan batasan karena aplikasi tidak dapat menulis file
untuk menyediakan kunci dan sertifikat yang berbeda secara dinamis. Untuk mengatasi pembatasan
ini, parameter certfile
dan keyfile
untuk
metode ssl.wrap_socket
dapat berupa objek "seperti file" yang memungkinkan
aplikasi menyimpan sertifikat dan kunci dengan cara lain selain
hanya dalam file aplikasi yang diupload. (Objek "seperti file" adalah objek yang memiliki metode "baca" yang menampilkan seluruh sertifikat sebagai string.)
# Example of a dynamic key and cert.
datastore_record_k = ndb.Key('Employee', 'asalieri', 'Address', 1)
datastore_record = datastore_record_k.get()
key_str = datastore_record.key_str
cert_str = datastore_record.cert
ssl_server = ssl.wrap_socket(server_sock,
server_side=False,
keyfile=StringIO.StringIO(key_str),
certfile=StringIO.StringIO(cert_str),
cert_reqs=ssl.CERT_REQUIRED,
ssl_version=ssl.PROTOCOL_SSLv23,
ca_certs=CERTIFICATE_FILE)
Anda tidak perlu menentukan parameter ssl_version
. Jika Anda menghilangkannya, library 2.7.11 akan ditetapkan secara default ke PROTOCOL_SSLv23
. Anda juga dapat menentukan
PROTOCOL_TLSv1
, PROTOCOL_TLSv1_1
, atau PROTOCOL_TLSv1_2
.
Implementasi App Engine metode wrap_socket
menyertakan parameter ca_certs
yang diperlukan, yang digunakan untuk menentukan file khusus yang berisi sertifikat certificate authority gabungan.
Memvalidasi sertifikat
Aplikasi Anda harus memvalidasi sertifikat untuk mencegah kerentanan keamanan tertentu, seperti serangan "man in the middle".
Untuk melakukan ini:
Edit file
app.yaml
Anda, dengan menambahkan variabel lingkunganPYTHONHTTPSVERIFY
yang ditetapkan ke1
:env_variables: PYTHONHTTPSVERIFY: 1
Deploy ulang aplikasi Anda.
Selain menentukan validasi sertifikat di app.yaml
, Anda dapat secara eksplisit memanggil library SSL untuk melakukan validasi, setelah melakukan handshake SSL yang berhasil, seperti berikut:
ssl.match_hostname(ssl_server.getpeercert(), 'a.hostname.com')
Kode di atas menggunakan fitur match_hostname
, yang di-backport dari Python 3.2 untuk
menjadi bagian dari modul SSL App Engine Python 2.7.11. Panggilan ini memastikan sertifikat yang diberikan oleh peer cocok dengan salah satu host yang ditetapkan dalam sertifikat peer.
Mengerjakan dev_appserver
Anda dapat menerbitkan permintaan HTTPS menggunakan urlfetch API, perilaku validasi sertifikat Dev_server menggunakan httplib
menggunakan urlfetch identik dengan lingkungan App Engine produksi. Dev_appserver
tidak mendukung permintaan yang menggunakan soket.