申请部署SSL证书,首先生成私钥,然后使用私钥生成CSR,下面我将详细指导您使用OpenSSL生成CSR和私钥的完整步骤。以下是清晰的逐步流程:

准备工作

首先,确保系统已安装OpenSSL:

bash

openssl  version

方法一:交互式生成(推荐新手)

步骤1:生成私钥

bash

生成2048位RSA私钥(无密码保护)

openssl  genrsa  -out  example.com.key  2048

或者生成4096位(更安全,但性能略低)

openssl  genrsa  -out  example.com.key  4096

生成带密码保护的私钥(推荐用于生产环境)

openssl  genrsa  -aes256  -out  example.com.encrypted.key  2048

系统会提示输入并确认密码

步骤2:生成CSR(证书签名请求)

bash

openssl  req  -new  -key  example.com.key  -out  example.com.csr

系统会提示输入以下信息:

Country  Name  (2  letter  code)  [US]:国家代码(如CN、US)

State  or  Province  Name  (full  name)  []:州/省(如Beijing、California)

Locality  Name  (eg,  city)  []:城市(如Beijing、San  Francisco)

Organization  Name  (eg,  company)  []:组织名称(公司名)

Organizational  Unit  Name  (eg,  section)  []:部门名称(如IT  Department)

Common  Name  (e.g.  server  FQDN  or  YOUR  name)  []:重要:要保护的域名

单域名:example.com

通配符:*.example.com

子域:www.example.com

Email  Address  []:管理员邮箱

Challenge  password  []:通常留空

Optional  company  name  []:通常留空

步骤3:验证CSR内容

bash

查看CSR的详细信息

openssl  req  -in  example.com.csr  -noout  -text

查看CSR中的公钥

openssl  req  -in  example.com.csr  -noout  -pubkey

方法二:非交互式生成(适合自动化)

使用配置文件(推荐)

创建配置文件  csr_config.cnf:

ini

[req]

default_bits                =  2048

default_keyfile          =  example.com.key

distinguished_name    =  req_distinguished_name

req_extensions            =  v3_req

prompt                            =  no

[req_distinguished_name]

countryName                          =  CN

stateOrProvinceName          =  Beijing

localityName                        =  Beijing

organizationName                =  Example  Inc.

organizationalUnitName    =  IT  Department

commonName                            =  *.example.com

emailAddress                        =  admin@example.com

[v3_req]

basicConstraints                =  CA:FALSE

keyUsage                                =  nonRepudiation,  digitalSignature,  keyEncipherment

subjectAltName                    =  @alt_names

[alt_names]

DNS.1  =  example.com

DNS.2  =  *.example.com

如果需要更多域名,继续添加

DNS.3  =  www.example.com

DNS.4  =  mail.example.com

生成私钥和CSR:

bash

一步生成私钥和CSR

openssl  req  -new  -nodes  -sha256  -newkey  rsa:2048  \

    -config  csr_config.cnf  \

    -keyout  example.com.key  \

    -out  example.com.csr

或者先有私钥,再生成CSR

openssl  genrsa  -out  example.com.key  2048

openssl  req  -new  -key  example.com.key  -config  csr_config.cnf  -out  example.com.csr

方法三:生成通配符证书CSR的特定示例

仅通配符(不包含根域名)

bash

创建配置文件  wildcard.cnf

cat  >  wildcard.cnf  <<  EOF

[req]

default_bits  =  2048

prompt  =  no

default_md  =  sha256

distinguished_name  =  dn

[dn]

C  =  CN

ST  =  Shanghai

L  =  Shanghai

O  =  "My  Company"

OU  =  IT

CN  =  *.example.com

emailAddress  =  ssl-admin@example.com

EOF

生成

openssl  req  -new  -newkey  rsa:2048  -nodes  \

    -config  wildcard.cnf  \

    -keyout  wildcard.key  \

    -out  wildcard.csr

通配符  +  根域名(使用SAN扩展)

bash

cat  >  wildcard_with_san.cnf  <<  EOF

[req]

default_bits  =  2048

prompt  =  no

default_md  =  sha256

distinguished_name  =  dn

req_extensions  =  req_ext

[dn]

C  =  US

ST  =  California

L  =  San  Francisco

O  =  "My  Company"

OU  =  DevOps

CN  =  *.example.com

emailAddress  =  ssl-admin@example.com

[req_ext]

subjectAltName  =  @alt_names

[alt_names]

DNS.1  =  example.com

DNS.2  =  *.example.com

EOF

生成

openssl  req  -new  -newkey  rsa:2048  -nodes  \

    -config  wildcard_with_san.cnf  \

    -keyout  wildcard_san.key  \

    -out  wildcard_san.csr

验证生成的文件

检查私钥

bash

查看私钥信息

openssl  rsa  -in  example.com.key  -check  -noout

如果私钥有密码,查看时需要输入密码

openssl  rsa  -in  example.com.encrypted.key  -check  -noout

检查CSR

bash

查看CSR所有信息

openssl  req  -in  example.com.csr  -noout  -text

仅查看主题信息

openssl  req  -in  example.com.csr  -noout  -subject

检查SAN扩展(如果有)

openssl  req  -in  example.com.csr  -noout  -text  |  grep  -A  1  "Subject  Alternative  Name"

验证私钥和CSR匹配

bash

比较公钥哈希值

openssl  rsa  -in  example.com.key  -pubout  -outform  pem  |  sha256sum

openssl  req  -in  example.com.csr  -pubkey  -noout  |  sha256sum

两个哈希值应该相同

最佳实践和安全建议

1.  密钥管理

bash

设置正确的权限

chmod  600  example.com.key    #  仅所有者可读写

chmod  644  example.com.csr    #  所有者可读写,其他人只读

备份私钥(安全存储!)

cp  example.com.key  backup/example.com.key.$(date  +%Y%m%d)

2.  常用OpenSSL命令参考

bash

从现有私钥生成CSR(如果已有关键文件)

openssl  req  -new  -key  existing.key  -out  new.csr

查看CSR的Base64编码(用于CA提交)

cat  example.com.csr

生成自签名证书(用于测试)

openssl  x509  -req  -days  365  -in  example.com.csr  \

    -signkey  example.com.key  -out  example.com.crt

3.  错误处理

bash

如果遇到"unable  to  load  Private  Key"错误

检查密钥文件格式

file  example.com.key

转换PEM格式

openssl  rsa  -in  old.key  -out  new.key

如果忘记私钥密码(只能重新生成)

无法恢复,需要生成新的密钥对

快速脚本示例

自动化生成脚本  generate_csr.sh

bash

!/bin/bash

DOMAIN=$1

if  [  -z  "$DOMAIN"  ];  then

        echo  "用法:  $0  域名"

        echo  "示例:  $0  example.com"

        exit  1

fi

创建目录

mkdir  -p  ssl/${DOMAIN}

cd  ssl/${DOMAIN}

生成配置文件

cat  >  csr.cnf  <<  EOF

[req]

default_bits  =  2048

prompt  =  no

default_md  =  sha256

distinguished_name  =  dn

[dn]

C  =  CN

ST  =  Beijing

L  =  Beijing

O  =  "My  Company"

OU  =  IT

CN  =  *.${DOMAIN}

emailAddress  =  admin@${DOMAIN}

EOF

生成私钥和CSR

openssl  req  -new  -newkey  rsa:2048  -nodes  \

    -config  csr.cnf  \

    -keyout  ${DOMAIN}.key  \

    -out  ${DOMAIN}.csr

echo  "生成完成!"

echo  "私钥:  ${DOMAIN}.key"

echo  "CSR:  ${DOMAIN}.csr"

echo  ""

echo  "CSR内容:"

cat  ${DOMAIN}.csr

使用方式:

bash

chmod  +x  generate_csr.sh

./generate_csr.sh  example.com

提交给CA的后续步骤

将CSR内容复制给证书颁发机构(CA):

bash

cat  example.com.csr

保存好私钥文件,不要分享给任何人

CA颁发证书后,您将收到一个或多个.crt文件,与私钥一起部署到服务器

最后要让用户记住:永远不要丢失私钥,否则对应的SSL证书将无法使用。建议将私钥存储在安全的密钥管理系统中。