@fredlackey/devutils 0.0.18 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (447) hide show
  1. package/README.md +214 -141
  2. package/package.json +8 -83
  3. package/src/api/loader.js +229 -0
  4. package/src/api/registry.json +62 -0
  5. package/src/cli.js +293 -60
  6. package/src/commands/ai/index.js +16 -0
  7. package/src/commands/ai/launch.js +112 -0
  8. package/src/commands/ai/list.js +54 -0
  9. package/src/commands/ai/resume.js +70 -0
  10. package/src/commands/ai/sessions.js +121 -0
  11. package/src/commands/ai/set.js +131 -0
  12. package/src/commands/ai/show.js +74 -0
  13. package/src/commands/ai/tools.js +46 -0
  14. package/src/commands/alias/add.js +93 -0
  15. package/src/commands/alias/helpers.js +107 -0
  16. package/src/commands/alias/index.js +14 -0
  17. package/src/commands/alias/list.js +55 -0
  18. package/src/commands/alias/remove.js +62 -0
  19. package/src/commands/alias/sync.js +109 -0
  20. package/src/commands/api/disable.js +73 -0
  21. package/src/commands/api/enable.js +148 -0
  22. package/src/commands/api/index.js +15 -0
  23. package/src/commands/api/list.js +66 -0
  24. package/src/commands/api/update.js +87 -0
  25. package/src/commands/auth/index.js +15 -0
  26. package/src/commands/auth/list.js +49 -0
  27. package/src/commands/auth/login.js +384 -0
  28. package/src/commands/auth/logout.js +111 -0
  29. package/src/commands/auth/refresh.js +184 -0
  30. package/src/commands/auth/services.js +169 -0
  31. package/src/commands/auth/status.js +104 -0
  32. package/src/commands/config/export.js +224 -0
  33. package/src/commands/config/get.js +52 -0
  34. package/src/commands/config/import.js +308 -0
  35. package/src/commands/config/index.js +17 -0
  36. package/src/commands/config/init.js +143 -0
  37. package/src/commands/config/reset.js +57 -0
  38. package/src/commands/config/set.js +93 -0
  39. package/src/commands/config/show.js +35 -0
  40. package/src/commands/help.js +338 -0
  41. package/src/commands/identity/add.js +133 -0
  42. package/src/commands/identity/index.js +17 -0
  43. package/src/commands/identity/link.js +76 -0
  44. package/src/commands/identity/list.js +48 -0
  45. package/src/commands/identity/remove.js +72 -0
  46. package/src/commands/identity/show.js +65 -0
  47. package/src/commands/identity/sync.js +172 -0
  48. package/src/commands/identity/unlink.js +57 -0
  49. package/src/commands/ignore/add.js +165 -0
  50. package/src/commands/ignore/index.js +14 -0
  51. package/src/commands/ignore/list.js +89 -0
  52. package/src/commands/ignore/markers.js +43 -0
  53. package/src/commands/ignore/remove.js +164 -0
  54. package/src/commands/ignore/show.js +169 -0
  55. package/src/commands/machine/detect.js +122 -0
  56. package/src/commands/machine/index.js +14 -0
  57. package/src/commands/machine/list.js +74 -0
  58. package/src/commands/machine/set.js +106 -0
  59. package/src/commands/machine/show.js +35 -0
  60. package/src/commands/schema.js +152 -0
  61. package/src/commands/search/collections.js +134 -0
  62. package/src/commands/search/get.js +71 -0
  63. package/src/commands/search/index-cmd.js +54 -0
  64. package/src/commands/search/index.js +21 -0
  65. package/src/commands/search/keyword.js +60 -0
  66. package/src/commands/search/qmd.js +70 -0
  67. package/src/commands/search/query.js +64 -0
  68. package/src/commands/search/semantic.js +62 -0
  69. package/src/commands/search/status.js +46 -0
  70. package/src/commands/status.js +224 -171
  71. package/src/commands/tools/check.js +79 -0
  72. package/src/commands/tools/index.js +14 -0
  73. package/src/commands/tools/install.js +110 -0
  74. package/src/commands/tools/list.js +91 -0
  75. package/src/commands/tools/search.js +60 -0
  76. package/src/commands/update.js +83 -112
  77. package/src/commands/util/add.js +151 -0
  78. package/src/commands/util/index.js +15 -0
  79. package/src/commands/util/list.js +97 -0
  80. package/src/commands/util/remove.js +76 -0
  81. package/src/commands/util/run.js +79 -0
  82. package/src/commands/util/show.js +67 -0
  83. package/src/commands/version.js +21 -88
  84. package/src/installers/_template.js +104 -0
  85. package/src/installers/git.js +150 -0
  86. package/src/installers/homebrew.js +190 -0
  87. package/src/installers/node.js +223 -0
  88. package/src/installers/registry.json +29 -0
  89. package/src/lib/config.js +125 -0
  90. package/src/lib/detect.js +74 -0
  91. package/src/lib/errors.js +114 -0
  92. package/src/lib/github.js +315 -0
  93. package/src/lib/installer.js +225 -0
  94. package/src/lib/output.js +239 -0
  95. package/src/lib/platform.js +112 -0
  96. package/src/lib/platforms/amazon-linux.js +41 -0
  97. package/src/lib/platforms/gitbash.js +46 -0
  98. package/src/lib/platforms/macos.js +45 -0
  99. package/src/lib/platforms/raspbian.js +41 -0
  100. package/src/lib/platforms/ubuntu.js +39 -0
  101. package/src/lib/platforms/windows.js +45 -0
  102. package/src/lib/prompt.js +161 -0
  103. package/src/lib/schema.js +211 -0
  104. package/src/lib/shell.js +75 -0
  105. package/src/patterns/gitignore/claude-code.txt +25 -0
  106. package/src/patterns/gitignore/docker.txt +15 -0
  107. package/src/patterns/gitignore/go.txt +24 -0
  108. package/src/patterns/gitignore/java.txt +38 -0
  109. package/src/patterns/gitignore/jetbrains.txt +26 -0
  110. package/src/patterns/gitignore/linux.txt +18 -0
  111. package/src/patterns/gitignore/macos.txt +27 -0
  112. package/src/patterns/gitignore/node.txt +51 -0
  113. package/src/patterns/gitignore/python.txt +55 -0
  114. package/src/patterns/gitignore/rust.txt +14 -0
  115. package/src/patterns/gitignore/terraform.txt +30 -0
  116. package/src/patterns/gitignore/vscode.txt +15 -0
  117. package/src/patterns/gitignore/windows.txt +25 -0
  118. package/src/utils/clone/index.js +165 -0
  119. package/src/utils/git-push/index.js +230 -0
  120. package/src/utils/git-status/index.js +116 -0
  121. package/src/utils/git-status/unix.sh +75 -0
  122. package/src/utils/registry.json +41 -0
  123. package/bin/dev.js +0 -16
  124. package/files/README.md +0 -0
  125. package/files/claude/.claude/commands/setup-context.md +0 -3
  126. package/files/monorepos/_archive/README.md +0 -36
  127. package/files/monorepos/_legacy/README.md +0 -36
  128. package/files/monorepos/ai-docs/README.md +0 -33
  129. package/files/monorepos/apps/README.md +0 -24
  130. package/files/monorepos/docs/README.md +0 -40
  131. package/files/monorepos/packages/README.md +0 -25
  132. package/files/monorepos/research/README.md +0 -29
  133. package/files/monorepos/scripts/README.md +0 -24
  134. package/src/commands/README.md +0 -41
  135. package/src/commands/configure.js +0 -199
  136. package/src/commands/identity.js +0 -1630
  137. package/src/commands/ignore.js +0 -247
  138. package/src/commands/install.js +0 -526
  139. package/src/commands/setup.js +0 -246
  140. package/src/completion.js +0 -284
  141. package/src/constants.js +0 -45
  142. package/src/ignore/claude-code.txt +0 -10
  143. package/src/ignore/docker.txt +0 -18
  144. package/src/ignore/linux.txt +0 -23
  145. package/src/ignore/macos.txt +0 -36
  146. package/src/ignore/node.txt +0 -55
  147. package/src/ignore/terraform.txt +0 -37
  148. package/src/ignore/vscode.txt +0 -18
  149. package/src/ignore/windows.txt +0 -35
  150. package/src/index.js +0 -0
  151. package/src/installs/README.md +0 -399
  152. package/src/installs/adobe-creative-cloud.js +0 -546
  153. package/src/installs/adobe-creative-cloud.md +0 -605
  154. package/src/installs/appcleaner.js +0 -321
  155. package/src/installs/appcleaner.md +0 -699
  156. package/src/installs/apt-transport-https.js +0 -390
  157. package/src/installs/apt-transport-https.md +0 -678
  158. package/src/installs/atomicparsley.js +0 -642
  159. package/src/installs/atomicparsley.md +0 -795
  160. package/src/installs/aws-cli.js +0 -797
  161. package/src/installs/aws-cli.md +0 -727
  162. package/src/installs/balena-etcher.js +0 -710
  163. package/src/installs/balena-etcher.md +0 -761
  164. package/src/installs/bambu-studio.js +0 -1143
  165. package/src/installs/bambu-studio.md +0 -780
  166. package/src/installs/bash-completion.js +0 -575
  167. package/src/installs/bash-completion.md +0 -833
  168. package/src/installs/bash.js +0 -417
  169. package/src/installs/bash.md +0 -993
  170. package/src/installs/beyond-compare.js +0 -603
  171. package/src/installs/beyond-compare.md +0 -813
  172. package/src/installs/brave-browser.js +0 -968
  173. package/src/installs/brave-browser.md +0 -650
  174. package/src/installs/build-essential.js +0 -529
  175. package/src/installs/build-essential.md +0 -977
  176. package/src/installs/ca-certificates.js +0 -618
  177. package/src/installs/ca-certificates.md +0 -937
  178. package/src/installs/caffeine.js +0 -508
  179. package/src/installs/caffeine.md +0 -839
  180. package/src/installs/camtasia.js +0 -596
  181. package/src/installs/camtasia.md +0 -762
  182. package/src/installs/chatgpt.js +0 -476
  183. package/src/installs/chatgpt.md +0 -814
  184. package/src/installs/chocolatey.js +0 -456
  185. package/src/installs/chocolatey.md +0 -661
  186. package/src/installs/chrome-canary.js +0 -419
  187. package/src/installs/chrome-canary.md +0 -641
  188. package/src/installs/chromium.js +0 -667
  189. package/src/installs/chromium.md +0 -838
  190. package/src/installs/claude-code.js +0 -576
  191. package/src/installs/claude-code.md +0 -1173
  192. package/src/installs/cloudflare-warp.js +0 -900
  193. package/src/installs/cloudflare-warp.md +0 -1047
  194. package/src/installs/comet-browser.js +0 -588
  195. package/src/installs/comet-browser.md +0 -731
  196. package/src/installs/curl.js +0 -379
  197. package/src/installs/curl.md +0 -714
  198. package/src/installs/cursor.js +0 -579
  199. package/src/installs/cursor.md +0 -970
  200. package/src/installs/dbeaver.js +0 -924
  201. package/src/installs/dbeaver.md +0 -939
  202. package/src/installs/dbschema.js +0 -692
  203. package/src/installs/dbschema.md +0 -925
  204. package/src/installs/dependencies.md +0 -453
  205. package/src/installs/development-tools.js +0 -600
  206. package/src/installs/development-tools.md +0 -977
  207. package/src/installs/docker.js +0 -1029
  208. package/src/installs/docker.md +0 -1109
  209. package/src/installs/drawio.js +0 -1019
  210. package/src/installs/drawio.md +0 -795
  211. package/src/installs/elmedia-player.js +0 -347
  212. package/src/installs/elmedia-player.md +0 -556
  213. package/src/installs/ffmpeg.js +0 -889
  214. package/src/installs/ffmpeg.md +0 -852
  215. package/src/installs/file.js +0 -464
  216. package/src/installs/file.md +0 -987
  217. package/src/installs/gemini-cli.js +0 -811
  218. package/src/installs/gemini-cli.md +0 -1153
  219. package/src/installs/git.js +0 -400
  220. package/src/installs/git.md +0 -907
  221. package/src/installs/gitego.js +0 -949
  222. package/src/installs/gitego.md +0 -1172
  223. package/src/installs/go.js +0 -931
  224. package/src/installs/go.md +0 -958
  225. package/src/installs/google-antigravity.js +0 -913
  226. package/src/installs/google-antigravity.md +0 -1075
  227. package/src/installs/google-chrome.js +0 -833
  228. package/src/installs/google-chrome.md +0 -862
  229. package/src/installs/gpg.js +0 -480
  230. package/src/installs/gpg.md +0 -1056
  231. package/src/installs/homebrew.js +0 -1028
  232. package/src/installs/homebrew.md +0 -988
  233. package/src/installs/imageoptim.js +0 -968
  234. package/src/installs/imageoptim.md +0 -1119
  235. package/src/installs/installers.json +0 -4032
  236. package/src/installs/installers.json.tmp +0 -3953
  237. package/src/installs/jq.js +0 -400
  238. package/src/installs/jq.md +0 -809
  239. package/src/installs/keyboard-maestro.js +0 -719
  240. package/src/installs/keyboard-maestro.md +0 -825
  241. package/src/installs/kiro.js +0 -864
  242. package/src/installs/kiro.md +0 -1015
  243. package/src/installs/latex.js +0 -789
  244. package/src/installs/latex.md +0 -1095
  245. package/src/installs/lftp.js +0 -356
  246. package/src/installs/lftp.md +0 -907
  247. package/src/installs/lsb-release.js +0 -346
  248. package/src/installs/lsb-release.md +0 -814
  249. package/src/installs/messenger.js +0 -847
  250. package/src/installs/messenger.md +0 -900
  251. package/src/installs/microsoft-office.js +0 -568
  252. package/src/installs/microsoft-office.md +0 -760
  253. package/src/installs/microsoft-teams.js +0 -801
  254. package/src/installs/microsoft-teams.md +0 -886
  255. package/src/installs/moom.js +0 -326
  256. package/src/installs/moom.md +0 -570
  257. package/src/installs/node.js +0 -904
  258. package/src/installs/node.md +0 -1153
  259. package/src/installs/nordpass.js +0 -716
  260. package/src/installs/nordpass.md +0 -921
  261. package/src/installs/nordvpn.js +0 -892
  262. package/src/installs/nordvpn.md +0 -1052
  263. package/src/installs/nvm.js +0 -995
  264. package/src/installs/nvm.md +0 -1057
  265. package/src/installs/ohmyzsh.js +0 -529
  266. package/src/installs/ohmyzsh.md +0 -1094
  267. package/src/installs/openssh.js +0 -804
  268. package/src/installs/openssh.md +0 -1056
  269. package/src/installs/pandoc.js +0 -662
  270. package/src/installs/pandoc.md +0 -1036
  271. package/src/installs/parallels-desktop.js +0 -431
  272. package/src/installs/parallels-desktop.md +0 -446
  273. package/src/installs/pinentry.js +0 -510
  274. package/src/installs/pinentry.md +0 -1142
  275. package/src/installs/pngyu.js +0 -869
  276. package/src/installs/pngyu.md +0 -896
  277. package/src/installs/postman.js +0 -799
  278. package/src/installs/postman.md +0 -940
  279. package/src/installs/procps.js +0 -425
  280. package/src/installs/procps.md +0 -851
  281. package/src/installs/safari-tech-preview.js +0 -374
  282. package/src/installs/safari-tech-preview.md +0 -533
  283. package/src/installs/sfnt2woff.js +0 -658
  284. package/src/installs/sfnt2woff.md +0 -795
  285. package/src/installs/shellcheck.js +0 -481
  286. package/src/installs/shellcheck.md +0 -1005
  287. package/src/installs/slack.js +0 -741
  288. package/src/installs/slack.md +0 -865
  289. package/src/installs/snagit.js +0 -585
  290. package/src/installs/snagit.md +0 -844
  291. package/src/installs/software-properties-common.js +0 -372
  292. package/src/installs/software-properties-common.md +0 -805
  293. package/src/installs/spotify.js +0 -877
  294. package/src/installs/spotify.md +0 -901
  295. package/src/installs/studio-3t.js +0 -823
  296. package/src/installs/studio-3t.md +0 -918
  297. package/src/installs/sublime-text.js +0 -804
  298. package/src/installs/sublime-text.md +0 -914
  299. package/src/installs/superwhisper.js +0 -706
  300. package/src/installs/superwhisper.md +0 -630
  301. package/src/installs/tailscale.js +0 -745
  302. package/src/installs/tailscale.md +0 -1100
  303. package/src/installs/tar.js +0 -389
  304. package/src/installs/tar.md +0 -946
  305. package/src/installs/termius.js +0 -798
  306. package/src/installs/termius.md +0 -844
  307. package/src/installs/terraform.js +0 -779
  308. package/src/installs/terraform.md +0 -899
  309. package/src/installs/tfenv.js +0 -778
  310. package/src/installs/tfenv.md +0 -1091
  311. package/src/installs/tidal.js +0 -771
  312. package/src/installs/tidal.md +0 -864
  313. package/src/installs/tmux.js +0 -346
  314. package/src/installs/tmux.md +0 -1030
  315. package/src/installs/tree.js +0 -411
  316. package/src/installs/tree.md +0 -833
  317. package/src/installs/unzip.js +0 -460
  318. package/src/installs/unzip.md +0 -879
  319. package/src/installs/vim.js +0 -421
  320. package/src/installs/vim.md +0 -1040
  321. package/src/installs/vlc.js +0 -821
  322. package/src/installs/vlc.md +0 -927
  323. package/src/installs/vscode.js +0 -843
  324. package/src/installs/vscode.md +0 -1002
  325. package/src/installs/wget.js +0 -420
  326. package/src/installs/wget.md +0 -791
  327. package/src/installs/whatsapp.js +0 -729
  328. package/src/installs/whatsapp.md +0 -854
  329. package/src/installs/winpty.js +0 -352
  330. package/src/installs/winpty.md +0 -620
  331. package/src/installs/woff2.js +0 -553
  332. package/src/installs/woff2.md +0 -977
  333. package/src/installs/wsl.js +0 -572
  334. package/src/installs/wsl.md +0 -699
  335. package/src/installs/xcode-clt.js +0 -520
  336. package/src/installs/xcode-clt.md +0 -351
  337. package/src/installs/xcode.js +0 -560
  338. package/src/installs/xcode.md +0 -573
  339. package/src/installs/yarn.js +0 -824
  340. package/src/installs/yarn.md +0 -1074
  341. package/src/installs/yq.js +0 -654
  342. package/src/installs/yq.md +0 -944
  343. package/src/installs/yt-dlp.js +0 -701
  344. package/src/installs/yt-dlp.md +0 -946
  345. package/src/installs/yum-utils.js +0 -297
  346. package/src/installs/yum-utils.md +0 -648
  347. package/src/installs/zoom.js +0 -759
  348. package/src/installs/zoom.md +0 -884
  349. package/src/installs/zsh.js +0 -455
  350. package/src/installs/zsh.md +0 -1008
  351. package/src/scripts/README.md +0 -617
  352. package/src/scripts/STATUS.md +0 -208
  353. package/src/scripts/afk.js +0 -411
  354. package/src/scripts/backup-all.js +0 -746
  355. package/src/scripts/backup-source.js +0 -727
  356. package/src/scripts/brewd.js +0 -389
  357. package/src/scripts/brewi.js +0 -520
  358. package/src/scripts/brewr.js +0 -527
  359. package/src/scripts/brews.js +0 -477
  360. package/src/scripts/brewu.js +0 -504
  361. package/src/scripts/c.js +0 -201
  362. package/src/scripts/ccurl.js +0 -341
  363. package/src/scripts/certbot-crontab-init.js +0 -504
  364. package/src/scripts/certbot-init.js +0 -657
  365. package/src/scripts/ch.js +0 -355
  366. package/src/scripts/claude-danger.js +0 -268
  367. package/src/scripts/clean-dev.js +0 -435
  368. package/src/scripts/clear-dns-cache.js +0 -541
  369. package/src/scripts/clone.js +0 -435
  370. package/src/scripts/code-all.js +0 -437
  371. package/src/scripts/count-files.js +0 -211
  372. package/src/scripts/count-folders.js +0 -211
  373. package/src/scripts/count.js +0 -264
  374. package/src/scripts/d.js +0 -219
  375. package/src/scripts/datauri.js +0 -389
  376. package/src/scripts/delete-files.js +0 -380
  377. package/src/scripts/docker-clean.js +0 -426
  378. package/src/scripts/dp.js +0 -442
  379. package/src/scripts/e.js +0 -390
  380. package/src/scripts/empty-trash.js +0 -513
  381. package/src/scripts/evm.js +0 -444
  382. package/src/scripts/fetch-github-repos.js +0 -456
  383. package/src/scripts/get-channel.js +0 -345
  384. package/src/scripts/get-course.js +0 -399
  385. package/src/scripts/get-dependencies.js +0 -306
  386. package/src/scripts/get-folder.js +0 -799
  387. package/src/scripts/get-tunes.js +0 -426
  388. package/src/scripts/get-video.js +0 -367
  389. package/src/scripts/git-backup.js +0 -577
  390. package/src/scripts/git-clone.js +0 -493
  391. package/src/scripts/git-pup.js +0 -319
  392. package/src/scripts/git-push.js +0 -396
  393. package/src/scripts/h.js +0 -622
  394. package/src/scripts/hide-desktop-icons.js +0 -499
  395. package/src/scripts/hide-hidden-files.js +0 -538
  396. package/src/scripts/install-dependencies-from.js +0 -456
  397. package/src/scripts/ips.js +0 -663
  398. package/src/scripts/iso.js +0 -370
  399. package/src/scripts/killni.js +0 -577
  400. package/src/scripts/ll.js +0 -467
  401. package/src/scripts/local-ip.js +0 -325
  402. package/src/scripts/m.js +0 -524
  403. package/src/scripts/map.js +0 -309
  404. package/src/scripts/mkd.js +0 -351
  405. package/src/scripts/ncu-update-all.js +0 -457
  406. package/src/scripts/nginx-init.js +0 -718
  407. package/src/scripts/npmi.js +0 -382
  408. package/src/scripts/o.js +0 -511
  409. package/src/scripts/org-by-date.js +0 -338
  410. package/src/scripts/p.js +0 -224
  411. package/src/scripts/packages.js +0 -330
  412. package/src/scripts/path.js +0 -225
  413. package/src/scripts/ports.js +0 -597
  414. package/src/scripts/q.js +0 -305
  415. package/src/scripts/refresh-files.js +0 -394
  416. package/src/scripts/remove-smaller-files.js +0 -516
  417. package/src/scripts/rename-files-with-date.js +0 -533
  418. package/src/scripts/resize-image.js +0 -539
  419. package/src/scripts/rm-safe.js +0 -669
  420. package/src/scripts/s.js +0 -540
  421. package/src/scripts/set-git-public.js +0 -365
  422. package/src/scripts/show-desktop-icons.js +0 -475
  423. package/src/scripts/show-hidden-files.js +0 -472
  424. package/src/scripts/tpa.js +0 -280
  425. package/src/scripts/tpo.js +0 -280
  426. package/src/scripts/u.js +0 -505
  427. package/src/scripts/vpush.js +0 -437
  428. package/src/scripts/y.js +0 -283
  429. package/src/utils/README.md +0 -95
  430. package/src/utils/common/apps.js +0 -143
  431. package/src/utils/common/display.js +0 -157
  432. package/src/utils/common/network.js +0 -185
  433. package/src/utils/common/os.js +0 -294
  434. package/src/utils/common/package-manager.js +0 -301
  435. package/src/utils/common/privileges.js +0 -138
  436. package/src/utils/common/shell.js +0 -261
  437. package/src/utils/macos/apps.js +0 -228
  438. package/src/utils/macos/brew.js +0 -315
  439. package/src/utils/ubuntu/apt.js +0 -307
  440. package/src/utils/ubuntu/desktop.js +0 -292
  441. package/src/utils/ubuntu/snap.js +0 -344
  442. package/src/utils/ubuntu/systemd.js +0 -286
  443. package/src/utils/windows/choco.js +0 -465
  444. package/src/utils/windows/env.js +0 -246
  445. package/src/utils/windows/registry.js +0 -269
  446. package/src/utils/windows/shell.js +0 -240
  447. package/src/utils/windows/winget.js +0 -489
@@ -1,937 +0,0 @@
1
- # Installing CA Certificates
2
-
3
- ## Overview
4
-
5
- CA certificates (Certificate Authority certificates) are digital certificates that establish a chain of trust for SSL/TLS connections. They are used by web browsers, command-line tools like cURL and wget, programming languages, and other applications to verify that secure connections to remote servers are legitimate and not being intercepted by malicious actors.
6
-
7
- When you connect to a website using HTTPS, your system checks the server's SSL certificate against its collection of trusted CA certificates. If the server's certificate was issued by a trusted CA (or a chain leading back to one), the connection is considered secure.
8
-
9
- CA certificates are essential for:
10
- - Secure web browsing (HTTPS)
11
- - Package manager operations (downloading from secure repositories)
12
- - API calls from applications
13
- - Git operations over HTTPS
14
- - Email encryption (TLS)
15
- - VPN connections
16
-
17
- ## Dependencies
18
-
19
- ### macOS (Homebrew)
20
- - **Required:** Homebrew - Install via `/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"` or run `dev install homebrew`
21
- - **Optional:** None
22
- - **Auto-installed:** None (macOS uses the system Keychain for CA certificates; Homebrew package provides Mozilla CA bundle for command-line tools)
23
-
24
- ### Ubuntu (APT/Snap)
25
- - **Required:** None (APT is built into Ubuntu/Debian)
26
- - **Optional:** None
27
- - **Auto-installed:** OpenSSL (installed automatically by APT as a dependency)
28
-
29
- ### Raspberry Pi OS (APT/Snap)
30
- - **Required:** None (APT is built into Raspberry Pi OS)
31
- - **Optional:** None
32
- - **Auto-installed:** OpenSSL (installed automatically by APT as a dependency)
33
-
34
- ### Amazon Linux (DNF/YUM)
35
- - **Required:** None (DNF/YUM is built into Amazon Linux)
36
- - **Optional:** None
37
- - **Auto-installed:** p11-kit-trust, OpenSSL (installed automatically by DNF/YUM as dependencies)
38
-
39
- ### Windows (Chocolatey/winget)
40
- - **Required:** None (Windows manages CA certificates through the Windows Certificate Store, which is built into the operating system)
41
- - **Optional:** None
42
- - **Auto-installed:** None (Windows Update automatically maintains root CA certificates)
43
-
44
- ### Git Bash (Manual/Portable)
45
- - **Required:** Git for Windows - Download from https://git-scm.com/download/win or install via `choco install git -y`
46
- - **Optional:** None
47
- - **Auto-installed:** None (Git for Windows includes its own CA certificate bundle for Git and cURL operations)
48
-
49
- ## Prerequisites
50
-
51
- Before managing CA certificates on any platform, ensure:
52
-
53
- 1. **Internet connectivity** - Required to download packages and certificate updates
54
- 2. **Administrative privileges** - Required on all platforms for system-wide certificate store modifications
55
- 3. **Understanding of security implications** - Adding untrusted CA certificates can compromise system security
56
-
57
- **Important Security Note**: Only add CA certificates from sources you explicitly trust. Adding a malicious CA certificate to your system's trust store allows attackers to intercept all your encrypted traffic (man-in-the-middle attacks).
58
-
59
- ## Platform-Specific Installation
60
-
61
- ### macOS (Homebrew)
62
-
63
- #### Prerequisites
64
-
65
- - macOS 10.15 (Catalina) or later (macOS 14 Sonoma+ recommended)
66
- - Homebrew package manager installed
67
- - Terminal access
68
-
69
- macOS maintains CA certificates in two locations:
70
- 1. **System Keychain** - Used by Safari, native macOS applications, and system services
71
- 2. **Homebrew ca-certificates** - Used by Homebrew-installed tools like cURL, OpenSSL, and Python
72
-
73
- If Homebrew is not installed, install it first:
74
-
75
- ```bash
76
- /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
77
- ```
78
-
79
- #### Installation Steps
80
-
81
- Run the following command to install the Mozilla CA certificate bundle via Homebrew:
82
-
83
- ```bash
84
- brew install --quiet ca-certificates
85
- ```
86
-
87
- The `--quiet` flag suppresses non-essential output, making the command suitable for automation scripts.
88
-
89
- After installation, Homebrew-installed tools automatically use this certificate bundle. The certificate bundle is sourced from Mozilla (via https://curl.se/docs/caextract.html) and is regularly updated.
90
-
91
- #### Verification
92
-
93
- Confirm the installation succeeded:
94
-
95
- ```bash
96
- brew list ca-certificates
97
- ```
98
-
99
- Expected output (file list showing certificate locations):
100
-
101
- ```
102
- /opt/homebrew/Cellar/ca-certificates/2024-11-26/share/ca-certificates/cacert.pem
103
- ```
104
-
105
- Verify SSL connections work with the updated certificates:
106
-
107
- ```bash
108
- curl -s -o /dev/null -w "%{http_code}" https://www.google.com
109
- ```
110
-
111
- Expected output: `200`
112
-
113
- Check the certificate file location:
114
-
115
- ```bash
116
- brew --prefix ca-certificates
117
- ```
118
-
119
- Expected output: `/opt/homebrew/opt/ca-certificates` (Apple Silicon) or `/usr/local/opt/ca-certificates` (Intel).
120
-
121
- #### Troubleshooting
122
-
123
- **Problem**: SSL errors persist after installing ca-certificates
124
-
125
- **Solution**: Run the post-install script to regenerate certificate symlinks:
126
-
127
- ```bash
128
- brew postinstall ca-certificates
129
- ```
130
-
131
- **Problem**: Homebrew tools still report certificate errors in corporate environments with SSL inspection
132
-
133
- **Solution**: Your organization uses a proxy that intercepts SSL traffic. You need to add your organization's CA certificate to the Homebrew trust store:
134
-
135
- ```bash
136
- # Export your organization's CA certificate from Keychain Access as a .pem file
137
- # Then add it to Homebrew's certificate bundle
138
- cat /path/to/corporate-ca.pem >> "$(brew --prefix)/etc/ca-certificates/cert.pem"
139
- brew postinstall ca-certificates
140
- ```
141
-
142
- **Problem**: System tools (Safari, Mail) show certificate errors
143
-
144
- **Solution**: System applications use the macOS Keychain, not Homebrew's ca-certificates. Use Keychain Access to manage system-wide certificates, or install certificates via command line:
145
-
146
- ```bash
147
- sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain /path/to/certificate.crt
148
- ```
149
-
150
- ---
151
-
152
- ### Ubuntu/Debian (APT)
153
-
154
- #### Prerequisites
155
-
156
- - Ubuntu 18.04 LTS or later, or Debian 10 (Buster) or later
157
- - sudo privileges
158
- - Internet connectivity
159
-
160
- The `ca-certificates` package is typically pre-installed on Ubuntu and Debian systems. The steps below ensure it is installed and up to date.
161
-
162
- #### Installation Steps
163
-
164
- Run the following commands to update package lists and install/update the CA certificates package:
165
-
166
- ```bash
167
- sudo DEBIAN_FRONTEND=noninteractive apt-get update -y && sudo DEBIAN_FRONTEND=noninteractive apt-get install -y ca-certificates
168
- ```
169
-
170
- The `DEBIAN_FRONTEND=noninteractive` environment variable and `-y` flag ensure fully automated installation without prompts.
171
-
172
- After installing or updating the package, regenerate the certificate bundle:
173
-
174
- ```bash
175
- sudo update-ca-certificates
176
- ```
177
-
178
- This command:
179
- 1. Reads certificate configuration from `/etc/ca-certificates.conf`
180
- 2. Processes certificates from `/usr/share/ca-certificates/` and `/usr/local/share/ca-certificates/`
181
- 3. Generates the unified bundle at `/etc/ssl/certs/ca-certificates.crt`
182
- 4. Creates individual certificate symlinks in `/etc/ssl/certs/`
183
-
184
- #### Verification
185
-
186
- Confirm the package is installed:
187
-
188
- ```bash
189
- dpkg -l | grep ca-certificates
190
- ```
191
-
192
- Expected output (version numbers may vary):
193
-
194
- ```
195
- ii ca-certificates 20230311ubuntu0.22.04.1 all Common CA certificates
196
- ```
197
-
198
- Verify the certificate bundle exists:
199
-
200
- ```bash
201
- ls -la /etc/ssl/certs/ca-certificates.crt
202
- ```
203
-
204
- Test SSL connectivity:
205
-
206
- ```bash
207
- curl -s -o /dev/null -w "%{http_code}" https://www.google.com
208
- ```
209
-
210
- Expected output: `200`
211
-
212
- #### Troubleshooting
213
-
214
- **Problem**: `E: Unable to locate package ca-certificates`
215
-
216
- **Solution**: Update the package list first:
217
-
218
- ```bash
219
- sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
220
- ```
221
-
222
- **Problem**: SSL errors after fresh install with message about `/etc/ssl/certs/ca-certificates.crt`
223
-
224
- **Solution**: The certificate bundle may not have been generated. Run:
225
-
226
- ```bash
227
- sudo update-ca-certificates --fresh
228
- ```
229
-
230
- The `--fresh` flag removes existing symlinks and regenerates everything from scratch.
231
-
232
- **Problem**: Custom/corporate CA certificate not being recognized
233
-
234
- **Solution**: Ensure the certificate:
235
- 1. Has a `.crt` extension (required)
236
- 2. Is in PEM format (text format starting with `-----BEGIN CERTIFICATE-----`)
237
- 3. Is placed in `/usr/local/share/ca-certificates/`
238
-
239
- Then run:
240
-
241
- ```bash
242
- sudo update-ca-certificates
243
- ```
244
-
245
- **Problem**: Need to convert DER format certificate to PEM
246
-
247
- **Solution**: Use OpenSSL to convert:
248
-
249
- ```bash
250
- sudo openssl x509 -inform der -outform pem -in certificate.der -out /usr/local/share/ca-certificates/certificate.crt
251
- sudo update-ca-certificates
252
- ```
253
-
254
- ---
255
-
256
- ### Raspberry Pi OS (APT)
257
-
258
- #### Prerequisites
259
-
260
- - Raspberry Pi OS (32-bit or 64-bit)
261
- - Raspberry Pi 2 or later (Raspberry Pi 3B+ or later recommended for 64-bit)
262
- - sudo privileges
263
- - Internet connectivity
264
-
265
- Raspberry Pi OS is based on Debian, so CA certificates management follows the same process as Ubuntu/Debian. The `ca-certificates` package is typically pre-installed.
266
-
267
- #### Installation Steps
268
-
269
- Run the following commands to update package lists and install/update the CA certificates package:
270
-
271
- ```bash
272
- sudo DEBIAN_FRONTEND=noninteractive apt-get update -y && sudo DEBIAN_FRONTEND=noninteractive apt-get install -y ca-certificates
273
- ```
274
-
275
- The `DEBIAN_FRONTEND=noninteractive` environment variable and `-y` flag ensure fully automated installation without prompts.
276
-
277
- After installing or updating the package, regenerate the certificate bundle:
278
-
279
- ```bash
280
- sudo update-ca-certificates
281
- ```
282
-
283
- **ARM Architecture Note**: The ca-certificates package is architecture-independent (it contains only certificate data files, no compiled binaries), so there is no difference between ARM and x86 installations.
284
-
285
- #### Verification
286
-
287
- Confirm the package is installed:
288
-
289
- ```bash
290
- dpkg -l | grep ca-certificates
291
- ```
292
-
293
- Expected output (version numbers may vary):
294
-
295
- ```
296
- ii ca-certificates 20230311 all Common CA certificates
297
- ```
298
-
299
- Verify the certificate bundle exists and check its size:
300
-
301
- ```bash
302
- ls -la /etc/ssl/certs/ca-certificates.crt
303
- ```
304
-
305
- Expected output shows a file of approximately 200-250KB containing all trusted CA certificates.
306
-
307
- Test SSL connectivity:
308
-
309
- ```bash
310
- curl -s -o /dev/null -w "%{http_code}" https://www.google.com
311
- ```
312
-
313
- Expected output: `200`
314
-
315
- #### Troubleshooting
316
-
317
- **Problem**: `apt-get update` fails with 404 errors
318
-
319
- **Solution**: Package mirrors may be outdated. Use the `--fix-missing` flag:
320
-
321
- ```bash
322
- sudo apt-get update --fix-missing && sudo DEBIAN_FRONTEND=noninteractive apt-get install -y ca-certificates
323
- ```
324
-
325
- **Problem**: `server certificate verification failed` errors
326
-
327
- **Solution**: The CA certificate bundle may be outdated or corrupted. Reinstall and regenerate:
328
-
329
- ```bash
330
- sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --reinstall ca-certificates
331
- sudo update-ca-certificates --fresh
332
- ```
333
-
334
- **Problem**: Slow download speeds during installation
335
-
336
- **Solution**: Raspberry Pi may have limited bandwidth, especially over WiFi. Use a wired Ethernet connection if available, or wait for the installation to complete.
337
-
338
- **Problem**: Disk space errors during installation
339
-
340
- **Solution**: Check available space and clean up:
341
-
342
- ```bash
343
- df -h
344
- sudo DEBIAN_FRONTEND=noninteractive apt-get autoremove -y
345
- sudo DEBIAN_FRONTEND=noninteractive apt-get clean
346
- ```
347
-
348
- ---
349
-
350
- ### Amazon Linux/RHEL (DNF/YUM)
351
-
352
- #### Prerequisites
353
-
354
- - Amazon Linux 2023 (AL2023) or Amazon Linux 2 (AL2)
355
- - sudo privileges
356
- - Internet connectivity
357
-
358
- The `ca-certificates` package is pre-installed on all Amazon Linux versions. Amazon Linux 2023 uses `dnf` as the package manager, while Amazon Linux 2 uses `yum`.
359
-
360
- **Note**: Unlike Debian-based systems that use `update-ca-certificates`, Red Hat-based systems (including Amazon Linux) use `update-ca-trust` to manage the certificate trust store.
361
-
362
- #### Installation Steps
363
-
364
- **For Amazon Linux 2023:**
365
-
366
- Run the following command to ensure ca-certificates is installed and up to date:
367
-
368
- ```bash
369
- sudo dnf install -y ca-certificates && sudo update-ca-trust
370
- ```
371
-
372
- **For Amazon Linux 2:**
373
-
374
- Run the following command to ensure ca-certificates is installed and up to date:
375
-
376
- ```bash
377
- sudo yum install -y ca-certificates && sudo update-ca-trust
378
- ```
379
-
380
- The `-y` flag automatically confirms installation prompts, enabling non-interactive execution.
381
-
382
- The `update-ca-trust` command:
383
- 1. Reads certificates from `/etc/pki/ca-trust/source/anchors/` and `/usr/share/pki/ca-trust-source/`
384
- 2. Generates the unified bundle at `/etc/pki/tls/certs/ca-bundle.crt`
385
- 3. Updates OpenSSL-compatible certificate directory at `/etc/pki/tls/certs/`
386
-
387
- #### Verification
388
-
389
- Confirm the package is installed:
390
-
391
- ```bash
392
- rpm -q ca-certificates
393
- ```
394
-
395
- Expected output (version numbers may vary):
396
-
397
- ```
398
- ca-certificates-2023.2.60_v7.0.306-1.0.amzn2023.0.1.noarch
399
- ```
400
-
401
- Verify the certificate bundle exists:
402
-
403
- ```bash
404
- ls -la /etc/pki/tls/certs/ca-bundle.crt
405
- ```
406
-
407
- Test SSL connectivity:
408
-
409
- ```bash
410
- curl -s -o /dev/null -w "%{http_code}" https://www.google.com
411
- ```
412
-
413
- Expected output: `200`
414
-
415
- #### Troubleshooting
416
-
417
- **Problem**: Custom CA certificate not being recognized
418
-
419
- **Solution**: Ensure the certificate is placed in the correct location and update the trust store:
420
-
421
- ```bash
422
- sudo cp /path/to/custom-ca.crt /etc/pki/ca-trust/source/anchors/
423
- sudo update-ca-trust
424
- ```
425
-
426
- **Problem**: `update-ca-trust: command not found`
427
-
428
- **Solution**: The `p11-kit-trust` package may be missing. Install it:
429
-
430
- ```bash
431
- # Amazon Linux 2023
432
- sudo dnf install -y p11-kit-trust
433
-
434
- # Amazon Linux 2
435
- sudo yum install -y p11-kit-trust
436
- ```
437
-
438
- **Problem**: SSL errors with Let's Encrypt certificates
439
-
440
- **Solution**: Older Amazon Linux instances may have outdated CA certificates that don't include newer Let's Encrypt root certificates. Update the package:
441
-
442
- ```bash
443
- # Amazon Linux 2023
444
- sudo dnf update -y ca-certificates
445
-
446
- # Amazon Linux 2
447
- sudo yum update -y ca-certificates
448
- ```
449
-
450
- **Problem**: `dnf: command not found` on Amazon Linux 2
451
-
452
- **Solution**: Amazon Linux 2 uses `yum` instead of `dnf`. Use `yum` for all package operations:
453
-
454
- ```bash
455
- sudo yum install -y ca-certificates
456
- ```
457
-
458
- ---
459
-
460
- ### Windows (Chocolatey/winget)
461
-
462
- #### Prerequisites
463
-
464
- - Windows 10 or Windows 11
465
- - Administrator PowerShell or Command Prompt
466
- - Internet connectivity
467
-
468
- **Important**: Windows handles CA certificates differently from Linux and macOS. There is no "ca-certificates" package to install. Instead, Windows maintains a Certificate Trust List (CTL) that is automatically updated through Windows Update.
469
-
470
- Windows stores certificates in the Windows Certificate Store, accessible via:
471
- - Certificate Manager (`certmgr.msc`) for current user certificates
472
- - Certificate Manager (`certlm.msc`) for local machine certificates
473
- - `certutil` command-line tool
474
- - PowerShell certificate provider
475
-
476
- #### Installation Steps
477
-
478
- Windows automatically updates root CA certificates through Windows Update. To manually trigger an update or verify the certificate store is current, run the following commands in an Administrator PowerShell:
479
-
480
- ```powershell
481
- # Download the latest root certificate list from Microsoft
482
- certutil -generateSSTFromWU C:\Windows\Temp\roots.sst
483
-
484
- # Import the certificates to the Trusted Root store
485
- certutil -addstore -f Root C:\Windows\Temp\roots.sst
486
-
487
- # Clean up the temporary file
488
- Remove-Item C:\Windows\Temp\roots.sst -Force
489
- ```
490
-
491
- This downloads the current Certificate Trust List from Microsoft's Windows Update servers and imports all root certificates into the local machine's Trusted Root Certification Authorities store.
492
-
493
- **Note**: These commands must be run in an Administrator PowerShell window. Right-click PowerShell and select "Run as administrator".
494
-
495
- #### Verification
496
-
497
- Verify the root certificate store contains certificates:
498
-
499
- ```powershell
500
- # Count certificates in the Trusted Root store
501
- (Get-ChildItem Cert:\LocalMachine\Root).Count
502
- ```
503
-
504
- Expected output: A number greater than 100 (typically 150-300 certificates).
505
-
506
- Check the last sync time for automatic certificate updates:
507
-
508
- ```powershell
509
- certutil -verifyctl AuthRoot | Select-String "LastSyncTime"
510
- ```
511
-
512
- Test SSL connectivity (use `curl.exe` to avoid PowerShell alias):
513
-
514
- ```powershell
515
- curl.exe -s -o NUL -w "%{http_code}" https://www.google.com
516
- ```
517
-
518
- Expected output: `200`
519
-
520
- List certificates expiring within 60 days:
521
-
522
- ```powershell
523
- Get-ChildItem Cert:\LocalMachine\Root | Where-Object { $_.NotAfter -lt (Get-Date).AddDays(60) } | Select-Object Subject, NotAfter
524
- ```
525
-
526
- #### Troubleshooting
527
-
528
- **Problem**: Certificate updates fail with "Unable to connect to Windows Update"
529
-
530
- **Solution**: The server may not have internet access or Windows Update is blocked. Download the certificates from a machine with access and import manually:
531
-
532
- ```powershell
533
- # On a machine with internet access:
534
- certutil -generateSSTFromWU roots.sst
535
-
536
- # Copy roots.sst to the target machine, then:
537
- certutil -addstore -f Root C:\path\to\roots.sst
538
- ```
539
-
540
- **Problem**: Automatic root certificate updates are disabled
541
-
542
- **Solution**: Check the registry setting and enable automatic updates:
543
-
544
- ```powershell
545
- # Check if auto-update is disabled
546
- Get-ItemProperty -Path 'HKLM:\Software\Policies\Microsoft\SystemCertificates\AuthRoot' -Name DisableRootAutoUpdate -ErrorAction SilentlyContinue
547
-
548
- # If DisableRootAutoUpdate is 1, remove it to enable auto-updates
549
- Remove-ItemProperty -Path 'HKLM:\Software\Policies\Microsoft\SystemCertificates\AuthRoot' -Name DisableRootAutoUpdate -ErrorAction SilentlyContinue
550
- ```
551
-
552
- **Problem**: Application still reports certificate errors after update
553
-
554
- **Solution**: Some applications (Firefox, Java) maintain their own certificate stores. You need to add certificates to those application-specific stores separately.
555
-
556
- **Problem**: Need to add a custom/corporate CA certificate
557
-
558
- **Solution**: Import the certificate to the Trusted Root store:
559
-
560
- ```powershell
561
- certutil -addstore -f Root C:\path\to\corporate-ca.crt
562
- ```
563
-
564
- Or using PowerShell:
565
-
566
- ```powershell
567
- Import-Certificate -FilePath C:\path\to\corporate-ca.crt -CertStoreLocation Cert:\LocalMachine\Root
568
- ```
569
-
570
- ---
571
-
572
- ### WSL (Ubuntu)
573
-
574
- #### Prerequisites
575
-
576
- - Windows 10 version 2004+ or Windows 11
577
- - Windows Subsystem for Linux (WSL) with Ubuntu installed
578
- - WSL 2 recommended for best performance
579
- - sudo privileges within WSL
580
-
581
- WSL Ubuntu installations follow the same process as native Ubuntu, using APT. The certificate store is separate from the Windows host.
582
-
583
- #### Installation Steps
584
-
585
- Open your WSL Ubuntu terminal and run:
586
-
587
- ```bash
588
- sudo DEBIAN_FRONTEND=noninteractive apt-get update -y && sudo DEBIAN_FRONTEND=noninteractive apt-get install -y ca-certificates && sudo update-ca-certificates
589
- ```
590
-
591
- The `DEBIAN_FRONTEND=noninteractive` environment variable and `-y` flag ensure fully automated installation without prompts.
592
-
593
- #### Verification
594
-
595
- Confirm the package is installed:
596
-
597
- ```bash
598
- dpkg -l | grep ca-certificates
599
- ```
600
-
601
- Expected output (version numbers may vary):
602
-
603
- ```
604
- ii ca-certificates 20230311ubuntu0.22.04.1 all Common CA certificates
605
- ```
606
-
607
- Verify the certificate bundle exists:
608
-
609
- ```bash
610
- ls -la /etc/ssl/certs/ca-certificates.crt
611
- ```
612
-
613
- Test SSL connectivity:
614
-
615
- ```bash
616
- curl -s -o /dev/null -w "%{http_code}" https://www.google.com
617
- ```
618
-
619
- Expected output: `200`
620
-
621
- #### Troubleshooting
622
-
623
- **Problem**: `E: Unable to locate package ca-certificates`
624
-
625
- **Solution**: Update the package list first:
626
-
627
- ```bash
628
- sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
629
- ```
630
-
631
- **Problem**: SSL errors in WSL but not in Windows
632
-
633
- **Solution**: WSL has its own certificate store separate from Windows. Certificates added to Windows Certificate Store are not automatically available in WSL. Add certificates to the WSL store:
634
-
635
- ```bash
636
- sudo cp /path/to/certificate.crt /usr/local/share/ca-certificates/
637
- sudo update-ca-certificates
638
- ```
639
-
640
- **Problem**: WSL cannot resolve DNS or reach package repositories
641
-
642
- **Solution**: WSL may have DNS resolution issues. Try restarting WSL:
643
-
644
- ```powershell
645
- # From Windows PowerShell (not WSL)
646
- wsl --shutdown
647
- wsl
648
- ```
649
-
650
- If DNS issues persist, manually configure DNS in WSL:
651
-
652
- ```bash
653
- echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf > /dev/null
654
- ```
655
-
656
- **Problem**: Corporate proxy SSL interception causes certificate errors
657
-
658
- **Solution**: Export your corporate CA certificate from Windows and add it to WSL:
659
-
660
- ```powershell
661
- # From Windows PowerShell - export certificate to file
662
- certutil -store -user Root "Corporate CA Name" C:\temp\corporate-ca.cer
663
- ```
664
-
665
- ```bash
666
- # From WSL - convert and install
667
- openssl x509 -inform der -in /mnt/c/temp/corporate-ca.cer -out /tmp/corporate-ca.crt
668
- sudo cp /tmp/corporate-ca.crt /usr/local/share/ca-certificates/
669
- sudo update-ca-certificates
670
- ```
671
-
672
- ---
673
-
674
- ### Git Bash (Windows)
675
-
676
- #### Prerequisites
677
-
678
- - Windows 10 or Windows 11
679
- - Git for Windows installed (includes Git Bash)
680
-
681
- Git for Windows includes its own CA certificate bundle that is used by Git and the bundled cURL. This bundle is separate from both the Windows Certificate Store and any WSL certificate stores.
682
-
683
- #### Installation Steps
684
-
685
- Git for Windows automatically includes and manages its CA certificate bundle. No separate installation is required.
686
-
687
- To update Git for Windows (and its certificate bundle) via Chocolatey:
688
-
689
- ```powershell
690
- choco upgrade git -y
691
- ```
692
-
693
- The CA certificate bundle is located at:
694
- - `C:\Program Files\Git\mingw64\etc\ssl\certs\ca-bundle.crt` (Git commands)
695
- - `C:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crt` (cURL/OpenSSL)
696
-
697
- To manually update just the CA bundle without upgrading Git, download the latest bundle from Mozilla:
698
-
699
- ```bash
700
- # Run in Git Bash
701
- curl -o /mingw64/etc/ssl/certs/ca-bundle.crt https://curl.se/ca/cacert.pem
702
- ```
703
-
704
- **Note**: The above command requires running Git Bash as Administrator if Git is installed in Program Files.
705
-
706
- #### Verification
707
-
708
- Open Git Bash and verify the certificate bundle exists:
709
-
710
- ```bash
711
- ls -la /mingw64/etc/ssl/certs/ca-bundle.crt
712
- ```
713
-
714
- Expected output: A file of approximately 200-250KB.
715
-
716
- Test SSL connectivity:
717
-
718
- ```bash
719
- curl -s -o /dev/null -w "%{http_code}" https://www.google.com
720
- ```
721
-
722
- Expected output: `200`
723
-
724
- Test Git can connect to HTTPS remotes:
725
-
726
- ```bash
727
- git ls-remote https://github.com/git/git.git HEAD
728
- ```
729
-
730
- Expected output: SHA hash followed by `HEAD`.
731
-
732
- #### Troubleshooting
733
-
734
- **Problem**: `SSL certificate problem: unable to get local issuer certificate`
735
-
736
- **Solution**: The CA bundle may be outdated or missing. Update it:
737
-
738
- ```bash
739
- # Download latest CA bundle
740
- curl -o /tmp/cacert.pem https://curl.se/ca/cacert.pem
741
-
742
- # Copy to Git's SSL directory (run Git Bash as Administrator)
743
- cp /tmp/cacert.pem /mingw64/etc/ssl/certs/ca-bundle.crt
744
- ```
745
-
746
- **Problem**: Corporate proxy SSL interception causes Git errors
747
-
748
- **Solution**: Add your corporate CA certificate to Git's bundle:
749
-
750
- ```bash
751
- # Append corporate CA to the bundle (run as Administrator)
752
- cat /path/to/corporate-ca.pem >> /mingw64/etc/ssl/certs/ca-bundle.crt
753
- ```
754
-
755
- Or configure Git to use a custom CA bundle:
756
-
757
- ```bash
758
- git config --global http.sslCAInfo /path/to/custom-ca-bundle.crt
759
- ```
760
-
761
- **Problem**: Want Git Bash to use Windows Certificate Store instead of its own bundle
762
-
763
- **Solution**: Configure Git to use the Windows SChannel backend:
764
-
765
- ```bash
766
- git config --global http.sslBackend schannel
767
- ```
768
-
769
- This tells Git to use the Windows Certificate Store, which is automatically updated through Windows Update.
770
-
771
- **Problem**: cURL in Git Bash has SSL errors but Git works fine
772
-
773
- **Solution**: Git and cURL may use different SSL configurations. Ensure cURL uses the correct CA bundle:
774
-
775
- ```bash
776
- export CURL_CA_BUNDLE=/mingw64/etc/ssl/certs/ca-bundle.crt
777
- ```
778
-
779
- Add this to your `~/.bashrc` for persistence:
780
-
781
- ```bash
782
- echo 'export CURL_CA_BUNDLE=/mingw64/etc/ssl/certs/ca-bundle.crt' >> ~/.bashrc
783
- ```
784
-
785
- ---
786
-
787
- ## Post-Installation Configuration
788
-
789
- ### Adding Custom CA Certificates
790
-
791
- Organizations often need to add custom CA certificates for internal services, corporate proxies, or development environments.
792
-
793
- **Linux (Ubuntu/Debian/Raspberry Pi OS):**
794
-
795
- ```bash
796
- # Copy certificate (must have .crt extension and be in PEM format)
797
- sudo cp /path/to/custom-ca.crt /usr/local/share/ca-certificates/
798
-
799
- # Update the trust store
800
- sudo update-ca-certificates
801
- ```
802
-
803
- **Linux (Amazon Linux/RHEL):**
804
-
805
- ```bash
806
- # Copy certificate to anchors directory
807
- sudo cp /path/to/custom-ca.crt /etc/pki/ca-trust/source/anchors/
808
-
809
- # Update the trust store
810
- sudo update-ca-trust
811
- ```
812
-
813
- **macOS:**
814
-
815
- ```bash
816
- # Add to system keychain (requires admin password)
817
- sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain /path/to/custom-ca.crt
818
-
819
- # For Homebrew tools, also add to the Homebrew bundle
820
- cat /path/to/custom-ca.crt >> "$(brew --prefix)/etc/ca-certificates/cert.pem"
821
- brew postinstall ca-certificates
822
- ```
823
-
824
- **Windows:**
825
-
826
- ```powershell
827
- # Import to Trusted Root store (run as Administrator)
828
- Import-Certificate -FilePath C:\path\to\custom-ca.crt -CertStoreLocation Cert:\LocalMachine\Root
829
- ```
830
-
831
- ### Verifying SSL Connections
832
-
833
- Test that SSL connections work correctly after modifying certificates:
834
-
835
- ```bash
836
- # Linux/macOS/Git Bash
837
- curl -v https://your-internal-server.example.com 2>&1 | grep "SSL certificate verify ok"
838
-
839
- # Windows PowerShell
840
- curl.exe -v https://your-internal-server.example.com 2>&1 | Select-String "SSL certificate verify ok"
841
- ```
842
-
843
- ---
844
-
845
- ## Common Issues
846
-
847
- ### Issue: SSL Certificate Errors After System Update
848
-
849
- **Symptoms**: Applications that previously worked start showing certificate errors.
850
-
851
- **Solution**: The certificate bundle may have been overwritten during update. Regenerate it:
852
-
853
- ```bash
854
- # Ubuntu/Debian/Raspberry Pi OS
855
- sudo update-ca-certificates --fresh
856
-
857
- # Amazon Linux/RHEL
858
- sudo update-ca-trust
859
-
860
- # macOS
861
- brew postinstall ca-certificates
862
- ```
863
-
864
- ### Issue: Application-Specific Certificate Stores
865
-
866
- **Symptoms**: System tools work but specific applications (Firefox, Java, Node.js) show certificate errors.
867
-
868
- **Solution**: Some applications maintain their own certificate stores:
869
-
870
- - **Firefox/Thunderbird**: Use `certutil` from NSS tools or the browser's certificate manager
871
- - **Java**: Use `keytool` to add certificates to the Java truststore
872
- - **Node.js**: Set `NODE_EXTRA_CA_CERTS` environment variable
873
- - **Python**: May need `REQUESTS_CA_BUNDLE` or `SSL_CERT_FILE` environment variables
874
-
875
- ### Issue: Certificate Chain Incomplete
876
-
877
- **Symptoms**: SSL errors mentioning "unable to get local issuer certificate" or "certificate chain incomplete".
878
-
879
- **Solution**: Ensure intermediate certificates are included. Request the full certificate chain from the server administrator, or fetch it:
880
-
881
- ```bash
882
- # Download certificate chain from a server
883
- openssl s_client -connect server.example.com:443 -showcerts </dev/null 2>/dev/null | openssl x509 -outform PEM > chain.pem
884
- ```
885
-
886
- ### Issue: Expired Certificates in Trust Store
887
-
888
- **Symptoms**: Warnings about expired certificates or connections failing to older servers.
889
-
890
- **Solution**: Update the CA certificate package to get the latest trust list:
891
-
892
- ```bash
893
- # Ubuntu/Debian/Raspberry Pi OS
894
- sudo DEBIAN_FRONTEND=noninteractive apt-get update -y && sudo DEBIAN_FRONTEND=noninteractive apt-get upgrade -y ca-certificates
895
-
896
- # Amazon Linux 2023
897
- sudo dnf update -y ca-certificates
898
-
899
- # Amazon Linux 2
900
- sudo yum update -y ca-certificates
901
-
902
- # macOS
903
- brew upgrade ca-certificates
904
-
905
- # Windows (run as Administrator)
906
- certutil -generateSSTFromWU C:\Windows\Temp\roots.sst
907
- certutil -addstore -f Root C:\Windows\Temp\roots.sst
908
- ```
909
-
910
- ### Issue: Self-Signed Certificates Not Trusted
911
-
912
- **Symptoms**: Development servers with self-signed certificates show SSL errors.
913
-
914
- **Solution**: Add the self-signed certificate to the trust store following the platform-specific instructions in Post-Installation Configuration above. For development only, you can also disable certificate verification (NOT recommended for production):
915
-
916
- ```bash
917
- # cURL (temporary, for testing only)
918
- curl -k https://dev-server.local
919
-
920
- # Git (temporary, for testing only)
921
- GIT_SSL_NO_VERIFY=1 git clone https://dev-server.local/repo.git
922
- ```
923
-
924
- ---
925
-
926
- ## References
927
-
928
- - [Mozilla CA Certificate Store](https://wiki.mozilla.org/CA) - Source for most CA certificate bundles
929
- - [cURL CA Bundle](https://curl.se/docs/caextract.html) - Mozilla certificates extracted for cURL
930
- - [Ubuntu CA Certificates Documentation](https://ubuntu.com/server/docs/install-a-root-ca-certificate-in-the-trust-store) - Official Ubuntu guide
931
- - [Debian ca-certificates Package](https://packages.debian.org/sid/ca-certificates) - Debian package details
932
- - [Red Hat Certificate Management](https://www.redhat.com/en/blog/ca-certificates-cli) - Red Hat/CentOS/Amazon Linux guide
933
- - [Homebrew ca-certificates Formula](https://formulae.brew.sh/formula/ca-certificates) - Homebrew package information
934
- - [Microsoft Certutil Documentation](https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/certutil) - Windows certificate utility
935
- - [Microsoft Certificate Trust Configuration](https://learn.microsoft.com/en-us/windows-server/identity/ad-cs/configure-trusted-roots-disallowed-certificates) - Windows trust store management
936
- - [Git SSL Configuration](https://git-scm.com/book/en/v2/Git-Internals-Environment-Variables#_networking) - Git SSL/TLS settings
937
- - [OpenSSL Certificate Operations](https://www.openssl.org/docs/man1.1.1/man1/x509.html) - OpenSSL certificate commands