OpenVPN: sertifikat yang ditandatangani sendiri di rantai

9

Saya berusaha sangat gagal menggunakan TunnelBlick(klien OS / X OpenVPN 2.2.1 yang dikenal baik) untuk terhubung menggunakan sertifikat. Berikut adalah pesan kesalahan (dibersihkan) yang saya terima:

2012-01-11 11:18:26 TLS: Paket awal dari **. **. **. **: 1194, sid = 17a4a801 5012e004
2012-01-11 11:18:26 KESALAHAN VERIFIKASI: kedalaman = 1, kesalahan = sertifikat yang ditandatangani sendiri dalam rantai sertifikat: / C = US / ST = ** / L = ** / O = ** / O = ** / CN = ** / emailAddress = **
2012-01-11 11:18:26 TLS_ERROR: BIO membaca kesalahan tls_read_plaintext: error: 14090086: rutinitas SSL: SSL3_GET_SERVER_CERTIFICATE: verifikasi sertifikat gagal
2012-01-11 11:18:26 Kesalahan TLS: objek TLS -> kesalahan baca plaintext yang masuk
2012-01-11 11:18:26 Kesalahan TLS: Jabat tangan TLS gagal
2012-01-11 11:18:26 TCP / UDP: Closing socket

Sekarang, ini intinya. Saya membuat CSR sendiri untuk meminta sertifikat ini, menggunakan file ca.crt yang diberikan kepada saya oleh pihak lain (sebenarnya, mereka melakukannya dua kali hanya untuk memastikan).

Entri yang relevan dalam konfigurasi klien adalah:

ca   ca.crt
cert my.crt
key  my.key

dan, selanjutnya ... Saya dapat memverifikasi kunci dengan cara ini:

openssl memverifikasi -CAfile ca.crt my.crt 
my.crt: OK

Oke, jadi sekarang saya benar-benar bingung dan bingung. Pada titik ini, saya tahu bahwa CSR dan kunci dihasilkan menggunakan CSR yang tepat. Sebenarnya, inilah perintah yang melakukannya:

openssl req -newkey rsa:2048 -new -out my.csr -keyout my.key

Saya juga tahu untuk melakukan ini:

openssl x509 -subject -issuer -noout -in ca.crt

...

(berkedip!)

Apakah saya baru saja menemukannya ?

Output dari perintah itu terlihat seperti ini: (agak diedit)

subject = / C = US / ST = VA / L = ** / O = ** / CN = ** CA / emailAddress = **
penerbit = (sama)

sedangkan dalam pesan kesalahan dari OpenVPN, ST = tidak persis sama:

KESALAHAN VERIFIKASI: kedalaman = 1, kesalahan = sertifikat yang ditandatangani sendiri dalam rantai sertifikat: / C = AS / ST = Virginia / L = ** / O = ** / CN = ** / emailAddress = **

"VA" tidak persis sama dengan "Virginia."

pengguna106701
sumber
2
Coba openssl s_client -connect host:port -showcerts, dan bandingkan cap jempol dari sertifikat yang diterima openssl x509 -noout -text -in ca.crt.
Shane Madden

Jawaban:

7

Hanya untuk memberikan penutupan penuh pada utas ini: bahwa memang itulah masalahnya. "Ca.crt" yang telah saya terima ("Virginia") BUKAN sebenarnya yang digunakan rekan saya ("VA"), dan tidak ada di antara kami yang memperhatikan saat itu.

Jadi ... pada dasarnya (dan murni dalam istilah awam) VPN mencoba berjalan-jalan menaiki rantai otoritas mencari ca.crt yang diharapkan ditemukan, tetapi tidak pernah berhasil (karena tidak ada di sana).

Dan, ini adalah salah satu pesan indah yang sistem crypto sangat terkenal: sepenuhnya akurat, namun, sepenuhnya misterius bagi yang belum tahu. (Dan, jujur ​​saja, sistem crypto tidak suka membocorkan informasi tentang apa pun, karena mereka menganggap orang yang mereka ajak bicara pasti jahat Hawa , bukan Alice atau Bob yang baik.)

Mike Robinson
sumber
Agar adil, saya tidak yakin ini ada hubungannya dengan rantai CA dan lebih berkaitan dengan fakta bahwa itu adalah CA yang berbeda di tempat pertama, dan dengan demikian secara otomatis tidak dapat dipercaya. OpenSSL tidak harus berjalan jauh. Mungkin itu yang Anda maksudkan.
gparent