Kata pengantar
Untuk dapat menggunakannya, Anda harus terlebih dahulu memahaminya. Saya terlalu malas untuk menggambar, jadi saya bisa menggambar dari orang -orang besar online. Struktur Springcloud seperti yang ditunjukkan pada gambar:
Skenario aplikasi arsitektur layanan mikro:
1. Sistem split, beberapa subsistem
2. Setiap subsistem dapat menggunakan beberapa aplikasi, dan keseimbangan beban antar aplikasi diimplementasikan
3. Pusat pendaftaran layanan diperlukan, dan semua layanan terdaftar di pusat pendaftaran. Balancing beban juga dicapai dengan menggunakan strategi tertentu untuk layanan yang terdaftar di pusat pendaftaran.
4. Semua klien mengakses layanan backend melalui alamat gateway yang sama. Melalui konfigurasi perutean, gateway menentukan layanan mana yang menangani permintaan URL. Load Balancing juga digunakan saat meneruskan permintaan ke layanan.
5. Kadang -kadang layanan juga perlu saling mengakses. Misalnya, ada modul pengguna, dan layanan lain perlu mendapatkan data pengguna dari layanan pengguna saat memproses beberapa layanan.
6. Pemutus sirkuit diperlukan untuk menangani batas waktu dan kesalahan selama panggilan layanan tepat waktu untuk mencegah sistem keseluruhan lumpuh karena masalah dengan salah satu layanan.
7. Fungsi pemantauan juga diperlukan untuk memantau waktu yang dihabiskan untuk setiap panggilan layanan, dll.
perkenalan
Dalam arsitektur Microservice, kami biasanya mengadopsi metode organisasi DevOps untuk mengurangi biaya besar yang disebabkan oleh komunikasi antara tim untuk mempercepat kemampuan pengiriman aplikasi layanan mikro. Ini membuat informasi online yang awalnya dikendalikan oleh tim operasi dan pemeliharaan diserahkan kepada anggota organisasi layanan mikro untuk dipertahankan sendiri, yang akan mencakup sejumlah besar informasi sensitif, seperti akun database dan kata sandi. Jelas, sangat berbahaya jika kita secara langsung menyimpan informasi sensitif di Plaintext dalam file konfigurasi aplikasi Microservice. Menanggapi masalah ini, Spring Cloud Config menyediakan kemampuan untuk mengenkripsi dan mendekripsi properti untuk melindungi informasi dalam file konfigurasi. Misalnya, contoh berikut:
spring.datasource.username = didispring.datasource.password = {cipher} dba6505baa81d78bd08799d8d4429de499bd4c2053c05f029e7cfbf143695bDi Spring Cloud Config, konten ditandai sebagai nilai terenkripsi dengan menggunakan awalan {cipher} di depan nilai atribut. Ketika klien Microservice memuat konfigurasi, pusat konfigurasi akan secara otomatis mendekripsi nilai dengan awalan {cipher}. Melalui implementasi mekanisme ini, tim operasi dan pemeliharaan dapat dengan aman memberikan sumber daya terenkripsi dari informasi online kepada tim layanan mikro tanpa khawatir tentang kebocoran informasi sensitif ini. Mari kita perkenalkan cara menggunakan fungsi ini di pusat konfigurasi.
Prasyarat untuk digunakan
Saat menggunakan fungsi enkripsi dan dekripsi Spring Cloud Config, ada prasyarat yang diperlukan yang perlu kita perhatikan. Untuk mengaktifkan fitur ini, kita perlu menginstal versi JCE tanpa batas (ekstensi kriptografi Java Strength Unlimited) di runtime dari pusat konfigurasi. Meskipun fungsi JCE tersedia di JRE, versi default dengan batasan panjang digunakan. Kami dapat mengunduhnya dari situs web resmi Oracle. Ini adalah paket terkompresi. Setelah dekompresi, Anda dapat melihat tiga file berikut:
Readme.txtlocal_policy.jarus_export_policy.jar
Kita perlu menyalin file local_policy.jar dan us_export_policy.jar ke direktori $ java_home/jre/lib/keamanan untuk menimpa konten default asli. Pada titik ini, persiapan untuk enkripsi dan dekripsi selesai.
Titik akhir terkait
Setelah menyelesaikan instalasi JCE, Anda dapat mencoba memulai pusat konfigurasi. Di konsol, beberapa titik akhir spesifik pusat konfigurasi akan menjadi output, terutama termasuk:
Anda dapat mencoba mengakses titik akhir /enkripsi /status melalui permintaan GET, dan kami akan mendapatkan yang berikut:
{"Deskripsi": "Tidak ada kunci yang diinstal untuk layanan enkripsi", "status": "no_key"}Pengembalian ini menunjukkan bahwa fungsi enkripsi dari pusat konfigurasi saat ini belum dapat digunakan karena kunci yang sesuai tidak dikonfigurasi untuk layanan enkripsi.
Kunci Konfigurasi
Kami dapat secara langsung menentukan informasi kunci (kunci simetri) dalam file konfigurasi melalui properti encrypt.key, misalnya:
Encrypt.key = Didispace
Setelah menambahkan informasi konfigurasi di atas, restart pusat konfigurasi dan akses /enkripsi /status titik akhir. Kami akan mendapatkan konten berikut:
{"status": "ok"}Pada saat ini, fungsi enkripsi dan dekripsi di pusat konfigurasi kami siap digunakan. Anda mungkin juga mencoba mengakses titik akhir /enkripsi dan /mendekripsi untuk fungsi enkripsi dan dekripsi. Perhatikan bahwa kedua titik akhir adalah permintaan pasca, dan informasi enkripsi dan dekripsi perlu dikirim melalui badan permintaan. Misalnya, mengambil perintah curl sebagai contoh, kita dapat memanggil titik akhir enkripsi dan dekripsi dengan cara berikut:
$ CURL LOCALHOST: 7001/Encrypt -D DidisPace3C70A809BFA24AB88BCB5E1DF51CB9E4DD4B8FEC88301EB7A18177F176949AE9C9C9F29400C9120480BE2C849AE9C9C9C9F29400C92048048048048019 LOCALHOST: 7001/DECRYPT -D 3C70A809BFA24AB88BCB5E1DF51CB9E4DD4B8FEC88301EB7A18177F1769C849AE9C9F29400C920120480BE2C9406406C9F29400C920120480BE2C999406406C9F29400C920120480BE2C9999406406C9C9400C920120120199
Di sini, kami menggunakan enkripsi simetris untuk menentukan metode implementasi kunci dengan mengonfigurasi parameter enkripsi.Key. Metode ini relatif mudah diimplementasikan, dan hanya satu parameter yang diperlukan. Selain itu, kami juga dapat menggunakan variabel lingkungan encrypt_key untuk mengonfigurasinya agar informasi kunci disimpan secara eksternal.
Enkripsi asimetris
Pusat konfigurasi Spring Cloud Config tidak hanya dapat menggunakan enkripsi simetri, tetapi juga enkripsi asimetris (seperti pasangan kunci RSA). Meskipun generasi kunci dan konfigurasi enkripsi asimetris relatif kompleks, ia memiliki keamanan yang lebih tinggi. Di bawah ini, mari kita perkenalkan secara rinci cara menggunakan enkripsi asimetris.
Pertama, kita perlu menghasilkan pasangan kunci melalui alat KeyTool. KeyTool adalah alat manajemen kunci dan sertifikat di JDK. Ini memungkinkan pengguna untuk mengelola pasangan kunci publik/pribadi mereka sendiri dan sertifikat terkait untuk (melalui tanda tangan digital) autentikasi diri (pengguna mengotentikasi dirinya untuk pengguna/layanan lain) atau integritas data dan layanan otentikasi. Alat ini termasuk dalam versi setelah JDK 1.4, dan lokasinya adalah: %java_home %/bin/keytool.exe.
Perintah spesifik untuk menghasilkan kunci adalah sebagai berikut:
$ keytool -genkeypair -alias config -server -keyalg rsa -keystore config-server.keystore
Masukkan kata sandi keystore:
Masukkan kata sandi baru lagi:
Siapa nama depan dan belakang Anda?
[Tidak Diketahui]: Zhaiyongchao
Siapa nama unit organisasi Anda?
[Tidak Diketahui]: Perusahaan
Apa nama organisasi Anda?
[Tidak Diketahui]: Organisasi
Apa nama kota atau wilayah Anda?
[Tidak Diketahui]: Kota
Apa nama wilayah provinsi/kota/otonom Anda?
[Tidak Diketahui]: Provinsi
Apa kode negara dua huruf untuk unit ini?
[Tidak Diketahui]: Cina
Apakah cn = zhaiyongchao, ou = perusahaan, o = organisasi, l = kota, st = provinsi, c = cina benar?
[Tidak]: yMasukkan Kata Sandi Kunci untuk <Figer-server>
(Jika kata sandi sama dengan keystore, tekan enter):
Masukkan kata sandi baru lagi:
Selain itu, jika kami tidak ingin memasukkan informasi prompt itu langkah demi langkah, kami dapat menggunakan -dname untuk menentukannya secara langsung, sementara kata sandi keystore dan kata sandi utama dapat ditentukan secara langsung menggunakan -storePass dan -keypass. Oleh karena itu, kita dapat secara langsung membuat keystore yang sama dengan perintah di atas melalui perintah berikut:
$ keytool -genkeypair -alias config -server -keyalg rsa / -dname "cn = zhaiyongchao, ou = company, o = organisasi, l = kota, st = provinsi, c = china" / -keypass 222222 / -keystore configer -server.keystore / -sorepass 1111 /1111 / -keystore -server.keystore / -sorepass 1111 /1111 / -keystore -server.keystore / -sorepass 1111111111111111111111111111111111 /
Secara default, kunci yang dibuat oleh perintah di atas hanya berlaku selama 90 hari. Jika kita ingin menyesuaikan periode validitasnya, kita dapat melakukannya dengan menambahkan parameter validitas. Misalnya, kita dapat memperpanjang periode validitas kunci hingga satu tahun melalui perintah berikut:
$ keytool -genkeypair -alias konfigurasi -server -keyalg rsa / -dname "cn = zhaiyongchao, ou = perusahaan, o = organisasi, l = kota, st = provinsi, c = china" / -keypass 222222 / -keystore configer.keystore / -sorepass 111111111115 / -validstore 365 / -valkstore / vale -server.keystore / -sorepass 111111111111111115 / -validse 365 / -VALODSORD / -VALOKSOR / -VALORDS 111111.1111.11111115
Tiga metode pembuatan perintah di atas pada akhirnya akan menghasilkan file config-server.keystore di direktori eksekusi perintah saat ini. Selanjutnya, kita perlu menyimpannya di lokasi di sistem file pusat konfigurasi, misalnya, letakkan di direktori pengguna saat ini, dan kemudian tambahkan informasi konfigurasi yang relevan ke pusat konfigurasi:
encrypt.key-store.location = file: // $ {user.home} /config-server.keystoreencrypt.key-store.alias=config-serverencrypt.key-store.password=1111111crypt.key-store.secret=222222Jika kita menempatkan config-server.keystore di direktori SRC/Main/Resource di pusat konfigurasi, kita juga dapat mengonfigurasinya secara langsung seperti ini: encrypt.key-tore.location = config-server.keystore. Selain itu, informasi konfigurasi enkripsi asimetris juga dapat dikonfigurasi melalui variabel lingkungan, dan nama variabel spesifik yang sesuai adalah sebagai berikut:
Encrypt_key_store_locationencrypt_key_store_aliasencrypt_key_store_passwordencrypt_key_store_secret
Mengkonfigurasi informasi terkait keystore melalui variabel lingkungan dapat mencapai keamanan yang lebih baik, jadi itu adalah pilihan yang baik bagi kami untuk menyimpan informasi kata sandi yang sensitif di variabel lingkungan di pusat konfigurasi.
Meringkaskan
Di atas adalah seluruh konten artikel ini. Saya berharap konten artikel ini memiliki nilai referensi tertentu untuk studi atau pekerjaan semua orang. Jika Anda memiliki pertanyaan, Anda dapat meninggalkan pesan untuk berkomunikasi. Terima kasih atas dukungan Anda ke wulin.com.