The deal will include a fifth-year option that vests if he throws 200 or more innings in 2018, which would boost the total value to $68 million.
Santana, 31, pitched for the Atlanta Braves last season after signing a one-year, $14.1 million contract in March. He went 14-10 with a 3.95 ERA in 31 starts and struck out 179 in 196 innings.
Santana debuted with the Los Angeles Angels in 2005 and spent the next seven seasons with the club, posting a 4.33 ERA during his Angels tenure. He pitched for the Kansas City Royals in 2013, putting together one of his better seasons with a 3.24 ERA in 211 innings.
He is a durable pitcher who has started 30 or more games in a season seven times and pitched 196 innings or more six times.
Santana is prone to giving up home runs, allowing a league-leading 39 homers in 2012 with the Angels. Time will tell how he performs at Minnesota's Target Field, which played relatively neutral last season.
More MLB coverage from Yahoo Sports: