It was Charleston's first road win at Towson since joining the CAA in 2013.
Johnson extended the Charleston (11-7, 3-4) lead to 36-33 with just under six minutes remaining, but the Cougars did not score again until Nick Harris' jumper with 27 seconds left. William Adala Moto grabbed an offensive rebound after his own miss and was fouled. He hit 1 of 2 free throws with seven seconds left to cut it to 38-37.
Johnson made a layup for a three-point lead and Mike Morsell missed a 3-pointer at the buzzer.
Adala Moto finished with six points and nine rebounds for Towson (11-7, 3-4).
Entering the game, Towson led the CAA in scoring defense at 65 points per game and Charleston was second at 65.7.