In the sentence: "I didn't know she had a son,"
Can I say "I didn't know she has a son" instead, because he is a teenager now?
Or are both correct?
If she currently has a son, then you can use either version #1 or #2:
1.) "I didn't know [(that) she has a son]."
2.) "I didn't know [(that) she had a son]."
For that situation, where she currently has a son, the #2 version happens to use a backshift preterite. (Note that "preterite" is the same thing as a "past-tense verb"). As to which version is preferable, well, that depends: which one do you prefer? That is, which one sounds better to your ear?
One of the reasons why a subordinate clause -- like your "(that) she has a son" -- can be backshifted into "(that) she had a son" is that the matrix clause is headed by a preterite (the verb "didn't").
Backshifting in a subordinate clause can occur when either one of the following conditions is true:
A.) The tense of the matrix clause is a type of past-tense.
B.) The time of the matrix clause situation is in the past time sphere.
Sometimes, depending on the purpose of the sentence, there can be a preference for either the non-backshifted version or for the backshifted version. Sometimes the non-backshifted version might be considered to be "much more widely appropriate" than the backshifted version. Sometimes the backshifted version is obligatory.
NOTE: There's a common misconception that a present-tense verb being used in its timeless sense (or other related uses) cannot be backshifted. That is untrue, as backshifting is still generally available. For instance, in the older 1985 reference grammar by Quirk et al., A Comprehensive Grammar of the English Language, section 14.31, page 1027:
Here are other examples where present forms may be retained in indirect speech:
- Their teacher had told them that the earth moves around the sun. -- 
. . .
In all these sentences, past forms may also be used, by optional application of the backshift rule. Sentence  has the simple present in its timeless use, . . .
And so, according to Quirk et al., the following backshifted version (to correspond to ) is also acceptable:
Here are some related posts, on the topic of backshifting:
(Some of the material in this post has been borrowed from those two related posts.)
This isn't a question of indirect speech, but you can think of it in a similar way, in that the tense of the verb in the dependent clause is adjusted given the context of the full sentence.
I didn't know she had a son.
(your lack of knowledge is in the past, and that spills into the fact that you're referencing)
I just found out that she has a son.
(now you're speaking about a current fact)
I just found out that she had a son.
(now the "had" becomes more significant -- you're either talking about the point-in-time event of giving birth to a son, or you're implying that the son is deceased)
I used to believe that the Earth was flat. I still believe that the moon is made of blue cheese.
(The Earth hasn't changed, your belief has changed.)
My grandmother taught me that tomatoes were fruit, not vegetables.
(You were taught this in the past, even if the statement is timeless.)
In any of these cases, the present-tense version ("I used to believe that the Earth is flat", "My grandmother taught me that tomatoes are fruit") would also be acceptable.
I would lean towards the past-tense version in the cases when the main clause implies that something about the fact has ended ("I used to believe that...", "I didn't know that..."), but would lean towards the present tense for an enduring knowledge or belief.
If you want more formal guidelines than that, rely on F.E.'s answer and the pages linked from it.