Today I look back to this issue again and finally solved this. And I update the answer in case anyone else need this. I looked into the source code AddonUpdateChecker.jsm which I should do this earlier. I used javascript debugger to debug the update. Before this, I really didn't see any logs indicating that the I should have builtInCertificate. And found that it's looking into the pref values about certificates. Which are extensions.install.requireBuiltInCerts and extensions.update.requireBuiltInCerts.
Set these two prefs values to false and the udpate works.
Others with different ssl certificate may not meet this problem maybe.