2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Αυτή η ανάρτηση ιστολογίου αναλύεται χρησιμοποιώντας το Okhttp 4.6.0hostnameVerfier
Όπως υποδηλώνει το όνομα, η κύρια λειτουργία αυτής της μεθόδου είναι η αναγνώρισηhostnname
της νομιμότητας. Μπορούμε να διαμορφώσουμε μόνοι μας το Okhttp κατά την προετοιμασίαhostnameVerfier
:
new OkHttpClient.Builder()
.connectTimeout(20, TimeUnit.SECONDS)
.readTimeout(20, TimeUnit.SECONDS)
.writeTimeout(35, TimeUnit.SECONDS)
.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
//注意这里在生产环境中千万不要直接写死true
return true;
}
})
.build();
αλλάΥπάρχουν πολλές πληροφορίες στο διαδίκτυο σχετικά μεverfiy
Η άμεση επιστροφή της αλήθειας είναι πολύ επικίνδυνη.Φυσικά, εάν το vertify επιστρέφει fasle, αυτό σημαίνει ότι η επαλήθευση ονόματος κεντρικού υπολογιστή δεν μπορεί να πετύχει και το αίτημα http δεν μπορεί να πετύχει. Για παράδειγμα, εάν ξεκινήσω ένα αίτημα http με τη διεύθυνση του ιστολογίου μου, το μήνυμα σφάλματος είναι το εξής:
{http errorCode=-500, mErrorMsg=Hostname yanchen.blog.csdn.net not verified:
certificate: sha256/tlnf6pbfeu257hnJ9e6j4A1ZWH3vVMzn3Zn3F9kLHdg=
DN: CN=*.blog.csdn.net
subjectAltNames: [*.blog.csdn.net]}
Το μέρος όπου εκτελείται η επαλήθευση είναιRealConnectionΜέσα, μετά την εκτέλεση.
Εκτός από την προσαρμογήhostnameVerfier
Επιπλέον, το Okhttp παρέχει μια προεπιλεγμένη υλοποίηση. Τώρα ας αναλύσουμε τις εσωτερικές αρχές.
Το OkHostnameVerifier είναι ενσωματωμένο στο Okhttp και αυτή η μέθοδος περνάειsession.peerCertificates[0] as X509Certificate
Λάβετε το αντικείμενο πιστοποιητικού
override fun verify(host: String, session: SSLSession): Boolean {
return try {
verify(host, session.peerCertificates[0] as X509Certificate)
} catch (_: SSLException) {
false
}
}
fun verify(host: String, certificate: X509Certificate): Boolean {
return when {
host.canParseAsIpAddress() -