התקנת תעודה ב-Docker: הבדלים בין גרסאות בדף

מתוך ויקי נטפרי
קפיצה לניווט קפיצה לחיפוש
(התקנת תעודת נטפרי עבור Docker Toolbox)
(הוספת requests)
 
(39 גרסאות ביניים של 15 משתמשים אינן מוצגות)
שורה 1: שורה 1:
[[קטגוריה:תעודת אבטחה]]
+
{{עמוד באנגלית|Installation of certificate in Docker}}
{{עמוד באנגלית|CA certificate in Docker}}
 
 
{{קישור לתצוגת קריאה}}
 
{{קישור לתצוגת קריאה}}
 
{{ניווט|תעודת האבטחה}}
 
{{ניווט|תעודת האבטחה}}
  
== הגדרת תעודה עבור תוכנת Docker ==
+
Docker הינה תוכנה שמאפשרת לבנות סביבות הרצה עצמאיות על גבי מערכת הפעלה.
תוכנת Docker משתמשת בתעודת האבטחה של השרת ממנו הוא מוריד את תמונת המערכת עבור הקונטיינר כדי לאמת את מקור הקונטיינר. כדי ש-Docker יעבוד בסביבה מסוננת של נטפרי צריך לגרום לתוכנה לסמוך על התעודה של נטפרי.
 
  
ברוב סוגי התקנה של Docker מספיק להתקין את התעודה במערכת ההפעלה המארחת בדרך הרגילה.  
+
==שגיאות אבטחה ביישומים והרצות מתוך הקונטיינר==
 +
קונטיינר של Docker מספק סביבה עצמאית - כמין מחשב חדש בפני עצמו.
  
אומנם בהתקנת Docker Toolbox ב-Windows, כל הפעולות של Docker נעשות מתוך מכונה וירטואלית. יש צורך להתקין את תעודת האבטחה של נטפרי לתוך המכונה הוירטואלית.
+
כלים ותוכנות שפועלות בתוך הקונטיינר וניגשים לאינטרנט יתקלו בתעודה לא מוכרת של נטפרי, ולכן צריך להתקין את התעודה של נטפרי ברמת הקונטיינר.
  
כדי להתקין את תעודת האבטחה של נטפרי במכונה הוירטואלית, יש להריץ את הפקודות הבאות בטרמינל של Docker:
+
===התקנת תעודת אבטחה בתמונות הנפוצות===
 +
 
 +
יש להוסיף את השורות הבאות לDockerfile, מתחת לשורת הFROM (במידה ואתם יודעים את טיב הפעולות תוכלו לשים אותו מאוחר ככל היותר לפני השלב הראשון בו נצרכת התעודה):
 +
 
 +
{{Bootstrap alert-info|
 +
אם אתם גולשים על רשת של ספק RL שימו לב לשנות את הקישור שיש בשורה המתחילה ב ADD לפי המדריך הזמני של התקנות תעודה [[עדכון תעודת אבטחה בספק אר אל|כאן]].
 +
}}
 +
 
 +
# --- NETFREE CERT INTSALL ---
 +
ADD https://netfree.link/dl/unix-ca.sh /home/netfree-unix-ca.sh
 +
RUN cat  /home/netfree-unix-ca.sh | sh
 +
ENV NODE_EXTRA_CA_CERTS=/etc/ca-bundle.crt
 +
ENV REQUESTS_CA_BUNDLE=/etc/ca-bundle.crt
 +
ENV SSL_CERT_FILE=/etc/ca-bundle.crt
 +
# --- END NETFREE CERT INTSALL ---
 +
 
 +
התעודה נבדקה על תמונות מבוססות ubuntu,alpine,centos
 +
וזה מגדיר גם משתני סביבה להפעלה תקינה של python ו nodejs
 +
 
 +
=== במקרה של קונטיינר קיים, ללא אפשרות לשנות את ה Dockerfile ===
 +
יש להכנס לתוך הדוקר (פקודת docker exec, או דרך התוכנה docker-desktop) ולהריץ בתוכו את הפקודה:
 +
 
 +
curl  <nowiki>https://netfree.link/dl/unix-ca.sh</nowiki> | sh
 +
 
 +
לאחר מכן לערוך את הקובץ ~/.bashrc ולהוסיף לו את הפקודות הבאות:
 +
 
 +
export NODE_EXTRA_CA_CERTS=/etc/ca-bundle.crt
 +
export REQUESTS_CA_BUNDLE=/etc/ca-bundle.crt
 +
export SSL_CERT_FILE=/etc/ca-bundle.crt
 +
 
 +
===במקרה של שימוש בdocker compose ללא Dockerfile===
 +
ניתן לשלב את הוראות ההתקנה כפקודה יחידה, בתוך הקובץ docker-compose.yml, עבור הservice שבו יש צורך להתקין את תעודות האבטחה.
 +
לצורך הדגמה:
 +
 
 +
#docker-compose.yml file example
 +
version: "3.9"
 +
services:
 +
  your-app:
 +
    image: node
 +
    command: sh -c "(curl -sL https://netfree.link/dl/unix-ca.sh | sh ) && export NODE_EXTRA_CA_CERTS=/etc/ca-bundle.crt && npm install && npm start"
 +
<br>
 +
'''אם רשום לכם שהנתיב /etc/ca-bundle לא קים, החליפו את הנתיב בנתיב לתעודה הרגילה של נטפרי'''
 +
===במקרה בעיה, ולהוראות מתאימות לתמונות אחרות===
 +
 
 +
כמובן שלכל תמונה ויישומים שבתוכה יש את הדרך שלה, במקרה שאתם מתקשים היעזרו במערכת הפניות (כללו תמיד בפניה את תוכן/קובץ הdockerfile במידת האפשר, ולפחות את שם תבנית התמונה, ולוג מלא ככל האפשר של השגיאה).
 +
 
 +
נסו גם להיעזר בפורומים טכניים.
 +
 
 +
===תמונות מוכנות (לא רשמי)===
 +
להלן כמה תמונות מוכנות לעבודה בסביבת נטפרי שהוכנו על ידי אחד המשתמשים עבור משתמשי נטפרי. '''אלו אינן תמונות רשמיות מטעם נטפרי.'''
 +
 
 +
התמונות הוכנו בכמה תצורות לינוקס (amd/arm וכד'), כמפורט על כל אחת מהן.
 +
 
 +
היות ונטפרי עובדים עם כמה ספקי אינטרנט, התמונות הוכנו לעבודה מול כמה ספקים. רשימת הספקים הנתמכים מופיעה כ- Labels, לדוג': 'provider-bezeq=true'.
 +
 
 +
רשימת התמונות (חפשו 'netfree.' ב-tag):
 +
 
 +
* [https://hub.docker.com/r/chaimfn/dotnet_aspnet dotnet/aspnet]
 +
* [https://hub.docker.com/r/chaimfn/dotnet_sdk dotnet/sdk]
 +
* [https://hub.docker.com/r/chaimfn/node node]
 +
* [https://hub.docker.com/r/chaimfn/python python]
 +
* [https://hub.docker.com/r/chaimfn/nginx nginx]
 +
* [https://hub.docker.com/r/chaimfn/php php]
 +
* [https://hub.docker.com/r/chaimfn/buildkit buildkit]
 +
 
 +
===אפשרות נוספת===
 +
https://github.com/AriFordsham/docker-cert
 +
 
 +
בפרוייקט הנ"ל יש סקריפט שאפשר להכניס במיקום כלשהו ב-PATH עם זכות קדימה לפקודת docker המקורית כך שהסקריפט יעטוף את פקודת docker המקורית. הסקריפט מייבא בצורה שקופה את התעודות של המערכת המארחת לתוך הקונטיינר בלי צורך לשנות את ה-DOCKERFILE. זה עובד במערכות לינוקס וווינדוס-WSL.
 +
 
 +
שאלות ובעיות בהפעלת הסקריפט ניתן לשאול כאן: https://forum.netfree.link/topic/9301
 +
 
 +
===עקיפת אימות SSL בתוכנות מסוימות===
 +
 
 +
לפעמים אין אפשרות להתחבר לקונטיינר רץ, וגם אין אפשרות לערוך אותו, ובמקרה כזה אי אפשר להתקין את התעודות של נטפרי. אפשר לבטל את אימות התעודה נקודתית עבור כל תוכנה שעושה שימוש בתעודות.
 +
 
 +
====GIT====
 +
להוסיף בהרצה משתנה סביבה `GIT_SSL_NO_VERIFY=true` באמצעות הדגל `-e`
 +
 
 +
לדוגמה:
 +
 
 +
docker run -e GIT_SSL_NO_VERIFY=true user/image
 +
 
 +
 
 +
====CURL====
 +
להוסיף volume (קבצים מהמחשב המארח) ולהפנות לשם את התיקיית בית של curl באמצעות משתנה סביבה' וככה לשלוט בהגדרות.
 +
 
 +
לדוגמה:
 +
 
 +
mkdir vol
 +
echo insecure >> ./vol/.curlrc
 +
docker run -v ./vol:/tmp/vol -e CURL_HOME=/tmp/vol user/image
 +
 
 +
====NODE====
 +
להוסיף משתנה סביבה <code>NODE_TLS_REJECT_UNAUTHORIZED=0</code>
 +
 
 +
לדוגמה
 +
 
 +
docker run -e NODE_TLS_REJECT_UNAUTHORIZED=0 user/image
 +
 
 +
====MAVEN====
 +
הוספת משתנה סביבה בהרצה, לדוגמה:
 +
 
 +
docker run -e MAVEN_OPTS="-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true Dmaven.wagon.http.ssl.ignore.validity.dates=true -Dhttps.protocols=TLSv1.2" user/image
 +
 
 +
====WGET====
 +
בדומה לCURL, רק שאי אפשר להגדיר סביבת HOME ייחודית עבור WGET, ולכן צריך להשתמש במשתנה סביבה HOME.
 +
 
 +
דוגמה:
 +
 
 +
mkdir vol
 +
echo check-certificate = off >> ./vol/.wgetrc
 +
docker run -v ./vol:/tmp/vol -e HOME=/tmp/vol user/image
 +
 
 +
 
 +
====חבילת requests בפייתון====
 +
האפשרות הזו תעבוד רק בגרסאות של requests מתחת ל2.28, רשמית האפשרות הזו נחשבת לבאג והוא תוקן בגרסאות שאחרי. הפתרון הוא ליצור משתנה סביבה <code>CURL_CA_BUNDLE=</code> עם ערך ריק.
 +
 
 +
לדוגמה:
 +
docker run -e CURL_CA_BUNDLE="" user/image
 +
 
 +
==שגיאות ברמת תוכנת הDocker עצמה==
 +
 
 +
תוכנת Docker עצמה משתמשת באינטרנט עבור הורדה של תמונה מהDocker hub או מקור אינטרנטי אחר,
 +
בדרך כלל פעולה זו לא נתקלת בשגיאה של תעודת אבטחה כי התכונה מסתמכת על מאגר התעודות המותקן במחשב.
 +
 
 +
אם אתם נתקלים בשגיאה בשלב הזה (בד"כ בשורת FROM של קובץ Dockerfile או בפקודת docker pull או docker run), השגיאה נראית ככה:
 +
 
 +
Get https://registry-1.docker.io/v2/: x509: certificate signed by unknown authority
 +
 
 +
או
 +
 
 +
Error response from daemon: Get https://registry-1.docker.io/v2/: x509: certificate signed by unknown authority.
 +
 
 +
*ראשית ודאו שהתקנתם את התעודה של נטפרי במערכת שלכם (אם זה עתה התקנתם את התעודה, יש להפעיל מחדש את הDocker, הפעלת המחשב מחדש כמובן גם טובה).
 +
*אם מדובר בהתקנה של Docker Toolbox, אז לא די בתעודה ברמת המערכת הפעלה כי מערכת זו עושה שימוש במערכת וירטואלית לפעולות של Docker עצמה.
 +
 
 +
במקרה זה הפעילו את הטרמינל של Docker והריצו בו את הפקודות הבאות:
 
  docker-machine ssh default
 
  docker-machine ssh default
  curl <nowiki>http://netfree.link/netfree-ca.crt</nowiki> | sudo tee -a /etc/ssl/certs/ca-certificates.crt /var/lib/boot2docker/certs
+
  curl -L <nowiki>http://api.internal.netfree.link/ca/netfree-ca.crt</nowiki> | sudo tee -a /etc/ssl/certs/ca-certificates.crt /var/lib/boot2docker/certs
 
  sudo /etc/init.d/docker restart  
 
  sudo /etc/init.d/docker restart  
 
  exit
 
  exit
 +
==שגיאות ברמת תוכנת  Minikube==
  
== תעבורה יוצאת מתוך הקונטיינר ==
+
תוכנת Minikube מספק מערכת להרצת kubernetes, ומפעיל סביבת Docker פנימי, אם אתם נתקלים בשגיאה של תעודת אבטחה או לחילופין התקנת חבילות שלו לא עבודת חלק.
בעת השימוש בדוקר, כאשר מבוצעת תעבורה החוצה מהקונטיינר, בין ע"י הרצת פקודות ובין בקריאות לשרת חיצוני, לא די בהתקנת תעודת האבטחה במחשב המקומי, יש להתקין את התעודה גם בקונטיינר בהתאם למערכת הפעלה שלה.
+
 
 +
במקרה זה הפעילו את הטרמינל של minikube והריצו בו את הפקודות הבאות:
 +
minikube ssh
 +
curl -sL <nowiki>http://netfree.link/dl/ubuntuCertInstallNetFree.sh</nowiki> | sudo -E bash -
 +
sudo /etc/init.d/docker restart
 +
exit
  
[[תעודת האבטחה|כאן]] יש הוראות להתקנת תעודה האבטחה במערכות הפעלה שונות.
+
{{Bootstrap alert-info|
 +
אם אתם גולשים על רשת של ספק RL שימו לב להשתמש בפקודות הנמצאות במדריך הזמני  [[עדכון תעודת אבטחה בספק אר אל#Minikube:|כאן]].
 +
}}

גרסה אחרונה מ־15:08, 14 באוקטובר 2024

For English click here

למעבר מתצוגת עריכה לתצוגת קריאה

עמוד ראשי > תעודת האבטחה > התקנת תעודה ב-Docker ‎‎


Docker הינה תוכנה שמאפשרת לבנות סביבות הרצה עצמאיות על גבי מערכת הפעלה.

שגיאות אבטחה ביישומים והרצות מתוך הקונטיינר

קונטיינר של Docker מספק סביבה עצמאית - כמין מחשב חדש בפני עצמו.

כלים ותוכנות שפועלות בתוך הקונטיינר וניגשים לאינטרנט יתקלו בתעודה לא מוכרת של נטפרי, ולכן צריך להתקין את התעודה של נטפרי ברמת הקונטיינר.

התקנת תעודת אבטחה בתמונות הנפוצות

יש להוסיף את השורות הבאות לDockerfile, מתחת לשורת הFROM (במידה ואתם יודעים את טיב הפעולות תוכלו לשים אותו מאוחר ככל היותר לפני השלב הראשון בו נצרכת התעודה):


# --- NETFREE CERT INTSALL ---
ADD https://netfree.link/dl/unix-ca.sh /home/netfree-unix-ca.sh 
RUN cat  /home/netfree-unix-ca.sh | sh
ENV NODE_EXTRA_CA_CERTS=/etc/ca-bundle.crt
ENV REQUESTS_CA_BUNDLE=/etc/ca-bundle.crt
ENV SSL_CERT_FILE=/etc/ca-bundle.crt
# --- END NETFREE CERT INTSALL ---

התעודה נבדקה על תמונות מבוססות ubuntu,alpine,centos וזה מגדיר גם משתני סביבה להפעלה תקינה של python ו nodejs

במקרה של קונטיינר קיים, ללא אפשרות לשנות את ה Dockerfile

יש להכנס לתוך הדוקר (פקודת docker exec, או דרך התוכנה docker-desktop) ולהריץ בתוכו את הפקודה:

curl  https://netfree.link/dl/unix-ca.sh | sh

לאחר מכן לערוך את הקובץ ~/.bashrc ולהוסיף לו את הפקודות הבאות:

export NODE_EXTRA_CA_CERTS=/etc/ca-bundle.crt
export REQUESTS_CA_BUNDLE=/etc/ca-bundle.crt
export SSL_CERT_FILE=/etc/ca-bundle.crt

במקרה של שימוש בdocker compose ללא Dockerfile

ניתן לשלב את הוראות ההתקנה כפקודה יחידה, בתוך הקובץ docker-compose.yml, עבור הservice שבו יש צורך להתקין את תעודות האבטחה. לצורך הדגמה:

#docker-compose.yml file example
version: "3.9"
services:
  your-app:
    image: node
    command: sh -c "(curl -sL https://netfree.link/dl/unix-ca.sh | sh ) && export NODE_EXTRA_CA_CERTS=/etc/ca-bundle.crt && npm install && npm start"


אם רשום לכם שהנתיב /etc/ca-bundle לא קים, החליפו את הנתיב בנתיב לתעודה הרגילה של נטפרי

במקרה בעיה, ולהוראות מתאימות לתמונות אחרות

כמובן שלכל תמונה ויישומים שבתוכה יש את הדרך שלה, במקרה שאתם מתקשים היעזרו במערכת הפניות (כללו תמיד בפניה את תוכן/קובץ הdockerfile במידת האפשר, ולפחות את שם תבנית התמונה, ולוג מלא ככל האפשר של השגיאה).

נסו גם להיעזר בפורומים טכניים.

תמונות מוכנות (לא רשמי)

להלן כמה תמונות מוכנות לעבודה בסביבת נטפרי שהוכנו על ידי אחד המשתמשים עבור משתמשי נטפרי. אלו אינן תמונות רשמיות מטעם נטפרי.

התמונות הוכנו בכמה תצורות לינוקס (amd/arm וכד'), כמפורט על כל אחת מהן.

היות ונטפרי עובדים עם כמה ספקי אינטרנט, התמונות הוכנו לעבודה מול כמה ספקים. רשימת הספקים הנתמכים מופיעה כ- Labels, לדוג': 'provider-bezeq=true'.

רשימת התמונות (חפשו 'netfree.' ב-tag):

אפשרות נוספת

https://github.com/AriFordsham/docker-cert

בפרוייקט הנ"ל יש סקריפט שאפשר להכניס במיקום כלשהו ב-PATH עם זכות קדימה לפקודת docker המקורית כך שהסקריפט יעטוף את פקודת docker המקורית. הסקריפט מייבא בצורה שקופה את התעודות של המערכת המארחת לתוך הקונטיינר בלי צורך לשנות את ה-DOCKERFILE. זה עובד במערכות לינוקס וווינדוס-WSL.

שאלות ובעיות בהפעלת הסקריפט ניתן לשאול כאן: https://forum.netfree.link/topic/9301

עקיפת אימות SSL בתוכנות מסוימות

לפעמים אין אפשרות להתחבר לקונטיינר רץ, וגם אין אפשרות לערוך אותו, ובמקרה כזה אי אפשר להתקין את התעודות של נטפרי. אפשר לבטל את אימות התעודה נקודתית עבור כל תוכנה שעושה שימוש בתעודות.

GIT

להוסיף בהרצה משתנה סביבה `GIT_SSL_NO_VERIFY=true` באמצעות הדגל `-e`

לדוגמה:

docker run -e GIT_SSL_NO_VERIFY=true user/image


CURL

להוסיף volume (קבצים מהמחשב המארח) ולהפנות לשם את התיקיית בית של curl באמצעות משתנה סביבה' וככה לשלוט בהגדרות.

לדוגמה:

mkdir vol
echo insecure >> ./vol/.curlrc
docker run -v ./vol:/tmp/vol -e CURL_HOME=/tmp/vol user/image

NODE

להוסיף משתנה סביבה NODE_TLS_REJECT_UNAUTHORIZED=0

לדוגמה

docker run -e NODE_TLS_REJECT_UNAUTHORIZED=0 user/image

MAVEN

הוספת משתנה סביבה בהרצה, לדוגמה:

docker run -e MAVEN_OPTS="-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true Dmaven.wagon.http.ssl.ignore.validity.dates=true -Dhttps.protocols=TLSv1.2" user/image

WGET

בדומה לCURL, רק שאי אפשר להגדיר סביבת HOME ייחודית עבור WGET, ולכן צריך להשתמש במשתנה סביבה HOME.

דוגמה:

mkdir vol
echo check-certificate = off >> ./vol/.wgetrc
docker run -v ./vol:/tmp/vol -e HOME=/tmp/vol user/image


חבילת requests בפייתון

האפשרות הזו תעבוד רק בגרסאות של requests מתחת ל2.28, רשמית האפשרות הזו נחשבת לבאג והוא תוקן בגרסאות שאחרי. הפתרון הוא ליצור משתנה סביבה CURL_CA_BUNDLE= עם ערך ריק.

לדוגמה:

docker run -e CURL_CA_BUNDLE="" user/image

שגיאות ברמת תוכנת הDocker עצמה

תוכנת Docker עצמה משתמשת באינטרנט עבור הורדה של תמונה מהDocker hub או מקור אינטרנטי אחר, בדרך כלל פעולה זו לא נתקלת בשגיאה של תעודת אבטחה כי התכונה מסתמכת על מאגר התעודות המותקן במחשב.

אם אתם נתקלים בשגיאה בשלב הזה (בד"כ בשורת FROM של קובץ Dockerfile או בפקודת docker pull או docker run), השגיאה נראית ככה:

Get https://registry-1.docker.io/v2/: x509: certificate signed by unknown authority

או

Error response from daemon: Get https://registry-1.docker.io/v2/: x509: certificate signed by unknown authority.
  • ראשית ודאו שהתקנתם את התעודה של נטפרי במערכת שלכם (אם זה עתה התקנתם את התעודה, יש להפעיל מחדש את הDocker, הפעלת המחשב מחדש כמובן גם טובה).
  • אם מדובר בהתקנה של Docker Toolbox, אז לא די בתעודה ברמת המערכת הפעלה כי מערכת זו עושה שימוש במערכת וירטואלית לפעולות של Docker עצמה.

במקרה זה הפעילו את הטרמינל של Docker והריצו בו את הפקודות הבאות:

docker-machine ssh default
curl -L http://api.internal.netfree.link/ca/netfree-ca.crt | sudo tee -a /etc/ssl/certs/ca-certificates.crt /var/lib/boot2docker/certs
sudo /etc/init.d/docker restart 
exit

שגיאות ברמת תוכנת Minikube

תוכנת Minikube מספק מערכת להרצת kubernetes, ומפעיל סביבת Docker פנימי, אם אתם נתקלים בשגיאה של תעודת אבטחה או לחילופין התקנת חבילות שלו לא עבודת חלק.

במקרה זה הפעילו את הטרמינל של minikube והריצו בו את הפקודות הבאות:

minikube ssh
curl -sL http://netfree.link/dl/ubuntuCertInstallNetFree.sh | sudo -E bash -
sudo /etc/init.d/docker restart
exit