The most secure place to store credit card numbers will be on a third party service designed to securely retain that data. These service providers are PCI Level 1 compliant with code and systems in place to prevent the unwanted or unexpected exposure of sensitive card data.
Many payment gateways support such "card on file" functionality, where they allow you to process an authorization or capture for a credit card and provide you with a token to perform follow-up transactions using that same card data. Such a transaction is generally referred to as a "reference transaction", with example implementations being PayPal's reference transactions, Authorize.Net's Customer Information Manager (CIM), or CyberSource's Managed Billing / subscriptions.
The name and price of these services will vary from payment gateway to payment gateway, but they will always require a similar point of integration in Drupal - a way to retain a payment token and process that reference transaction at a later date; typically you want some sort of customer interface as well, allowing customers to update their information or reuse a credit card on a later order.
To solve the Drupal integration, we created the Commerce Card on File module, which does all this and more within Drupal Commerce. It works through payment method callbacks, allowing any payment method module to implement the callbacks to integrate reference transactions through its payment gateway's API. Obviously, not every payment gateway under the sun is supported, so be sure to check the documentation to find out if yours is supported.
And as the comments on your original question indicate - you should never be in the business of storing card data in your site, which was unfortunately easy to do in Ubercart. Multiple times now I've been part of rescuing sites that incorrectly used the UC Recurring module to retain credit card data in plaintext in the database for later processing. Do not do this - ever.