From e6cadee44fc2954300a5827cec5f788d59771960 Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Wed, 27 Mar 2024 18:51:52 +0100 Subject: [PATCH] Update SSL/TLS certificates page for Godot 4.x - Recommend CA certificates as the first option, as they're trusted by other applications and require less configuration. Let's Encrypt has made CA certificates available for free for a while now. - Link to mkcert as an alternative for self-signed certificates (for local development purposes). --- tutorials/networking/img/add_crt.png | Bin 6590 -> 0 bytes tutorials/networking/img/ssl_certs.png | Bin 19782 -> 0 bytes .../img/tls_certificates_export_filter.webp | Bin 0 -> 12496 bytes .../img/tls_certificates_project_setting.webp | Bin 0 -> 10978 bytes tutorials/networking/ssl_certificates.rst | 106 +++++++++--------- 5 files changed, 56 insertions(+), 50 deletions(-) delete mode 100644 tutorials/networking/img/add_crt.png delete mode 100644 tutorials/networking/img/ssl_certs.png create mode 100644 tutorials/networking/img/tls_certificates_export_filter.webp create mode 100644 tutorials/networking/img/tls_certificates_project_setting.webp diff --git a/tutorials/networking/img/add_crt.png b/tutorials/networking/img/add_crt.png deleted file mode 100644 index 309a359dd67788deda526fb47b118487dd506adf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6590 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 diff --git a/tutorials/networking/img/ssl_certs.png b/tutorials/networking/img/ssl_certs.png deleted file mode 100644 index 77ea9305f7d1f378c0f2dca59211ad61c6e59c62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19782 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 EHwOegRsaA1 diff --git a/tutorials/networking/img/tls_certificates_export_filter.webp b/tutorials/networking/img/tls_certificates_export_filter.webp new file mode 100644 index 0000000000000000000000000000000000000000..ee83fa50436235549355c91a34d8dd3bb1af9892 GIT binary patch literal 12496 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 a(4AmRf~eQZKSj-f6}}E2t>pL@UOaW zVjC|m+^%V3(>C_KszRBQF!ae0Ahwf)i=GWLRFD*P4}2gS(?k-I*sOzFW3zpts&bI$ zX9+AB`)m_F0^6Q0_RKZQGPx+%wyoM$UjE^H!2_WED()qR0C;PR zF^}BZwq2_g$9re5z4zhMfJdSCiZ!S}E~EdlAW3%HrVk2`LDb$e9+d#4PdeHEuaYZU zVPqj$*fwRVqa&yR4UCB}L&*wOLX2Dq`%HWJ zUKKHL6)=sCl$VZ=sbV1pE`thou?`3(Y5qTXwGD-B+qOxd8I|qypAFkciu}xnUvX=- z`v2#RrG_@=oO8}O=bUrSIp>^nnbQCNlV08I%eM@l#cJRpLp5-z8(1{d4T#<_-vVZ+ zh}fo~uM4TnQm|u+kpxY(q_R; z!Y<%OQL#-D5Yah1aI`^iUBI6hZUwKXY7krGVx|FMowKUK=UgnqO@^+(=WH2nVvBGc z?!pDA0>O>g4ZJGAj9`-H|Cd({hHcwMj@{!(cK;=~jpRrYYj*F}N18s@dmo@%TibHE zDN)SK%*@Qp%#5j-A!j>grjX(PzwaM1-FwaUgvJV(neAJF%#5ikU~1r|rqGcZaEdk1 z{Gn1)geg|QDUAxiSXC%B+oE_HFf}kPfSE$61~s5?RDdFhGTa8H24jjfOl-D8VQNe#R0U>RRKZ+B4QfCQs0K3x3>!&m zW!#eH{Vm>DwsfNHgE&*Y{p<(zZQIp>^n&N=6} zIp@%VjH8_V7 zT!EQ{mi^Q@vedxuM7N8jTf;OU>>}bK2c~0gyv*E4fjPSYv&4+j^sv;~RsfI$04yWz z{~xrqZChiccIF1jw(X>{xN7|t79zMq2<{MgNcGxdKj4HR(NMTV7bcrKzU5u6U-XFII+w{^B39F zeAQZ&T*vR%1FlaWBjOQo`Aw2L;x#GjMpWEY88@e5(Sq)xcR}f9ugpxd-qG8*e<>8_b$FI&plf72kULn0%WAz&)I~K zr)JHzx-N~B^|i<%UttwOv>u>0L4|aGy%Sz$y(}}+l8r@&wWQFd%qNVv!R~P&6kPN| zZ&gTK#5(Vxq753k>ia8Z9bXj|Kli|g%LFYT_G|fs=W1(tK4oEx`bhaota1y4DIv?d z#8yggG_Ja?k6M6?l>0sF<+jH1R3s0rGV7^w9syOl0c#Wz_FIE3n6Yw8U3XV0Of?uAbM{NwLF7> zd;M7LAv$US^J&>-2XGl?ZRtUvdAgQfXSru_tYAuu+1grU8a^RJkhvz~9=+v@0pV&m zm-Ah6lOUje=Hr{u8+e+LP z^K^dMDM#i*{X|aNP5{+oF({%_TEq#iSc%KAVl^OU2lyTG>DQ)hKU2Tk9@G*ee0*sJ z)oaixxpc*KInlCqsj@K^krPz~a2FS~TO+f`tX=>C%?^|!+UW%}(n5#;J7v0i^Ck}^ zvTd=zS6@Z;gC?Mw>K)n5#q(EPThBrAID~S@1yZtZ;D1ilZ=bls<<`*zYZ|@=gcrkh zmXomJgtMJw=;Yh5K)7nX9leXxW96RepLUeU1(5k?<9!hTn@yiV;JVa1?5-N*3cVX@ zMY3yCy)Zobn5ZD{I=Aes0ENb2pVs98sOiJVZv0=`b!dfR#ZdWB( zDL0KpuQX3E%h|+8>XTT<#PkDqiIj*9&sdtIES$%i>W>mI9ncMU_>uVSkkv?Y^ z06amEZilCj1v)J+QmQAD>F?*K#PIpNy@js%ax);1ty4$h#r6oDUv|o=bBh^1Cuyn} zSk#kTu@c!lCMc(SGUbxsH7gZ_zT{VnWY>M zMHSx=J!paKR^!cvERYvbq(m>!5Pq{b2IUMET7ebrg=)}X0zmNYDB1XS07vv=QjQVV zmS|8G(%dCjYf);(kV&juarz8Q(K7)d}#}61?XxLUOm=!Z!A!=AUYD+ z4!~hWP0s_%QwD2bk81>2P*ruq=;BP?4Pa^nDG>+!BEU_FF|d+{ls`X+B2ZCPHDjV( z;WU801jzidQ|1;x^~|F1}Qwz`BS7NBF3+t8)PM z=|gZI3&6AyH@j2=cR(sqtz{0XZLwfCXS^S1=PL4!jGYnOG^_TSG^zeOf`a5PBG)#a zACW{x!eR87FeDt14@#`dzbn7$uGkO-psymO15nhId2n~^VAKJlaxmR)9c!@63{J9; z9l&S^C!Y?Z{K#CpF3OZ6#sS1PUG1$hrH=_&??d=l0Lu>Z71bmHV%iikwUx-gm*y8< z0H;g&u>AUXs7TC$=t#~EVAG0|)m$#8=M0?uuRP0u;`g_WxUzOyk$Ox3fI7)diT&G? ztG(QnA_{cagcmSwY>aF z6b^fYxJCS&WxE63Ff05Fc2)E0B&%e~wP`}xku~z_YeV>o(HekiM6wnmff-iVl>ta) zJpf?N8bghAGHV`Tt3)=Ts;W4GQ)1Dni41&c(;^Ar!65MyZEq8^AUcv;2XKTHGxfOP zc*%dlIo1XMNHZFY2_J!*5}Q*=MG^t?|G2Hs13;WXw2naLmnS8NoUHB4s{xERxnd>o zWReORlN6JxMb=541?ZHvYxUtX}1qshNX z*#!XTz$dQ%nhO9_HWFhG7zib-62pK~1mM~Llt+odV`7q^Z0*w*4A_OX8QA~?Z5Ddr zT~oGfiJBqR)M@O(Qb`E zbfnY-aIO`rsuuuASuI0Z(3lr)iR=ugMSz_Wb-C{7NSKprh(NZk4q!F`GQT`2$yP7= z00fP)Kt4Awz1Rr=EMj&QtqV9!;o@5kQ8xF2mgi`bw5YldO&61$!B3g%9)mcPsJ2Bz zr%G>0Q00moeo8#A_xjT@cQ~Tx>%d}8GSMS;68nMxii&^S64SqCl{(-LjGqhGb}Zz- zA`D!cu|W>D%XdZ?HADlex>2j(&5AJzf_}rnZhbvocucG!pB`}f*AcWTU5`rWI1~WL zos40Z!JY@GH)*7lf*Jp@4oKFQPylrG0@10Y7>zB^sksbPX+C#jc#mej>E)t-(rqPX zLBySJRpRrS6^h$Y9-iDsQu;$DNBygz4gOtvo2?j9@<1lDqo11+E9)Her{~S*O}Gow z)AJ0n@p84dm>8k+%aamR&iPO;Dzee(W8OWvE?2BY5VKS26LJ5!rf~5shblYX`bzIu zx(Wun$owaYj_5XESl{$#>`vwxH)Xzi4DwJS+ZK;c_isN89qTULbyKE*I=!YoK^ zrKMYw(#?$k0QU4#o!Sy=IqB4V2BNgCEf+f3XTHpioLmog2}E3FOIzPLYXy?NoaVCA z_Yd=1rZm0oaWa%@LUu%fRB+z-iMT1TMiO$nsX)SGPhD=gb`F|oS9pf`M09?+Qc^jU z#Zbbt#c16vyT`y4YZ27!8WA~dH^r>@rq`E7l?~^(wzZRIv5QRH?jIiofangb<(Ou0 zQ>ME&Z}Lzg|I4(yb4^nrSoXO4a7g0p|GrHuCIb6;*$2bE)jO55wAn+nYGUZnJKLPw97^p^mbYYNg{p$pjRrMat=;7ZEON11MUTqD8qB%vurM((#|f z>j)bL8CR=auRN+W>O9iqzm>^IZJm-&6p?Hkg%Q> zA9)Pty#>pASZ^$O^E6-6eXzW{ysX=ikWs0r?V?jXP-2ZjUyj0F4r#@ht&;)#Ubaky z6>rmNnw}^t?ylQXkaEPrD0B~WRH?XNPr+Lttmnk)>S_@HqqtryzS+_~Xhb?P zVvp3%n{76xc!M7_=4iIr5HNFjo*vBt9FX7Tr{ZG zjzpL+JN|Rm(FU&;5B>d)@B(A9NcIGj zFS5SEDi*l;x5Yd)#v&1gZ&6=ycfp>3TCo5&?V&8iFR>MUNe!5x?#OFJ zU%6f`40R&mKtP~hg4F=hcC?qgMVPVY3{uhw(bPQwkwgnR!3BFxuNjvc8hn|nY{fj2 zkJHO<7wQL9&6w8zl- z|MD}eTuN&sTu6IA-2ab%Jkv9w{el4Sd{3aWlm&YR&Ut~?R0IOa_LiS9(qUNp!R0pK zhvy9^FDlUH1zA<(w4d> zNoU+yo2DT;R4tfmdh!ux1gwv=ll<*Ss1=ulXi)7h98KIN@q#k6%%^ge0}(+W#}TBT z7p`2kE6~ho=X`$Q21XIBt^P{yq%$sZje@z{!rNM1qwi7y#Y=;4eyu8D?+W-U%YOn8(d4TrZ{D}XNE3t)HN)2OX>{+hN zP%Y)M2E;yePvn~c1iPWHh#Rj2>V~4THiAe`dDUZ6nrt$GAXn@K=Dq;{u@5a`B`}r7 z-%zfXZ;ZPmAm`g-HD~$SRt!A0B=(^LIbP0f2B2b|n{bC>R`eAODnRH`Om;`VJWn5( zEQ#o-kJAkbD*Wq5upJ?rqT0&g-)SsqqnI{VQB$)1pHG008^kpg$^W5M{H-x$iI?+-3U-# z>V=@NsUed)GRyKgEdoO!RHM<*20@K91EupB19>ST+E1~epujztt@{`sNs-Z@ik}!- z7H9k^d=2H&^^D$-crlq6#5s&roD0Z;^HIg8-(ux+o*0$dqMZ_6$yV-+-`E(aKx8^%J6isy|94hi)EW5f z@yeUa3KTaL0v<#j&*A21Ydf)IVI=OZOQq{ntyWi0dEmC;p8x-mKn$qeCIa)?Si{DC zz#E;l8Nd`y{lsmaTzEvmdq}=ZazHSU2{@ecy!-<`jodNufT@EiiB$-0Yjh& zFohoSQadWSgz|PN+aPtKcdHEC?|d$@qww+fKNo!>MQMKaqJO=<^aE5NG99rU4f|eY zK3IOWXmI+Me{jqrK!KvCelJ~^C{v|A{s6*sXQQP(JeIDb$tSas-yFdBBG8;YbG)j+~y;6}v5Ny3h;gbuAwQ<=SvO@SJvr;a)IB-#vAy8` zSZ`^W{o`>51E!pOc2&IHAjWY+$ocA|6ME4d{X`VI#OYh>c(nz4KF1}>1$%gJpOA)R z3H>0!Y7D!dHND)nR0DSuLkk1vS4}zOxwX4IBW$~)PuE{5%AXgW?k}^bjXBtpw+(gG z4Mm+uaDx6Uqa|}?{Wvg$t}-rT-UvxKlEZZi)&>xM?5-?YqwgERK-4!*I7lYEJW1xv zDF=weI0d%ZOWLh^!oL$yE#U#iRhwJ`u3SX<7dJoRfqzb+H2)*Ouxn;-7d=RiTz1qV z0_U3U@DQ&9bJ1;7seEuUhEdu~!~Ul~13gHOTA=lXOULm$I3LzXcz;3io^;#H>M2jK z8W>ioZ!I4zfB669w;tsG=(P7m$tRM0#C|pu#5%Mwci%I7-GrAqN8;(KEonPC#_wD9 z*cy8A;}VkwEDPR5gvaR(yW}9OY(B9W46P%08a5FzQraty zoNPptE#j!0k`I|JQxIhix?bZqVb)8uBz*R@!0DQhpd06Dx#Hl@D1G!i*#=bB5LU>5{+ z$vCOpbYmOXMldu{RAAGKlrPjgS`5JCphU!gs8rCG;kKLCl=|?J1ul2reLz1R?M7wN zE!71q9gj1;q`3$k@SyoLjOCW_!k9G>{2Jh(IW($_ z)Dr|GCkd+jHo0$lasf0Lo&n%227?Eu9|yJHZu-Mt7BG%o7hS+6384jUhpWnNgiC1D z5M9pk-~d$eF&VuFZ6BO&3j8wHi@WZ=I>0;j$?ZNfYMsf@qe6?1(2N^>0IqVG>>CT+ zyAAY2r_$1b`}u8rpZ`w!&8vX{3=9On%T|La$2$V25t9eQ^*U}V!Ylq&Sn-XR(S5_> zPwA@<22zoV{e&T#TvQPclV$tPhGiTFcY*CJQlhz<9_%|nrA!UmrXdk@Yhvo#6(P{~ z+g`uL`ut>rrR(TPVjBrcpww3?ajLAQ_%(olFYS8sT2x9uD(jct-`21>01KTpkXT+v z$TWaUI7XlgOV(@@xCeW5Kq9G>Uu?Va=09Gb2e@AA&V9HhgPZ{loB`O_Gr#=ZICRl= zX!niT_{Lr!*VKz3mBR`8O^!8dV9EJC3f0{5ml{%^7Lnp{hCwugqtHX-FhK>lKGCsd z_5R?p8v0BRkeXpO=?VT^ZluwpLyL}d;uZj45}7&CZ3W-Bs7%l1muO1n!8@*{D*9Ez zLpHzvxic`3?Ut+=Vs}m%V^M4BUeyZdzUNl0@@W=p4`?l8rI~9ebU42ghNTlsAXal% zofEC)9APE#tF+;ZI~+_AQ$kmfOAz%sL)>*X$|=K_exGoKO|&YzgvwfOtz6*+^BQ?n z5d=FNEf8!2RebVMK32H<=9p^||zd#WoxQ(t~g? zDTEq;c`^b4#zr5cdWfjPp5`+E=q@B20FXmmvJjznR^Crprvt#Y>BeX|HUL_7BZ&Dy zf!nqVH1s?GXCR%)A%JHjlt}_Z6kc_s#?MZqFRS+lvq}LeuWub+4X~rqqeF`gJB4im zr2qoIXofQXZg!Id1k&2WSgZ>!S8KuPh!@ zbTpMDt7@nufgyTKyFWx9TawxPgI$8u3tK;crR&k5#YV7H;~K!0ZiZl}>b*j~VPtHR zBj!zs6-l@2T&_n03g*{$q=nI&5A-hEh_pUNfCB&or^Z0fqr=cNhXdBgScbI|O!?Pr z-gk%LN&fETx$iC5`$RVKp;-Qs$0?73DPb07x*C-juvZvwD9^5*nhN zC6x6|FCeq`2U}4BxUz8q=vt2sEjI3E4q$sm^}*QOm5@I&OD!>dGTf|EGI`{A@z~=1 z;2WjyjfHqUJOF`=>uMC5a91`WZVGp=DW~( zp;brv;9LRNp+8YG44q)YRQg1fD020x;2q7>n!{;o z1jvXI>dDo3s+X%q87gj24WN(zI2mPqmQ)u~bUG zk87wg&?6}ul8tRla36_?N{~eL8GraP>3l&)*8yKo5i%pz%VJi&r)lU?tBq9RngW?8`vtgp~xK zhgqu@(US{7#%aeLKG-Y(GNRN$PNS;e{HSh50IOz z|MnK}^z{C@sMl<8K9H7!NfdF1Ul|N#fzXajoZ-N#r3N^4m3#TWA$65Ss-rI*$ER>Qs<^~f zICEMcn%}N9eJ>jW#&bwWUCU^Dv@`8qWIo+rW8GF7r>)unUOpz3o;)zYhBRXe+lZ6y zo)BeE3ui#u=R<|zHyp4`sSTnGSR@FM%TS+49{?sRM=5@wOyKl4A8L;{CxAz+XsMwE zqRCDF{X_+IvCi&5WOblToa(*KGeMrpYAQ{H&ow<98>Q%DQJpx&J*gL z-S3BFum-Q!WeSJ={ZU{IrCsrodQS%UO`3FX1*AR!I{s4-avNnRj`zGR)4de5kBGDR zE=%VHA3f5~sKK17>4epWqQrCZlb6(*9lXI>PqZ=hgX9OI8ao!(P=ZZ1AOMH#0m}qx zq`ApQTK4GLrtp!sD^-ozCyzBrLrD%Ymg>TH!N#x&p}ma4{M}@H(~!N}rO*<-b;(v# zInf|0D$&;2rJH!=c#AwIaVF+YB}f~#AvEHcomB)8=ju$8Pi3EZ$6Ty2e{~r-5znp; z-nzDOM4tTQXvXfNI2FGo#^fX$>`*|9k!$&KkquH`PzR_Jdf}{Dim_I4 zrUsv7r@M)#q{P4%`b#tA#xaoBHcwHWc|8OY9E2O}?MrT~_y zFRK02700O{JsFA8bf^k|XydHm+sbcVAgJOw=5j#pLe(@tnW(`GUePUW&TshV9A5x$ z1@Vwu_tb?Ae21m0}k=Me4fKr79;u;-y;h4U*_2;7ovCItdu96h)oTgvKh@?j_RDe9PiEe zn~IiMQCX0lj6^E+iP(+y#w#+w0osv|A-jwEapj8rfQjQTd@=1!X&&qZL2M9U0TGDfG&X?PlSns|0}#b{Q{qjY?Md(yHj{hH=jB&fY64!I6h^oE4WgB^-~tfUt23U6&r4*y#yT${z+UB3NQHp$VGZ!e6G^* z7baeBC}vD=gU$wuQkC+L!lSvCMC6r?93xtfj*bu7jLu@V^#=Ccvv zD~VaWCSph>zC!X_*X8guGxm4w=+K=m;U`(pV@^Ruj6{II4wUAlk zK9wncVOJ7Ei1^o%a)P@kIm-h8#f2J^Yh>-Xj=blYIdDGb5d#48gzBBRm=JGq=alDT zWq_i>;&^$QQ-JhzT@?WOEK3k)IUcZlYnLP&RVY3FT14j>D*dawD1iKmg7jph70g-q zni8zec+`~hCcf~T^4R0PjIoe${u}1qg~yuNeLW>S!C;f)M^0IpT723c%X!3^eLSXY z`W-^tnPr$fX0U})Y5*3Tz_M1bw?xLPZG2HGTyL7FDEv^jG#$!3$1yR*3 ziwX%Aa%Q?U6km?rvC%`4Hw7hGyoxcKika6yr9M~KyiyzLyb0mK~R&C5(qm-kUb-u z>pKc73kXlM+#hv72nZKC#`;B@C(a4c|iGD*)1gOZqW0q2jogDw-jR0&2ws-Ya!ajxu#MA`rSM}+8D*-yYZ9? z@PqhG>}q^7=?#gjCPtK>mh>ZL5`P$F4j@dxMJ8^U?{ED$5nANH{A@b|En z8n#Za^j*M!eX=PGb^xtJ0ezv947_E=B>cA;w)~_bleALKGfHeYrTw3WshQoR6!+IM z-Ao7Pp3xj8ww){*mfthp8v*6>)_2IlF3KatW}T#Xpk(<|)y;krspdRjvzCH(It>c* z$_?2#c(DaeERNuuufM1Lrfl)}vLk4n+rxyRNC6A4x(~=pl8=7>gnod$v3}?brKPC7JR+v)U5! z-%RqfM_&Huq&Qbe9z`s}^xaG^*wTfPh+a|T&>zmdB`j>sd8l{;LR{6`y7Fu#8sYrj zEI`BgR_7vQ?kT0Ie)*QlG8Ia_MHbGdeE`+`lyqwPIGOFTpI2r{Svhy^+;1$eVI~}3 z@rr(YtF5p9HkBx|Fvgf&d7WT8_A3mjWINd}KUryA>36QFj+$B@-~e0K@t?K_Jx5Wf zL(fxm0^|dkqmEeGJ#Z(H#{PZqjiLFlSjtz`f zr;c;Jv}TRl*g1F Q=q_C0Oms`ff8uU200Nl)od5s; literal 0 HcmV?d00001 diff --git a/tutorials/networking/ssl_certificates.rst b/tutorials/networking/ssl_certificates.rst index 09da65d085d7..825b21eb807c 100644 --- a/tutorials/networking/ssl_certificates.rst +++ b/tutorials/networking/ssl_certificates.rst @@ -1,74 +1,80 @@ -:article_outdated: True - .. _doc_ssl_certificates: -SSL certificates -================ +SSL/TLS certificates +==================== Introduction ------------ -It is often desired to use SSL connections for communications to avoid -"man in the middle" attacks. Godot has a connection wrapper, -:ref:`StreamPeerTLS `, -which can take a regular connection and add security around it. The -:ref:`HTTPClient ` -class also supports HTTPS by using this same wrapper. +TODO -Godot includes SSL certificates from Mozilla, but you can provide your own -with a .crt file in the project settings: +It is often desired to use :abbr:`SSL (Secure Sockets Layer)` connections (also +known as :abbr:`TLS (Transport Layer Security)` connections) for communications +to avoid "man in the middle" attacks. Godot has a connection wrapper, +:ref:`StreamPeerTLS `, which can take a regular connection +and add security around it. The :ref:`HTTPClient ` class also +supports HTTPS by using this same wrapper. -.. image:: img/ssl_certs.png +Godot includes the +:ref:`SSL certificate bundle from Mozilla `__, +but you can provide your own with a CRT file in the Project Settings: -This file should contain any number of public certificates in -`PEM format `__. +.. figure:: img/tls_certificates_project_setting.webp + :align: center + :alt: Setting the TLS certificate bundle override project setting -Of course, remember to add .crt as filter so the exporter recognizes -this when exporting your project. + Setting the TLS certificate bundle override project setting -.. image:: img/add_crt.png +When set, this file *overrides* the Mozilla certificate bundle Godot uses +by default. This file should contain any number of public certificates in +`PEM format `__. -There are two ways to obtain certificates: +Remember to add ``*.crt`` as the non-resource export filter to your export +preset, so that the exporter recognizes this when exporting your project: -Approach 1: self signed cert ----------------------------- +.. figure:: img/tls_certificates_export_filter.webp + :align: center + :alt: Adding ``*.crt`` to non-resource export filter in the export preset -The first approach is the simplest: generate a private and public -key pair and add the public key (in PEM format) to the .crt file. -The private key should go to your server. + Adding ``*.crt`` to non-resource export filter in the export preset -OpenSSL has `some -documentation `__ about -this. This approach also **does not require domain validation** nor -requires you to spend a considerable amount of money in purchasing -certificates from a CA. +There are two ways to obtain certificates: -Approach 2: CA cert -------------------- +Acquire a certificate from a certificate authority +-------------------------------------------------- -The second approach consists of using a certificate authority (CA) -such as Verisign, Geotrust, etc. This is a more cumbersome process, -but it's more "official" and ensures your identity is clearly -represented. +The main approach to getting a certificate is to use a certificate authority +(CA) such as :ref:`Let's Encrypt `__. This is a more +cumbersome process than a self-signed certificate, but it's more "official" and +ensures your identity is clearly represented. The resulting certificate is also +trusted by applications such as web browsers, unlike a self-signed certificate +which requires additional configuration on the client side before it's +considered trusted. -Unless you are working with large companies or corporations, or need -to connect to someone else's servers (i.e., connecting to Google or some -other REST API provider via HTTPS), this method is not as useful. +These certificates do not require any configuration on the client to work, since +Godot already bundles the Mozilla certificate bundle in the editor and exported +projects. -Also, when using a CA issued cert, **you must enable domain -validation**, to ensure the domain you are connecting to is the one -intended, otherwise any website can issue any certificate in the same CA -and it will work. +Generate a self-signed certificate +---------------------------------- -If you are using Linux, you can use the supplied certs file, generally -located in: +For most use cases, it's recommended to go through certificate authority as the +process is free with certificate authorities such as Let's Encrypt. However, if +using a certificate authority is not an option, then you can generate a +self-signed certificate and tell the client to consider your self-signed +certificate as trusted. -.. code-block:: none +To create a self-signed certificate, generate a private and public key pair and +add the public key (in PEM format) to the CRT file specified in the Project +Settings. - /etc/ssl/certs/ca-certificates.crt +.. warning:: -This file allows HTTPS connections to virtually any website (i.e., -Google, Microsoft, etc.). + The private key should **only** go to your server. The client must not have + access to it: otherwise, the security of the certificate will be + compromised. -Or pick any of the more specific certificates there if you are -connecting to a specific one. +OpenSSL has `some documentation +`__ +about this. For local development purposes **only**, `mkcert +`__ can be used as an alternative.