החלפת ספק ההצפנה שמוגדר כברירת מחדל

במאמר הזה מוסבר איך להחליף את ספק ההצפנה שמוגדר כברירת מחדל ב-Rust.rustls יכול להיות שתרצו להחליף את ספק ההצפנה שמוגדר כברירת מחדל אם יש לאפליקציה שלכם דרישות ספציפיות שלא מתקיימות בברירת המחדל שלנו.

ספריות הלקוח של Rust משתמשות ב-Rustls כדי לאבטח את התקשורת בין האפליקציה לבין Google Cloud. ‫Rustls יכול להשתמש בספקים שונים לפונקציות קריפטוגרפיות. כברירת מחדל, ספריות הלקוח מפעילות את ספק aws-lc-rs. ספריות הלקוח משתמשות ב-BoringCrypto כברירת מחדל, כי היא מבוססת על BoringSSL, ספריית קריפטוגרפיה מוערכת ש-Google הטמיעה, והיא ספק הקריפטוגרפיה היחיד של Rust שקיבל אישור FIPS.

עם זאת, יכול להיות שיהיו אפליקציות שיצטרכו להשתמש בספק אחר. במדריך הזה מוסבר איך להשבית את ספק ברירת המחדל ולהגדיר ספק משלכם. כדי להמחיש איך לשנות את הדרישות של Rust, נשתמש ב-google-cloud-storage עם ring כספק חלופי של הצפנה. אפשר להתאים אישית את התהליך הזה לספריות לקוח אחרות. במסמכי התיעוד של rustls מפורטים ספקים נוספים.

שימוש בספריות הלקוח עם ספק ההצפנה שמוגדר כברירת מחדל

כדי להשתמש בספק ההצפנה שמוגדר כברירת מחדל, מוסיפים את ספריית הלקוח כתלות לקובץ Cargo.toml:

[dependencies]
google-cloud-storage = { version = "1" }

שימוש בספק ההצפנה שמוגדר כברירת מחדל עם השבתה של תכונות אחרות שמוגדרות כברירת מחדל

יש אפליקציות שמעדיפות להשבית את כל תכונות ברירת המחדל בהסתמכויות שלהן, ואז להפעיל רק את התכונות שהן רוצות להשתמש בהן. לדוגמה, יכול להיות שתוצאת החיפוש Cargo.toml תהיה:

[dependencies]
google-cloud-storage = { version = "1", default-features = false }

כדי להפעיל רק את השימוש בתכונה של הספק שמוגדר כברירת מחדל:

[dependencies]
google-cloud-storage = { version = "1", default-features = false, features = ["default-rustls-provider"] }

שימוש בספק הצפנה משלכם

כדי לבחור ספק משלכם:

  1. מוסיפים את Rust עם התכונות שמוגדרות כברירת מחדל מושבתות, וכוללים את כל התלות שספק צריך. במדריך הזה אנחנו משתמשים ב-ring:

    אתם צריכים להשתמש באותה גרסה של ‎ `rustls` ‎ כמו ‎ `google-cloud-storage`‎.
    [dependencies]
    google-cloud-storage = { version = "1", default-features = false }
    rustls               = { version = "0.23", features = ["ring"] }
    
  2. כדי להתקין את הספק הזה, צריך לשנות את הפונקציה main():

    use rustls::crypto::{CryptoProvider, ring::default_provider};
    
    #[tokio::main]
    async fn main() -> anyhow::Result<()> {
        // Install a default crypto provider.
        CryptoProvider::install_default(default_provider())
            .map_err(|_| anyhow::anyhow!("default crypto provider already installed"))?;
        // ... ... ...
        Ok(())
    }