How to Specify Key Size (2048/4096) When Generating a CSR with OpenSSL


14 views

When generating a Certificate Signing Request (CSR) for services like GoDaddy, you might encounter the error:

The CSR key length must be 2048 or 4096

This occurs because many certificate authorities now require stronger encryption standards.

The commands you used:

openssl req -new -nodes -keyout server.key -out server.csr
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

create a CSR with OpenSSL's default key size (typically 1024 bits), which is now considered insecure.

To generate a CSR with proper key length, you need to:

  1. First generate a private key with specified size
  2. Then create the CSR using that key

Here's the correct sequence:

# Generate 2048-bit private key
openssl genrsa -out server.key 2048

# Create CSR using the generated key
openssl req -new -key server.key -out server.csr

For 4096-bit security (recommended for better future-proofing):

# Generate 4096-bit private key
openssl genrsa -out server.key 4096

# Create CSR
openssl req -new -key server.key -out server.csr

After generation, verify the key size with:

openssl req -in server.csr -noout -text | grep "Public-Key"

This should return either "(2048 bit)" or "(4096 bit)".

When deploying to Heroku:

  • Ensure your private key is not password-protected (use -nodes flag if needed)
  • Combine certificate and intermediate certificates properly
  • Use the following format for certificate chains:
-----BEGIN CERTIFICATE-----
[Your certificate]
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
[Intermediate certificate]
-----END CERTIFICATE-----

If you still face issues:

  1. Double-check the key size using the verification command
  2. Ensure you're submitting the CSR (server.csr), not the private key
  3. Confirm your OpenSSL version supports these key sizes

Remember that while 2048-bit is currently acceptable, 4096-bit provides better security and is becoming the new standard for many providers.


When generating a Certificate Signing Request (CSR) for services like GoDaddy SSL certificates, you need to ensure your RSA key meets the minimum 2048-bit requirement. Here's why this matters:

  • Security standards now mandate 2048-bit keys as minimum (NIST SP 800-57)
  • Many CAs reject CSRs with weaker 1024-bit keys
  • 4096-bit provides better future-proofing

The issue occurs because your current command doesn't explicitly specify key size. Here's the proper syntax:

openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr

For 4096-bit keys:

openssl req -new -newkey rsa:4096 -nodes -keyout server.key -out server.csr

After generation, verify the key length with:

openssl req -in server.csr -noout -text | grep "Public-Key"

Or for an existing key:

openssl rsa -in server.key -text -noout | grep "Private-Key"

Problem: Getting "The CSR key length must be 2048 or 4096" error from GoDaddy.

Solution checklist:

  1. Regenerate the CSR with explicit key size parameter
  2. Verify using the commands above
  3. Ensure no old/invalid CSRs are being submitted

Here's a full example with all required fields:

openssl req -new \
  -newkey rsa:2048 \
  -nodes \
  -keyout domain.key \
  -out domain.csr \
  -subj "/C=US/ST=California/L=San Francisco/O=Your Company/CN=yourdomain.com"

Remember to replace the subject details (-subj parameter) with your actual information.

When deploying on Heroku:

  • Heroku accepts both 2048-bit and 4096-bit keys
  • Recommended practice: Use 2048-bit for web servers (better performance)
  • Use 4096-bit for more sensitive applications