Salah satu kolega saya sangat tertarik untuk menandatangani majelis. Dia benar-benar mencoba untuk menandatangani apapun. Bahkan ketika kita menggunakan rakitan dari Microsoft yang tidak ditandatangani, dia akan mengambil kode sumbernya, menandatanganinya dan kemudian meminta pengembang lain untuk menggunakan salinannya.
Saya dapat memahami ide dasar di balik penandatanganan rakitan: untuk memastikan rakitan tertentu tidak dikompromikan oleh beberapa peretas yang cerdik. Jadi jika kita adalah perusahaan pengembang perangkat lunak, kita harus menandatangani perakitan kita sebelum merilis beberapa pustaka .NET kepada pelanggan kita.
Namun, kami terutama mengembangkan aplikasi web untuk penggunaan kami sendiri di sini, dan saya tidak dapat melihat pentingnya menandatangani setiap rakitan yang kami gunakan.
Apakah saya melewatkan sesuatu di sini?
sumber
Jawaban:
Majelis penandatanganan yang digunakan dalam lingkungan tepercaya kedengarannya berlebihan bagi saya.
Hal yang menarik pada rakitan yang ditandatangani adalah bahwa mereka sedikit lebih lambat untuk memuat daripada rakitan yang tidak bertanda tangan, karena harus diverifikasi secara kriptografik.
Untuk menandatangani suatu majelis, setiap majelis yang bergantung padanya juga harus ditandatangani. Dugaan saya adalah bahwa ini berkontribusi pada keinginan kolega Anda untuk menandatangani semuanya - kompilator menuntutnya.
EDIT Sejak menulis jawaban ini Anda dapat melihat baik kubu pro dan kontra memiliki dukungan yang kira-kira setara. Jelas tidak ada jawaban yang benar di sini.
Hal yang mendorong pengeditan ini adalah bahwa saat ini kami mengambil begitu banyak pustaka sumber terbuka dari NuGet, dan banyak di antaranya tidak ditandatangani sama sekali. Jika Anda ingin menandatangani perakitan Anda, Anda harus memiliki dependensi yang ditandatangani juga. Banyak pustaka sumber terbuka yang ditandatangani memiliki kunci privat yang digunakan untuk penandatanganan tersedia untuk umum di repositori sumbernya.
Seperti semua hal, ada trade-off yang harus dilakukan. Dalam pengalaman saya bekerja di lingkungan pribadi, manfaat penandatanganan sebagian besar bersifat teoretis (atau akademis, seperti yang disebutkan @ user289100 ), kecuali jika Anda khawatir tentang lembaga pemerintah yang memodifikasi kode Anda dalam hal ini Anda perlu paranoid tentang begitu banyak level infrastruktur Anda yang ditandatangani akan tampak seperti sedikit usaha. Jika tidak, jumlah tantangan yang timbul karena harus menandatangani semuanya sepertinya tidak sepadan. Namun lingkungan Anda mungkin memiliki persyaratan yang berbeda, atau Anda mungkin seorang masokis!
Lihat juga jawaban Teun D untuk informasi tentang tantangan yang terkait dengan rakitan versi saat menggunakan nama yang kuat.
sumber
Saya telah memanfaatkan majelis tanpa tanda tangan untuk mengatasi masalah sebelum dan dalam lingkungan akademis menunjukkan kepada orang-orang mengapa itu penting. Saya mengganti file DLL yang tidak ditandatangani (sekali lagi dalam pengaturan akademis) dengan yang saya buat dengan nama yang sama, tanda tangan yang sama, dan menggunakan .NET Reflector untuk menyalin dan menempelkan kode asli, tetapi di milik saya saya mengirim email nama pengguna dan kata sandi itu sedang diteruskan sebelum memanggil kode 'nyata'.
Jika ditandatangani, Anda bisa membuat tanda tangan cocok, tapi tidak mengganti. Berlawanan dengan apa yang dikatakan Zippy, akan ada kesalahan penyesuaian waktu proses.
Majelis penandatanganan tidak pernah berlebihan. Ini membutuhkan waktu 30 detik. Ini seperti mengatakan mengunci pintu Anda berlebihan jika Anda tinggal di pedesaan. Jika Anda ingin berjudi dengan harta benda Anda, silakan biarkan terbuka. Hanya perlu satu pelanggaran keamanan untuk dipecat. Hanya perlu 30 detik untuk menandatangani rapat dan tidak ada kasus bisnis untuk tidak melakukannya. Dampak kinerja dapat diabaikan.
sumber
Satu poin tambahan: menandatangani rakitan Anda merusak kompatibilitas mundur atas versi. Referensi Anda semua mulai menyertakan nomor versi dan versi dengan nomor versi lain dianggap tidak kompatibel. Ini menghalangi peningkatan ke versi rakitan terdistribusi yang lebih baru.
Menurut pendapat saya, Anda sebaiknya hanya memberi tanda kode jika Anda melihat beberapa keuntungan konkret darinya:
sumber
Apakah kolega Anda memberikan indikasi mengapa dia suka menandatangani majelis? Satu keuntungan dari penandatanganan yang belum dibahas di sini adalah bahwa hanya majelis yang ditandatangani yang dapat dimasukkan ke dalam GAC (yaitu, dibagikan ke seluruh proses yang dikelola), tetapi sisi negatifnya tampaknya lebih besar daripada keuntungan dari perspektif saya (yang memang tidak berpengalaman).
Anekdot Anda tentang penandatanganan sendiri kode Microsoft tampaknya sangat mencurigakan bagi saya. Jika MS tidak menandatangani kodenya, mungkin ada alasannya, bukan? Dan dengan menandatanganinya, Anda mengambil tanggung jawab ketika Anda tidak menulisnya - kesempatan lain untuk masa depan menggigit Anda.
sumber
Hal lain tentang menandatangani sebuah majelis adalah, bahwa seseorang tidak dapat menyuntikkan yang salah di tempat Anda (juga - diri Anda secara tidak sengaja). Misalnya, jika Anda membuat program yang merujuk ke rakitan Foo.dll, versi 1.0, seseorang dapat membuat rakitan, dengan versi yang sama, dan mengganti milik Anda, saat Anda menandatangani pustaka, itu tidak akan mungkin (di setidaknya saya tidak berpikir itu mudah mungkin).
sumber
Tanda tangan hanya diperlukan jika rakitan ditempatkan di GAC, tidak ada yang lain. Majelis yang ditandatangani tidak menghalangi seseorang untuk mengacaukannya. Seorang peretas masih bisa menghapus tanda tangan dan kode lain yang memeriksa tanda tangan.
sumber
Saya setuju sepertinya sedikit sia-sia. Ini benar-benar diperlukan untuk memastikan file tersebut sesuai dengan yang Anda pikirkan (dan belum dirusak). Tetapi jika Anda mempercayai batasan keamanan jaringan dan server web Anda sendiri, maka menandatangani rakitan web Anda tampaknya seperti langkah yang mubazir.
Tapi mungkin itulah pengalaman bisnis kecil saya yang berbicara. Jika Anda berbicara tentang situs web perbankan online yang sangat penting, masuklah.
sumber
Pikirkan untuk melakukannya jika Anda akan mengirimkan sesuatu dan / atau benar-benar memiliki alasan untuk melakukannya. Dalam setiap kasus lainnya, itu hanya merepotkan. Saya akan bertanya kepada rekan kerja Anda apa yang sebenarnya dia dapatkan dari melakukan ini.
Saya telah menemukan assembly-itis yang ditandatangani sebelumnya dan itu menyakitkan di posterior, terutama ketika Anda mempertimbangkan jumlah orang yang memiliki sedikit atau tidak ada pengetahuan tentang menandatangani majelis, untuk apa dan bagaimana melakukannya. Ini hanyalah hal lain yang tidak perlu Anda khawatirkan kecuali benar-benar diperlukan.
sumber
Anda perlu menandatangani rakitan Anda ketika digunakan dalam penyebaran-dari-web ClickOnce XBAP .
Selain itu, semua majelis yang direferensikan perlu ditandatangani juga.
sumber
Kami menandatangani rakitan kami karena ada kalanya kami mendapatkan kesalahan seperti berikut (yang ini dari pengujian, tetapi dapat terjadi saat menjalankan aplikasi):
Kami menemukan bahwa Visual Studio terkadang salah dan menjalankan kode lama .
Jika Anda menginginkan kesalahan jika Anda menjalankan kode lama, maka tanda tangani majelis Anda.
Jika Anda menulis paket nuget , silakan tanda tangani majelis Anda . Majelis tak bertanda tangan membuat canggung bagi kami yang ingin memastikan bahwa kami menjalankan versi terbaru kode kami. Saya tidak dapat memperbaiki Visual Studio . Yang bisa saya lakukan adalah mendeteksi bahwa Visual Studio salah. Jadi tolong, tandatangani majelis nuget Anda .
sumber