חתימת מסמך PDF
-
אני רוצה להבין את כל העניין של חתימה דיגיטלית מאובטחת. לא חתימה מאושרת שקונים מאחד הגופים כאן בארץ, אלא חתימה שאני יכול ליצור בעצמי.
אשמח להבין:
- איך בדיוק נקראת החתימה הזאת?
- איך היא עובדת? האם ע"י מפתח ציבורי ומפתח פרטי כמו באינטרנט?
- איך אני יכול ליצור בעצמי כזאת חתימה. מה אני אמור לקבל? קבצים?
- אני מתאר לעצמי שאחרי שתהיה לי החתימה, אדע כבר לחתום. אבל אשמח להסבר מי שהתנסה בחתימה בסביבת NodeJS. בדגש על חתימת Buffer של PDF.
תודה רבה.
כל התשובות תתקבלנה בברכה.@מנצפך אמר בחתימת מסמך PDF:
אני מתאר לעצמי שאחרי שתהיה לי החתימה, אדע כבר לחתום
למה נראה לך כך?
כדי לחתום צריך ספריית node שמבינה פורמט PDF ויודעת לחתום PDF או להשתמש בתוכנת שורת הפקודה שיודעת לחתום PDF.חיפוש גוגל קצר מניב את התוצאות הבאות -
http://wiki.cacert.org/PdfSigning
https://www.npmjs.com/package/node-signpdf
https://www.npmjs.com/package/node-pdfsigner
https://nhs.io/pdf/#signing -
@מנצפך אמר בחתימת מסמך PDF:
אני מתאר לעצמי שאחרי שתהיה לי החתימה, אדע כבר לחתום
למה נראה לך כך?
כדי לחתום צריך ספריית node שמבינה פורמט PDF ויודעת לחתום PDF או להשתמש בתוכנת שורת הפקודה שיודעת לחתום PDF.חיפוש גוגל קצר מניב את התוצאות הבאות -
http://wiki.cacert.org/PdfSigning
https://www.npmjs.com/package/node-signpdf
https://www.npmjs.com/package/node-pdfsigner
https://nhs.io/pdf/#signing -
בינתיים התחלתי עם openSsl.
רשמתי כזאת פקודה:sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout test-ssl/private.key -out test-ssl/public.crt
הוא יצר לי שני קבצים.
אני מבין שאני צריך לתחום עם ה private.key. נכון?
עכשיו, אם אני מתקין את ה public.crt על המחשב שלי, הוא גם יוכל לבדוק את אמינות החתימה ביחס למי חתם אותה. נכון?
-
לא ניסיתי, אבל זה נראה פשוט
התקנה:
npm i -S node-signpdf node-forge
חתימה:
import signer from 'node-signpdf'; const signedPdf = signer.sign( fs.readFileSync(PATH_TO_PDF_FILE) fs.readFileSync(PATH_TO_P12_CERTIFICATE), );
אימות:
import signer from 'node-signpdf'; ... const signedPdfBuffer = signer.sign(pdfBuffer, p12Buffer); const {verified} = signer.verify(signedPdfBuffer);
-
לא ניסיתי, אבל זה נראה פשוט
התקנה:
npm i -S node-signpdf node-forge
חתימה:
import signer from 'node-signpdf'; const signedPdf = signer.sign( fs.readFileSync(PATH_TO_PDF_FILE) fs.readFileSync(PATH_TO_P12_CERTIFICATE), );
אימות:
import signer from 'node-signpdf'; ... const signedPdfBuffer = signer.sign(pdfBuffer, p12Buffer); const {verified} = signer.verify(signedPdfBuffer);
@upsilon01 זה ב TS?
צריך טיפה לשנות בשביל JS. -
@upsilon01 ניסיתי את החתימה.
נתן לי שגיאה. -
@upsilon01 הוא כותב לי
Error: Could not find ByteRange placeholder: /ByteRange [0 /********** /********** /**********]
-
אגב, עשיתי את הקוד טיפה שונה שיתאים ל JS:
var signer = require('node-signpdf'); var fs = require('fs'); var PATH_TO_PDF_FILE = './sample.pdf'; var PATH_TO_P12_CERTIFICATE = './private.key'; const signedPdf = signer.default.sign( fs.readFileSync(PATH_TO_PDF_FILE), fs.readFileSync(PATH_TO_P12_CERTIFICATE), );
-
@upsilon01 הוא כותב לי
Error: Could not find ByteRange placeholder: /ByteRange [0 /********** /********** /**********]
@מנצפך אמר בחתימת מסמך PDF:
@upsilon01 הוא כותב לי
Error: Could not find ByteRange placeholder: /ByteRange [0 /********** /********** /**********]
לזכרוני אם לא מוסיפים ארגומנט שמגדיר את הקידוד, הוא קורא את הקובץ בלי שום קידוד וזה יכול להסביר את הודעת השגיאה, נסה כך:
fs.readFileSync(PATH_TO_PDF_FILE, 'utf8')
fs.readFileSync(PATH_TO_P12_CERTIFICATE, 'utf8'), -
@יוסף-בן-שמעון ברגע שאני מוסיך uft8 הוא זורק לי שגיאה:
Error: PDF expected as Buffer
או
Error: p12 certificate expected as Buffer.
בהתאמה לשינוי שאני עושה.
-
@יוסף-בן-שמעון ברגע שאני מוסיך uft8 הוא זורק לי שגיאה:
Error: PDF expected as Buffer
או
Error: p12 certificate expected as Buffer.
בהתאמה לשינוי שאני עושה.
-
אני רוצה להבין את כל העניין של חתימה דיגיטלית מאובטחת. לא חתימה מאושרת שקונים מאחד הגופים כאן בארץ, אלא חתימה שאני יכול ליצור בעצמי.
אשמח להבין:
- איך בדיוק נקראת החתימה הזאת?
- איך היא עובדת? האם ע"י מפתח ציבורי ומפתח פרטי כמו באינטרנט?
- איך אני יכול ליצור בעצמי כזאת חתימה. מה אני אמור לקבל? קבצים?
- אני מתאר לעצמי שאחרי שתהיה לי החתימה, אדע כבר לחתום. אבל אשמח להסבר מי שהתנסה בחתימה בסביבת NodeJS. בדגש על חתימת Buffer של PDF.
תודה רבה.
כל התשובות תתקבלנה בברכה.למרות שהרבה דברים נענו וכפי הנראה @מנצפך יודע כבר את התשובות בכל אופן אכתוב לטובת הקוראים האחרים את התשובות מסודר.
@מנצפך אמר בחתימת מסמך PDF:- איך בדיוק נקראת החתימה הזאת?
חתימה דיגטלית... היא בדיוק כמו של מה שקונים רק שאין גוף חיצוני שמעיד על השייכות בין החתימה לחותם, אלא צריך בעת הצורך לבוא אליך ולבדוק האם היא שלך.
- איך היא עובדת? האם ע"י מפתח ציבורי ומפתח פרטי כמו באינטרנט?
כן. אבל באינטרנט התוכן עובר הצפנה ע"י המפתח הציבורי, פה המפתח הציבורי מאפשר לכל אחד לבדוק האם אכן מחולל המפתח חתם על המסמך. החתימה היא בעצם תוספת על המסמך, שמחוללת ע"י המפתח הפרטי - אני לא יודע איך בדיוק יוצרים את זה.
- איך אני יכול ליצור בעצמי כזאת חתימה. מה אני אמור לקבל? קבצים?
אתה יוצר באמצעות תוכנה צמד מפתחות. בד"כ שומרים אותם בקבצים. יש תוכנות שיוצרות קובץ בודד שנקרא p12 בו נמצאים שני המפתחות. בקובץ pem למשל יש רק את הציבורי. כל סוגי הקבצים הללו הם קבצי טקסט פשוט, החתימה מופיעה שם בייצוג של Base64.
ליצירת המפתחות אין כלי מובנה בwindows, יש בגיט-בש כלי שורת פקודה בשם ssh-keygen.exe, כמו"כ יש כלי גרפי בPuTTY וגם בMobaXtrem ובהמון כלים דומים.