Saya mencoba mengimplementasikan server HTTPS menggunakan Rustls dengan Hyper, tetapi saya tidak bisa mendapatkan contoh yang tepat tentang cara mengimplementasikan hal yang sama. Dan untuk itu saya telah mengikuti dan mencoba contoh yang diberikan pada repositori hyper-rustls di sini (contoh server Hyper Rustls)

Itu selalu memberikan kesalahan ini

FAILED: error accepting connection: TLS Error: Custom { kind: InvalidData, error: AlertReceived(CertificateUnknown) }

Saya benar-benar baru mengenal Rust dan karenanya tidak tahu cara mengimplementasikan HTTPS dengan benar melalui Hyper. Saya juga menjawab pertanyaan terkait di sini

Tapi masih belum bisa menemukan solusinya. Jika informasi lebih lanjut diperlukan, beri tahu saya untuk hal yang sama.

4
kanudo 12 April 2020, 12:37

1 menjawab

Jawaban Terbaik

Sepertinya masalah Anda bukan dengan Hyper atau Rust, tetapi dengan TLS. Secara default, saat Anda membuat koneksi melalui HTTPS, klien memverifikasi keaslian sertifikat server. Sertifikat harus ditandatangani oleh otoritas tepercaya: untuk detailnya, lihat, misalnya, halaman ini.

Untuk memverifikasi, gunakan curl:

$ curl https://localhost:1337/echo -X POST -v --insecure
...
*  SSL certificate verify result: self signed certificate in certificate chain (19), continuing anyway.
...
< HTTP/2 200 
< date: Sun, 12 Apr 2020 12:45:03 GMT
< 

Jadi ini bekerja dengan baik. Jika Anda menghapus tanda --insecure, curl akan menolak untuk membuat koneksi:

$ curl https://localhost:1337/echo -X POST -v
...
curl: (60) SSL certificate problem: self signed certificate in certificate chain
More details here: https://curl.haxx.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.

Untuk memperbaikinya, Anda perlu:

  1. Gunakan sertifikat yang ditandatangani dengan benar alih-alih yang ditandatangani sendiri, atau
  2. Konfigurasikan klien Anda untuk tidak memverifikasi sertifikat, atau
  3. Konfigurasikan klien Anda untuk memercayai sertifikat yang ditandatangani sendiri.

Dalam produksi, satu-satunya pilihan Anda adalah (1). Saat Anda berkembang, Anda bisa lolos dengan (2) atau (3).

2
kreo 12 April 2020, 12:50