How to create Signature certificate with openssl

来自koorka知识分享
跳转至: 导航搜索

生成根证书(root CA certificate)

  • 生成CA的私钥(private key)

使用RSA算法生成私钥,长度为2048,保存到文件 ca-key.pem

openssl genrsa -out ca-key.pem 2048

  • 生成CA证书

使用上面生成的私钥创建一个自签名的CA证书,并保存到ca.pem :

openssl req -x509 -new -nodes -key ca-key.pem -days 10000 -out ca.pem -subj "/CN=koorka.com/C=CN/ST=TianJin/L=TianJinNanKai/O=Koorka Ltd/OU=Technical"

上面命令中各参数的说明:

req: 发起一个 PKCS#10 格式的证书签名请求。

-new: 生成一个新的证书签名请求。

-x509: 使用该参数后将生成一个自签名的证书,而不是生成一个签名请求。通常生成CA证书时会使用。

-nodes: 如果私钥文件已经被创建则不用加密。

-key: 证书私钥文件的来源。

-days: 指定自签名证书的有效期限。

-out: 保存证书的文件名。

-subj: 用于指定生成的证书请求的用户信息,或者处理证书请求时用指定参数替换。生成证书请求时,如果不指定此选项,程序会提示用户来输入各个用户信息,包括国名、组织等信息,如果采用此选择,则不需要用户输入了。比如:-subj /CN=koorka.com/OU=test/O=abc/CN=forxy,注意这里等属性必须大写。

官方文档可以参考: https://wiki.openssl.org/index.php/Manual:Req(1)

中文参考: http://ctwen.iteye.com/blog/2028630

使用根证书签发其它证书

使用上面的根证书为kubernetes apiserver签发证书

  • 创建OpenSSL 配置文件openssl.cnf
    [req]
    req_extensions = v3_req
    distinguished_name = req_distinguished_name
    
    [req_distinguished_name]
    countryName              = Country Name (2 letter code)
    countryName_default = CN
    stateOrProvinceName             = State or Province Name (full name)
    stateOrProvinceName_default = TianJin
    localityName              = Locality Name (eg, city)
    localityName_default = TianJinNanKai
    organizationalUnitName             = Organizational Unit Name (eg, section)
    organizationalUnitName_default = Domain Control Validated
    commonName         = Common Name (eg, your name or your server\'s hostname)
    commonName_default         = Koorka Company (TianJin) Ltd
    commonName_max = 64
    
    [ v3_req ]
    basicConstraints = CA:FALSE
    keyUsage = nonRepudiation, digitalSignature, keyEncipherment
    subjectAltName = @alt_names
    
    [alt_names]
    DNS.1 = *.koorka.com
    DNS.2 = wiki.koorka.cn
    DNS.3 = shop.getwc.com
    DNS.4 = localhost
    IP.1 = 127.0.0.1
    

[alt_names] : 该部分指定可以使用该证书的域名或IP地址。在上面的示例中,使用该配置文件生成的证书,除可以用在 *.koorka.com 外,还可用在localhost ,127.0.0.1 ,wiki.koorka.cn, shop.getwc.com上。

  • 生成需要签署的证书的私钥

openssl genrsa -out apiserver-key.pem 2048

  • 生成证书签名请求证书

openssl req -new -key apiserver-key.pem -out apiserver.csr -config openssl.cnf

  • 使用根证书对该证书请求进行证书签名

openssl x509 -req -in apiserver.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out apiserver.pem -days 365 -extensions v3_req -extfile openssl.cnf