From a26fda2ea7122ba64d0dbdf6d56fa07da9030866 Mon Sep 17 00:00:00 2001 From: skyace65 Date: Tue, 28 Dec 2021 21:51:50 -0500 Subject: [PATCH] Improve windows code signing documentation --- tutorials/export/exporting_for_windows.rst | 28 ++++++++++++++++-- .../export/img/windows_editor_settings.png | Bin 0 -> 13968 bytes .../export/img/windows_export_codesign.png | Bin 0 -> 7148 bytes 3 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 tutorials/export/img/windows_editor_settings.png create mode 100644 tutorials/export/img/windows_export_codesign.png diff --git a/tutorials/export/exporting_for_windows.rst b/tutorials/export/exporting_for_windows.rst index 2d2c6aed5..10ebc59ac 100644 --- a/tutorials/export/exporting_for_windows.rst +++ b/tutorials/export/exporting_for_windows.rst @@ -12,11 +12,13 @@ system. When exporting for Windows, the exporter takes all the project files and creates a ``data.pck`` file. This file is bundled with a specially optimized binary that is smaller, faster and does not contain the editor and debugger. -Requirements +Code signing ------------ -- To enable code signing, you must have the ``Windows 10 SDK`` (on Windows) or `osslsigncode `__ (on any other OS) installed. -- Download the Godot export templates. Use the Godot menu: ``Editor > Manage Export Templates``. +Godot is capable of automatic code signing on export. To do this you must have the +``Windows SDK`` (on Windows) or `osslsigncode `__ +(on any other OS) installed. You will also need a package signing certificate, +information on creating one can be found `here `__. .. warning:: @@ -27,3 +29,23 @@ Requirements antivirus programs. Therefore, it's recommended to avoid using it unless you're distributing your project via Steam as it bypasses code signing and antivirus checks. + +Setup +~~~~~ + +Settings need to be changed in two places. First, in the editor settings, under +**Export > Windows**. Click on the folder next to the ``Sign Tool`` setting, if +you're using Windows navigate to and select ``SignTool.exe``, if you're on a different +OS select ``osslsigncode``. + +.. image:: img/windows_editor_settings.png + +The second location is the Windows export preset, which can be found in +**Project > Export...**. Add a windows desktop preset if you haven't already. +Under options there is a code signing category. + +.. image:: img/windows_export_codesign.png + +``Enabled`` must be set to true, and ``Identity`` must be set to the signing +certificate. The other settings can be adjusted as needed. Once this is Done +Godot will sign your project on export. diff --git a/tutorials/export/img/windows_editor_settings.png b/tutorials/export/img/windows_editor_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..6dd68515fd5fcbe26b6872e211490fdc9709088d GIT binary patch literal 13968 zcma)jbwE^Ix3`MIARe^Uz9lE6BuY)s!^!uWl}mzGNS5d^ zt-Ol9Ny-{I)e9CLSr#tw{=rcleJeYs_ty5F7B+6hWwk$k{D_Q6P0Pr4e;@Q2(fy2x zpPl#Bb7p~t=C+=`VHyTrPJXHG-XVTrxvrieT?1>+&gO6Xhy|eeHyfPWZH@<;UaB=0-^xT%uoyrv55$YD>=LQzLwMe(%$3d70AUeC8wkp5tGui{McR6np%ICBg%w^tp$shWnD~!8f->Gf zn7EXBRBT#qL3veevtM9zTW4Qkah0Ph;Nu@rR9Yh~ujB0I_vWpQtGj`%ERWwmt;pM}H}`Ubwr zDeHgAD{W}{te|S(;T>#c=bm3w>FV}D?6q2WRHDAIy``<&dmwcF$6{$keSiO;xwUIf zZvNV@bt5yU;P7Nh8dfG2fs*pN!jftSSO41j)_0x(k+G?oZ!CBOrJ31;5|Xp3>srz? z3&Nw4jm@2(Gx4T=%xmxL(J`<}O8J@1vOa!R`5uT?s`dQVPIom}4AIeH!*9w8N_pfoBbkyl76I6UElZ}2Nw4e;y`ZCz>U zSsw5GoZbNnDthmI0=Wd0!XxA26VqVSEQ;!8AN-^Jg5oBpW=F@rcXSPK@=3At%S$U6 zy_SC)7#ztjs=l)NYinzVi~m(=S(U~c+vL=2T?0${7knXM(S8A8ySsb+10%AkCSuaM zOUtV}JG-u)Au(~OL&IZz{R1|RKFXRF<~CjuvU=n;9ig{wk>8RO5mIuQ+L}dI!(YwV z-6L#v=gxwELGe%Z`G7&LH&Vv`o;)Ckz9LW+?;eMitxyrfHdthAj7r5)e_i^Zp(=@w zTKa2ywrN!IyVqYGBu70Ow=5exnzt<7T9;E3D{n_haH26^Tn~*Va_u~z*#mTq2jA~t zX9bwZ;WphBA%A)YhV2~z0YvV?GiAMo_{@sPJRSnV#ViGLl$}|ZX6t$K>gAJUmu%rF zd?(R-Es5a=HP;5|?@{M|5T;My^Pe3MrlTwji+?ZBiA$zYaJx*>x_oWKiKQOSuF{D+ zEVte#yK(>1m)zC|2$;XkB4vfV45anq>yCKnS?ClULiNsgwd~c(a(s$kk+`Pn8SZd| z;>loEc+28jC?E{UI3(WhkLv8|G7I7_^zr}Y)+xc+v&({opbv|WftD;CQ^o!E(B~uw z`N^}`Wy;fa|DQeQ;{#K9+^3(u9h92hkJ*9fjvt3TKJ?H%3^_EJ?hRtzCCSoJ7#E&W zlx0slV^j999E)W4p8|zfnVcjk&D6SQw4fj$|Ha3@KNMEwLo@#`)ndqUboX)0@%niS zS-tc(85GOmI-0E6R98Ge7%St7GDwwp{7BWabu!GRJZX3BIQ_!Y-<^kM9`_09GO(K* zPnpY0^hr$M**tDdD+QAb{>Dg+G6(QG|N1DPPM7~M^xFa5n5yd}TGMLL@!M>;r)WqN_N*7Ezg{!(BA{IMj2TNH2PiO8qyUtJ)TCok(WI6H9GJVb1l0 zf~%(@jeAqsNix|5)Sf|{kM0*Ai?;Tc7Gr7yr4|g9=BJ%{;3*m?8gO`O>NriXQTMyr z#;_omjFqVzO5A16VI76`#97f~t$G4eYL4P3udGa`=N{u^TrUl-En(I3aEshou%UZZ zydruFhN%$wTj}&|wMHA=Z8&i@zZ<8kW-f7`AuYtT>}>s&;*Y4pUrkW*rxZ{e?}z|F ziMwzL&_p4DpoxOUnlUF(|6E5gQ#Qb+%KR)>9dCf0yNi#06#({ViIjYm5{|kSi#J85K+l!jm3exJyqqqVVt?(x2qd>(d+c;B7Sht>Gb2emqu<^k>it-V%e_+BV<)hHPTng zr4ZG5o{o21?_R#FJk6d_YjMyp+JbQXh>UivxR`U>3B~JsonzQ(9Izr+@3#F??}0|= zTXymH5q?aFn#VQ8WI89OUgM{)3@uw9U#^zTb7NXu#ACI*JR_8KU%r;U6e@-IBo!N1 zpO|J8k_@^+%BxyzJlk0-14@~Q$~F2YoR~avEP5IB#PhHQhYmQxX;EO9nn0_j19B<1ebk26~Ip9M4d@|gW-1*mu2FMyk##d zE{N%Oii=nM9kyf_r(R>aAy<0+_19-VbRR<+A6}^Q9TwVJHd8iXt8#v#zsf_&a56AD zL?{~3A)-#ki84(?x-PVh83#_WKH61NM+(E9T@j_c(RMf#2a^rB z4h}&57!Icm=-#@CXy7!U-GIiCc{_h;a>!$Q633Z*#uHGDUt1(O5BGn2{b-s4xY7x> zt6hB`k$25-+4XIXmfn5Q{90{_2IwN#A)a)=0Yol$F8$|*RjhdrJawTmrsbZ*eZO}_ zg9nQVG8axVivx+iYLDbg+xzOCOi53#25;F9S!uAve@j@SY&?<6sCn+brmqWS)FrVd z)o2|OSUylcJ>19%`7Td~t#jWxfub`+_BcEOt0qoLz2+MtSn5FDV>^Qc6|uyx9k$JV zq!XqNX_cn*l`wy?VNi{;c(iEO*5sUM%axShyqYp_)8C|#^s-DA((&8ZppqWZYB-W9 zs;SA_-rW&T@K*BuH03h?b=)Z`e9K#vf$8OlxUzopi+wrEd1!Bm2zq#&-?NHkMZ0iD z!s@Q#V|`u=Ncj7RwM7YjdaZJ;v#$gn{h9O0zBb)AhFc-N~Wm z{q5Q7U)j5h*r?)uXG2qIv_pP{E1yDmDL!caRN=6!hT#oh(EDPr2uh5_$6ULc?1xT^ zsksbgHg|Qt?XLAx9o*D*6b(pKua`}!qGXlTtoqeFPX6>P`~K;ye5R1XNxe4tQ(`4w z%6pJNzdv9FB7}5_(3hu7BhZwK_<$4o`=Ij!5896jevWp^|BlA@phg zEejfY?x8bzi2L$#$>6LMpX#wtE(tCT^lsIx-d-5C!mBUyB*!Z*1UR!bSY_kNe#d;O zOoeK!^EvU=eWXEj6;Ak`0goWQrB2lS1%v3J&!w^F6zwT_Erw7Ku&{{ukEPe)ha*fY zG-3(gv7ZuHOz<&aykL~vf>aYo*}+{nxw#v(@$L@dXOj1zXK=mEo$;^<-aU#npWc5D z1;{tO%Z&A3Nrct05ANdOJ5|pREqpyHSf^@{fzW))&CLyTP)?R>okG`(C=*m8W6^2!tNQ&6i#0euFzUVOhrCcsoXi{=#D_Hr*LzbYq6vglB4SZT zL@!r^9}Dn~rR92s?(ROi4TnC&09HCL6j2eGD?dm&Zo`$v3=^30aob;3vr|=$)vkuq zPLQQ=RCIuDYSakJD^huO%%({CMOYOd7DNbwm_83p#E-p)3h(RvHM$cHr8vnSOpxAK zc0>H6LTB4+;qy`}t)f}B&M&8snucmpUUbsx+n=oEs<~0%&H|Y+#@?3OY0mA8bEs$MRGH`rL-=sxPVy`dqEUER2;BND z@}kEjkk*pdc!-^Y%5T@Fe!DzZ6Pj54gqc4yzomPeVmWU>Td#K8u)Kn;NuUiR8T+EY z%7jl2cObTB)=Zwirr{}<%klSHDakx9E&HsW)C~#JUZt|YAZYg&jQyw(%Nr$Lnh87R zU!NqE5~Az5a#Aj~5c+o4J%mF)3|~Ta8a?M5BjN79^e&@qS`KzKt(y z5Ft(|htb3=$LlNk2LL4*e|GnU(=V)6G;pkq;2bWa=d`R&Sc{2Pn5QP$V4Zaa)N@Az z+jF(heH7H9Z4r~JWRauJ>5bkNZSs~gPer{*hvU!3@XPtK*#xdDv}M$JcJjNRXo9Tg z2%o>4bJ;i}Tft~8<#(Gu5B5#CF5Vd8KYov|x4={?@VOQfBDD4dxQh@HKe2ARSiSl0 z`*bim{0_KI2)LpML6=-g(vOnW$WPpk(&LS<)1?}D;AD>FEos^8KA>JZ;36Uk`uqrj zJ9NRX&=6siDshBBAoi;c6eiv(MuRH|7DeunOqg{^(lFmx(+agO1* zsTPbQ+g!MV3X~rVJyie-^MUnFZDM$r!;I!q+GFyi&Ik3sIzzbVXUfGXLNKOhpR)pC zzv?`e(wgo==T0H6=x1lwYGjxC4V#_)1$=v$ubVd^9ljBY+{h_HM|%m#25*BxTcZX% z<$Jtu8$>Y7C z@-G_4((*d0FEt+}Z8_N4X}PW_^CXQva+Pl7eY$B5DkUGp|Cfb%U;1SMir&$*f6Kx9 zD;V<*BgXyat0c#(^GfS3SNFr&(<3(Ubz(r9&D_Yr@wHsC9{HF+plNm3E+*ISuGI%X z=iSqJx4{~u7OyD)`lp3n?i*~6Ge&7%T*_Fvuj-&=?72$odVT)WLj$Pj*x7(M^YM!E zmw9rRqUhz}>(U|>%Ngdr_b$SgYyCn}iW|PQn9%?2ux~it5?m@2C=q#drZp4aaym5s za)xi$Khn2r$6hSYi*$6db`&F&gr$=hlv@S{cFyHq@%fxU^OOz8wdS|^clCYCc~`bl zeXVDkhq?sl=QrI7nZz5jFV7x$+mK^794jXJeZ`xp^=Do@<2XgVz3`c0bF1Sb8{+e_ z)|VlFZzpUx#UsP^-MCAJY(Jk8_SLpBRyf)m$3EsA1P@7u0`5Gsb=#5^1fxbMy zw?8Ldd7A$Qy8lF`av(OBJ{1!*(J}!D(_K`tdx0N5*Z+Rb+9SvbXCTx!c5tZb2(qyi z_ZFdr&B<-}=7nOfM5NlC{D?DzSv6|igFysBAsxj=KV*Un1?CyQDsQbwReKK$4@6Ro zh8L&+rlFBjl6y~F@e3I7ewuus{feb)t1jZJ&49L$df_38!gFeE&7df}=%9>647tQP z7@~Sm13PFoZG6dAxbFb$KL9p-X~A%H9}MXtE((~80dX`u_F0FW{ma2bG7uJ&6=(5; z$fu<`9jE%1O}xWM8xAR(F;5g93{-*r2`}#q#O~5q_iH_hHz7aRNug_?#8V%a#_XDk z`4g8?&;$9o5U!4&^a$p#yh8R0~?_|7_~-Er=*f=k=n(Mt;CjNab6o zc3B~TsF-@8T2-mf0#LMHlZHp<+R`KM?V`f@GV{j)LRF?Si#sUJ^m!9!nQUO&*?*i3G;SX zoTG(u4BK)1X{oZ11nVP6tZ`;It!=txU+d&Uc&4{lcWE*9f7~eekd+>~9@-Rr1!6xi z96&&k{kJAtFJySS58wZNgy45N1eSGg$D?sYM$O+M+D2r+X`b0)O}i)g12Qc5oeWM- zX~u1{ndk8&&KRYx9zvYudOA)A`LbbUcR(4#jPeaBXuZZoVZ37wv(d-6Eun5s-P(!| zl~xGTBPjo%xpqZkAWwP2H=vgVI!8swwsl6xa038K$%r?$nELCfqh*8KOa5hOfWhz? zR-T-)BMv0+7srV(tyiq@<<`g4;shL024;K8wG^eU^#IogRG^;0Nu z3}baLmuCBYGCBkSmqt9p{X47o6oA_9NpUc+Wr!K)%G%t0PI-KxV zLF-K35sv6tXHcI|YUKW_flwOb)7U zY1>DD5}zr7TR?lFT&a|_z$VP;aoVSMYS{0H#C|%+VZ94rqp_H#YX0JnH` zxG;`n!j0nzdgFk;cPV~}dlnHk{r+frU(w(wwi6MU9uCVN>R8vOysLcWAgTs^{Olgv zyTFjAuG-HB34=!+?Q;U#xr&W_7x^;wM61hxFR3lky{vkzcB-tmaHQ=7Xrnp;uJWKt z^&ZIxP{*6&+BL%PHn0XsCiQ0$OwBkaast#-Q#k-}gXB+W2tzZ=S4R1z?iHcp3=4|w zf1+>$#pcVrYZP|Nqg^zZx15%I^3qH3;;k?_Q`z2m1xm8hP}zsmaunhQ8r3|kw=>b; z@=Z@OsC6i`X7z(+Qz$Mnqfk%=9fa3-!AZWdw@-kI%=s4Oe@}n^D>X)X4kXWm^bt2^ zVFyE`p3Sd2jv44%^t~ND@CgJhl@M_hhOhm^IsFk&-lCagJFcpr#1b{&>#d4&e~J4| zl2(7po76|s+#5A2Wg2fuO;e4|FWl^SSmuY=v)I9`$Di4)@_WJ>Fq{xL40dvQuN!hW zW|C^ebN+E=aQbb!JPGJth1EQ?HaSNgXIM^HUIyfZSq9#l$Rd=&G4*HoDfTANL(CG2 zGs}^mVJTxp!#l9HA zq=r3ZJX_;PJE-bA%t7yL|9+%iYdH{# zSs`7?kORcr)gWat1CgBoWGIL68!a_!a8Sd8eJaNfj`|kUMbj0AlU$;e%~+f{lLXN! zRs>;0)j|?uWWaQY8%wQ*1{>~Otke1-4Vs)rW2i9s z);ZjVlY$aA6ob(JrTHJ+oR+_hs;JZ(v*6Z!xp1yJ0lP<_2;q;+rsP_!`hCN&Weo6Z zCsc03DLBY21WE_ujauqz&q-(I0_}6qQV3@Kg(Q|V08hzIn&yzuU;Jpbe?aQ*?KbeZ z84z!(wRF1*iDt2_qJj_O!M<>yHsQl`mNPIFVzyI!7Zyo}J@?bD>T4b8K-e#KwA$SX zYT=pkigRX2pjNP4(VmV~}}jQWau>A zIdgBugvf;y1)$GlU6-|NfUE3i(Yvj~=Lf#n3}{~7Vyp84bMu>w{ib1cfuQmH^TE<{ zp!YHEe~5uMfpNlU1_e%`N|EviC!;tj-Sz=rIY?)s1nkl{&SIC`hK&eP%#6jEh^~26 zR@!HZs%I6L%^7n%>t#Jm$y^$g=hcV!u1uD+mxVIfvV4TBV%8q|d! zIdXetd)thzH|)RAZ0lsmFYA&Hzek~gwwA|lF#6>-UTCPw7x zLU1dO;$ydlzRGyxR>m~ob0g9_2UTLS%zVOjO&pRcR+}Gvf}M5C3bPg|FUAr%b}p}F zniDXJBaO+@Yof(N{d|-a2##?arDOxBZm7hhEJ}KdLMH3;Uk8*!4q+w=#yyJ@vPwpq z!`LhNqb{-%WAn#=LWZ84a2{Sdlaz;;sRHHV+beE36_fdeGL`k039MK<6urim2I*mC zSWd-TS62P`(UCY)(mQqPuM{;k^KdwtZSylXn``!$Cd7gtXV|ea zlL8`)qIpHi)nxKZop-6N6=DpN4W{v_ynLLlUdII^ieJEJjOZQ$uasKufnDL5tE70qP3rYminlu$htfg!7&5BtRWE-JwAVEB`20$v zeC#hT1yB~8NDvsfOVwr>Gv86+6vwa!Nhfb2!1V6X-h|l0?!J-yK=?@_bpS|()Q^C& zKPFH4{w6Se^bzb&T=~Sh(`kcs*(oKe?ROf*Eo5c!TDA`pG+#Gpftf_tfVN#9({nE7 zA0Z-YJTw+V>RiwZCFA~_L!5=sK*`rN>9=5!n$S5XENUbI!zNG?1KTp_b_v#OH8nX3 zAmZb@tECM8mBM)&o+;!ZOM6phxItD(^7RjE3R*6BG&iIh=o~_A0;IU_!->Tp4AIh~ zHxrjZQ604y0$qOI2hk^n9vDF^o?1P49eM{g@}BY_n8;cy*6&Z6km>Cu`+cmOpZimuK%9!AMAyXW-@uxcGd@fBs{gx;rYu`e{A9OF>DNpfek|F8%> ze_~(KvlN}_RqsJzJ)Pi;B>YzAqbU0Nu1C`Mq^1#yG9MEiThD0 z*cw>nJ1=NrA>}d*!_I0nziYx>&wIaAwGr4-mSt~{Lrgg-n>z4j*n!v6g$3~vlyk@3 zXwhB44&%C3N?epxPxR;Q|5D+-u}+b>qZgO1BFG3_z3l@QCql};v1EuNtSZ%hn5X`h zqX<#NSngy;YV)T5_v8K>{^BT?J9_;QOOA{bGAgg}L%{rz0Xku3Z}W{4MjsFsV_Yk9 zYGRf-!z^7!ray1+5M$>|$=<+c)4;Fx8H~!CV8jx+xsn^^aY!R)BIj)!Hw+Jd`s=72 z%5v6Up&B`~(oEL9O`$E;lEV5tVSG9}Hd!=W2t3k8awU-Dc9DcjH?bf{aHHca1Yl(M z1jdOfO`F|iO?cW{y8hV56@5)$)0TmXwZYhIW*0daX=-PE0zKvz3&7xwm-+E!#gH5L zp93~x_AsMy;_ll6Q!KC(qlin%^9%lQ8r z@-9FR=!)*aE$woXoHjzf|H(W;dT1={4g1Q~tgr7YD~I-Yc-Z~LW1SLIIv#U#IH%{# zpu#XY0Q~4;7JXyoRX{8@XANR$Z)n|IS1Dn)U!9IlSS8*wJ|?jx_1&OmTW57;do*Sm zJaOMLa^9nq7nC(1XRP&PCKFaQ5SxmvP)N2W$l2mFWH%B+jAzhH>X=qM%|2{zwaqVG zj|nH1fnfRP-Oeo@wIuw-VpdvLgdAoW;wZEhFQ7R?%ESuH8gFcS{HuGZhLwrA$9)76 z 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 WDM7ahs+1Z**P^DZrBtB+5Bq