“Verifikasi sertifikat server OK” tetapi “ALPN, server tidak menyetujui protokol”

10

Saya membuat panggilan ikal

curl -v ... https://... 

dan output verbose berisi

....
* ALPN, offering http/1.1
* SSL connection using TLS1.2 / ECDHE_RSA_AES_128_GCM_SHA256
*    server certificate verification OK
....
* ALPN, server did not agree to a protocol
* Server auth using Basic with user 'api'
> POST /v3/pindertek.com/messages HTTP/1.1
> Host: api.mailgun.net
> Authorization: Basic sdfsdfsdfsadfsdfsdfsadfsadfsadfsdfsdfasdfsdf=
....
< HTTP/1.1 100 Continue
< HTTP/1.1 200 OK
......

Pertanyaan saya adalah:

  • Apakah data otorisasi dikirim terenkripsi?
  • Apakah konten pasca-otorisasi dikirim terenkripsi?

Saya dapat melihat bahwa verifikasi sertifikat TLS berhasil. Tetapi kemudian pesan "ALPN, server tidak menyetujui protokol" dan "Server auth menggunakan Basic dengan pengguna 'api'" tidak menginspirasi kepercayaan penuh.

Saya berharap ini hanya merujuk pada protokol lapisan terpisah yang digunakan di bawah / di dalam / di atas protokol enkripsi TLS, tapi saya tidak tahu.


Output verbose lebih rinci:

* Connected to api.mailgun.net (34.215.83.50) port 443 (#0)
* found 148 certificates in /etc/ssl/certs/ca-certificates.crt
* found 1060 certificates in /etc/ssl/certs
* ALPN, offering http/1.1
* SSL connection using TLS1.2 / ECDHE_RSA_AES_128_GCM_SHA256
*    server certificate verification OK
*    server certificate status verification SKIPPED
*    common name: *.mailgun.net (matched)
*    server certificate expiration date OK
*    server certificate activation date OK
*    certificate public key: RSA
*    certificate version: #3
*    subject: C=US,ST=California,L=San Francisco,O=MAILGUN TECHNOLOGIES\, INC,OU=MAILGUN TECHNOLOGIES\, INC,CN=*.mailgun.net
*    start date: Thu, 18 Jan 2018 00:00:00 GMT
*    expire date: Wed, 18 Mar 2020 12:00:00 GMT
*    issuer: C=US,O=DigiCert Inc,OU=www.digicert.com,CN=Thawte TLS RSA CA G1
*    compression: NULL
* ALPN, server did not agree to a protocol
* Server auth using Basic with user 'api'
> POST /v3/pindertek.com/messages HTTP/1.1
> Host: api.mailgun.net
> Authorization: Basic sdfsdfsdfsadfsdfsdfsadfsadfsadfsdfsdfasdfsdf=
> User-Agent: curl/7.47.0
> Accept: */*
> Content-Length: 464
> Expect: 100-continue
> Content-Type: multipart/form-data; boundary=------------------------df265bf86c971664
> 
< HTTP/1.1 100 Continue
< HTTP/1.1 200 OK
......
Craig Hicks
sumber

Jawaban:

9

TLS adalah transport layer sucurity. Dalam kasus di atas yang telah berhasil, tidak ada masalah.

Dari Wikipedia :

Application-Layer Protocol Negotiation (ALPN) adalah ekstensi Transport Layer Security (TLS) untuk negosiasi protokol lapisan aplikasi. ALPN memungkinkan lapisan aplikasi untuk menegosiasikan protokol mana yang harus dilakukan melalui koneksi aman dengan cara yang menghindari perjalanan bolak-balik tambahan dan yang tidak tergantung pada protokol lapisan aplikasi. Ini diperlukan oleh koneksi HTTP / 2 yang aman, yang meningkatkan kompresi halaman web dan mengurangi latensi mereka dibandingkan dengan HTTP / 1.x.

Sejak APLN merupakan perpanjangan dari TLS , ini menunjukkan bahwa TLS yang sedang digunakan. Bahkan jika server tidak menggunakan ALPN, tetapi beberapa protokol sebelumnya lainnya, kedua protokol harus ekstensi TLS , atau mereka akan dapat berkomunikasi.

Dalam output verbose di atas, "ALPN," adalah awalan yang menunjukkan bahwa sisa baris adalah status negosiasi ALPN oleh sisi klien.

Auth dasar hanya merujuk kunci API dasar / protokol kata sandi . (Itu termasuk dalam baris perintah ikal, tetapi tidak ditampilkan). Berikut adalah perbandingan yang baik dari Auth Dasar vs OAuth :

Salah satu tren yang mengganggu yang saya perhatikan selama beberapa tahun terakhir adalah semakin banyak layanan API yang secara perlahan mengabaikan dukungan untuk HTTP Basic Authentication (alias: Basic Auth) yang mendukung OAuth. ... Basic Auth mendapatkan reputasi buruk sebagai “insecure”, tetapi ini tidak selalu benar. Ada beberapa hal yang dapat Anda lakukan untuk memastikan bahwa layanan API Anda (dijamin oleh Basic Auth) seaman mungkin: Selalu jalankan semua permintaan melalui HTTPs. Jika Anda tidak menggunakan SSL, daripada protokol otentikasi apa pun yang Anda gunakan, Anda tidak akan pernah merasa aman. Kecuali jika Anda menggunakan HTTP, semua kredensial Anda akan dikirim dalam bentuk teks biasa: ide yang mengerikan. ...

Jadi tidak ada bukti downgrade dari TLS - dan saya ragu itu mungkin. Menambahkan --tlsv1.2flag ke curl menghasilkan output yang sama.

Persis seperti apa baris ini

* ALPN, server did not agree to a protocol

berarti masih merupakan misteri, tapi saya kira itu berarti (1) tidak setuju dengan hhtp2, atau kurang mungkin (2) klien bertanya apakah itu berlanjut tanpa otorisasi dan ditolak, dan karenanya menggunakan otorisasi. Pilihan bahasa yang benar-benar buruk untuk hasil diagnostik. Google mengembalikan ribuan hasil untuk ekspresi literal itu.

Craig Hicks
sumber
4
Saya pikir hal ALPN berarti bahwa server tidak setuju untuk menggunakan protokol lain seperti h2. Setidaknya saya pernah melihatnya sebelumnya dalam konteks negosiasi HTTP / 2. Kata-kata buruk memang, tapi tidak ada yang perlu dikhawatirkan.
Tobias K.
@Tobias Itu akan lebih masuk akal.
Craig Hicks