Có phải cảnh báo là SSL SSL3_READ_BYTES: sslv3 cảnh báo chứng chỉ xấu không cho thấy SSL không thành công


17

Trong khi chạy lệnh bên dưới openssl s_client -host example.xyz -port 9093

Tôi nhận được lỗi sau đây:

139810559764296:error:14094412:SSL routines:SSL3_READ_BYTES:sslv3 alert bad certificate:s3_pkt.c:1259:SSL alert number 42
39810559764296:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:184:

Nhưng cuối cùng tôi nhận được "Verify return code: 0 (ok)"tin nhắn.

Câu hỏi của tôi là cảnh báo trên có ý nghĩa gì và nếu SSL thực sự thành công. Cảm ơn rất nhiều vì sự giúp đỡ trước.

SSL handshake has read 6648 bytes and written 354 bytes
New, TLSv1/SSLv3, Cipher is AES128-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol  : TLSv1.2
Cipher    : AES128-SHA
Session-ID: xx
Session-ID-ctx:
Master-Key: xx
Key-Arg   : None
Krb5 Principal: None
PSK identity: None
PSK identity hint: None
Start Time: 1475096098
Timeout   : 300 (sec)
**Verify return code: 0 (ok)**

Câu trả lời:


25

"Lỗi bắt tay" có nghĩa là bắt tay không thành công và không có kết nối SSL / TLS. Bạn sẽ thấy openssllối thoát đó vào shell (hoặc CMD, v.v.) và không chờ dữ liệu đầu vào được gửi đến máy chủ. "Xác minh mã trả về 0" có nghĩa là không có vấn đề nào được tìm thấy trong chứng chỉ của máy chủ, vì nó hoàn toàn không được kiểm tra hoặc vì nó đã được kiểm tra và tốt (theo như kiểm tra của OpenSSL, không bao gồm mọi thứ); trong trường hợp này bằng cách biết giao thức, chúng ta có thể suy ra trường hợp sau được áp dụng.

Nhận thông báobad certificate (mã 42) có nghĩa là máy chủ yêu cầu bạn xác thực bằng chứng chỉ và bạn đã không làm như vậy và điều đó gây ra lỗi bắt tay. Một vài dòng trước dòng SSL handshake has read ... and written ...bạn sẽ thấy một dòng Acceptable client certificate CA namesthường được theo sau bởi một vài dòng xác định CA, có thể theo sau là một dòng bắt đầu Client Certificate Typesvà có thể một số Requested Signature Algorithmstùy thuộc vào phiên bản OpenSSL của bạn và giao thức được đàm phán.

Tìm chứng chỉ do CA cấp trong danh sách 'chấp nhận được' hoặc nếu nó trống tìm tài liệu trên hoặc về máy chủ cho biết CA nào tin tưởng hoặc liên hệ với nhà điều hành máy chủ hoặc chủ sở hữu và hỏi họ, cộng với khóa riêng phù hợp , cả hai trong định dạng PEM và chỉ định chúng với -cert $file -key $file; nếu bạn có cả hai trong một tệp, như có thể với PEM, chỉ cần sử dụng-cert $file. Nếu bạn có chúng ở một định dạng khác, hãy chỉ định nó hoặc tìm kiếm ở đây và có lẽ là siêu người dùng và bảo mật.SX; đã có nhiều câu hỏi và trả lời về việc chuyển đổi các định dạng chứng chỉ và privatekey khác nhau. Nếu chứng chỉ của bạn cần một chứng chỉ "chuỗi" hoặc "trung gian" (hoặc thậm chí nhiều hơn một) để được xác minh, như trường hợp chứng chỉ từ một CA công cộng (so với một kênh) tùy thuộc vào cách máy chủ được cấu hình, s_clientyêu cầu một mẹo: thêm chứng chỉ chuỗi vào kho ủy thác hệ thống của bạn hoặc tạo kho ủy thác cục bộ / tạm thời có chứa chứng chỉ CA mà bạn cần để xác minh máy chủ PLUS (các) chứng chỉ chuỗi bạn cần gửi.

Nếu bạn không có chứng chỉ như vậy, bạn cần phải có một chứng chỉ, đó là một câu hỏi khác đòi hỏi nhiều chi tiết hơn để trả lời hoặc bạn cần tìm cách kết nối với máy chủ mà không cần sử dụng xác thực chứng chỉ; kiểm tra lại tài liệu và / hoặc hỏi người vận hành / chủ sở hữu.

EDIT: Nó xuất hiện từ bình luận, bạn có thể có khóa máy khách và chuỗi chứng chỉ cũng như (các?) Máy chủ neo trong Java. Khi kiểm tra tôi không thấy một câu trả lời tốt hiện có bao gồm đầy đủ trường hợp đó, vì vậy mặc dù điều này có lẽ sẽ không tìm kiếm tốt:

# Assume Java keystore is type JKS (the default but not only possibility)
# named key.jks and the privatekey entry is named mykey (ditto)
# and the verify certs are in trust.jks in entries named trust1 trust2 etc.

# convert Java key entry to PKCS12 then PKCS12 to PEM files
keytool -importkeystore -srckeystore key.jks -destkeystore key.p12 -deststoretype pkcs12 -srcalias mykey 
openssl pkcs12 -in key.p12 -nocerts -out key.pem
openssl pkcs12 -in key.p12 -nokeys -clcerts -out cert.pem
openssl pkcs12 -in key.p12 -nokeys -cacerts -out chain.pem
# extract verify certs to individual PEM files
# (or if you 'uploaded' PEM files and still have them just use those)
keytool -keystore trust.jks -export -alias trust1 -rfc -file trust1.pem
keytool -keystore trust.jks -export -alias trust2 -rfc -file trust2.pem
... more if needed ...
# combine for s_client 
cat chain.pem trust*.pem >combined.pem
openssl s_client -connect host:port -key key.pem -cert cert.pem -CAfile combined.pem

chào Dave; Dưới đây là thủ tục chúng tôi làm theo. 1: Tải lên CA gốc và các chứng chỉ trung gian vào kho khóa. 2: Tải lên chứng chỉ Comodo đã ký vào kho khóa. 3: Tải lên CA gốc và chứng chỉ trung gian vào cửa hàng tin cậy. 4: Sao chép kho khóa và các tệp tin cậy vào mọi nút trong cụm (cassandra). Các nút sử dụng SSL để liên lạc và chúng dường như loại bỏ dữ liệu mà không gặp vấn đề gì. Tuy nhiên khi tôi chạy lệnh SSL đã đề cập ở trên, vấn đề sẽ tăng lên.
kris433

@ kris433: kho khóa nào vậy? Quy trình bạn mô tả âm thanh giống như quy trình cho Java nếu (và chỉ khi) nó đã tạo một khóa riêng mà bạn có được (ed) cert chứng nhận Comodo đã ký ', mặc dù nếu bạn đang sử dụng cài đặt Java tiêu chuẩn thì nó có mặc định cửa hàng tin cậy bao gồm Comodo, vì vậy bạn không cần phải thay đổi điều đó. OpenSSL không sử dụng bất kỳ kho khóa hoặc kho tin Java nào và theo mặc định, nó hoàn toàn không sử dụng bất kỳ kho khóa nào, đó là lý do tại sao bạn cần chỉ định các tệp có -cert [-key]. Nếu tôi đã giải thích chính xác bình luận của bạn, xem chỉnh sửa.
dave_thndry_085

Cảm ơn rất nhiều Dave. Điều này làm việc hoàn hảo. Bạn đã lưu tuần của tôi. Nếu bạn từng đến Philadelphia, bít tết phô mai và Gelato sẽ ở trên tôi;). Cám ơn bạn một lần nữa.
kris433

@ kris433: bạn được chào đón, nhưng Cách chính thức của StackExchange là chấp nhận câu trả lời hữu ích bằng cách sử dụng dấu kiểm, vì vậy hệ thống có thể tự động sử dụng thông tin này để hiển thị kết quả cho các yêu cầu khác ; xem 'chuyến tham quan' mà bạn cần phải xem khi bạn đến trang web này, hoặc cụ thể hơn là serverfault.com/help/someone-answers .
dave_thndry_085

0

Trong trường hợp của tôi, tôi đã gặp lỗi này khi khóa riêng không khớp với chứng chỉ. Tôi đã cập nhật chứng chỉ khi hết hạn và cần thiết để tạo khóa riêng mới. Tuy nhiên, tôi quên tham chiếu rằng trong ứng dụng của tôi. Khi tôi chỉ vào khóa riêng mới - lỗi này đã biến mất.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.