ubuntu下自我签名数字证书

来源:互联网 发布:大数据研究内容 编辑:程序博客网 时间:2024/06/07 18:00

引言

本博文使用的环境是:ubuntu,openssl,ubuntu默认就有安装openssl软件,这边就无需再次安装,对于没有安装openssl软件的系统,需要先安装,至于怎么安装,这边就不再累述。

CA

CA即数字证书认证机构,英文全称为Certificate Authority,也称为电子商务认证中心、电子商务认证授权机构或证书授权中心,是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。 

CSR

CSR即证书请求文件,英文全称为Cerificate Signing Request,证书申请者在申请数字证书时由CSP(加密服务提供者)在生成私钥的同时也生成证书请求文件,证书申请者只要把CSR文件提交给证书颁发机构后,证书颁发机构使用其根证书私钥签名就生成了证书公钥文件,也就是颁发给用户的证书。

CA证书、服务器证书、私匙生成

步骤一:生成CA私钥,在一个目录下即可,这边以/var/myca为示例,以下操作都是在该目录下操作
openssl genrsa -des3 -out ca.key 2048其中生成RSA私匙,使用的是DES3,可以使用其他算法,2048表示密匙的长度这个文件包含了公钥和密钥两部分,也就是说这个文件即可用来加密也可以用来解密

步骤二:去掉第一步生成私匙的口令,不然每次读取key文件都要输入口令,当然这步骤也可以不需要,对于有安全需要的场合,省略这一步骤
openssl rsa -in ca.key -out ca.key此时生成的ca.key是没有密码的

步骤三:ca.key自签名生成CA证书,此时需要创建一个openssl.cfg配置文件,示例配置文件如下所示:
## OpenSSL example configuration file.# This is mostly being used for generation of certificate requests.## This definition stops the following lines choking if HOME isn't# defined.HOME= .RANDFILE= $ENV::HOME/.rnd# Extra OBJECT IDENTIFIER info:#oid_file= $ENV::HOME/.oidoid_section= new_oids# To use this configuration file with the "-extfile" option of the# "openssl x509" utility, name here the section containing the# X.509v3 extensions to use:# extensions= # (Alternatively, use a configuration file that has only# X.509v3 extensions in its main [= default] section.)[ new_oids ]# We can add new OIDs in here for use by 'ca' and 'req'.# Add a simple OID like this:# testoid1=1.2.3.4# Or use config file substitution like this:# testoid2=${testoid1}.5.6####################################################################[ ca ]default_ca= CA_default# The default ca section####################################################################[ CA_default ]dir= ./demoCA# Where everything is keptcerts= $dir/certs# Where the issued certs are keptcrl_dir= $dir/crl# Where the issued crl are keptdatabase= $dir/index.txt# database index file.new_certs_dir= $dir/newcerts# default place for new certs.certificate= $dir/cacert.pem # The CA certificateserial= $dir/serial # The current serial numbercrl= $dir/crl.pem # The current CRLprivate_key= $dir/private/cakey.pem# The private keyRANDFILE= $dir/private/.rand# private random number filex509_extensions= usr_cert# The extentions to add to the cert# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs# so this is commented out by default to leave a V1 CRL.# crl_extensions= crl_extdefault_days= 365# how long to certify fordefault_crl_days= 30# how long before next CRLdefault_md= md5# which md to use.preserve= no# keep passed DN ordering# A few difference way of specifying how similar the request should look# For type CA, the listed attributes must be the same, and the optional# and supplied fields are just that :-)policy= policy_match# For the CA policy[ policy_match ]countryName= matchstateOrProvinceName= matchorganizationName= matchorganizationalUnitName= optionalcommonName= suppliedemailAddress= optional# For the 'anything' policy# At this point in time, you must list all acceptable 'object'# types.[ policy_anything ]countryName= optionalstateOrProvinceName= optionallocalityName= optionalorganizationName= optionalorganizationalUnitName= optionalcommonName= suppliedemailAddress= optional####################################################################[ req ]default_bits= 1024default_keyfile = privkey.pemdistinguished_name= req_distinguished_nameattributes= req_attributesx509_extensions= v3_ca# The extentions to add to the self signed cert# Passwords for private keys if not present they will be prompted for# input_password = secret# output_password = secret# This sets a mask for permitted string types. There are several options. # default: PrintableString, T61String, BMPString.# pkix : PrintableString, BMPString.# utf8only: only UTF8Strings.# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings).# MASK:XXXX a literal mask value.# WARNING: current versions of Netscape crash on BMPStrings or UTF8Strings# so use this option with caution!string_mask = nombstr# req_extensions = v3_req # The extensions to add to a certificate request[ req_distinguished_name ]countryName= Country Name (2 letter code)countryName_default= AUcountryName_min= 2countryName_max= 2stateOrProvinceName= State or Province Name (full name)stateOrProvinceName_default= Some-StatelocalityName= Locality Name (eg, city)0.organizationName= Organization Name (eg, company)0.organizationName_default= Internet Widgits Pty Ltd# we can do this but it is not needed normally :-)#1.organizationName= Second Organization Name (eg, company)#1.organizationName_default= World Wide Web Pty LtdorganizationalUnitName= Organizational Unit Name (eg, section)#organizationalUnitName_default=commonName= Common Name (eg, YOUR name)commonName_max= 64emailAddress= Email AddressemailAddress_max= 40# SET-ex3= SET extension number 3[ req_attributes ]challengePassword= A challenge passwordchallengePassword_min= 4challengePassword_max= 20unstructuredName= An optional company name[ usr_cert ]# These extensions are added when 'ca' signs a request.# This goes against PKIX guidelines but some CAs do it and some software# requires this to avoid interpreting an end user certificate as a CA.basicConstraints=CA:FALSE# Here are some examples of the usage of nsCertType. If it is omitted# the certificate can be used for anything *except* object signing.# This is OK for an SSL server.# nsCertType= server# For an object signing certificate this would be used.# nsCertType = objsign# For normal client use this is typical# nsCertType = client, email# and for everything including object signing:# nsCertType = client, email, objsign# This is typical in keyUsage for a client certificate.# keyUsage = nonRepudiation, digitalSignature, keyEncipherment# This will be displayed in Netscape's comment listbox.nsComment= "OpenSSL Generated Certificate"# PKIX recommendations harmless if included in all certificates.subjectKeyIdentifier=hashauthorityKeyIdentifier=keyid,issuer:always# This stuff is for subjectAltName and issuerAltname.# Import the email address.# subjectAltName=email:copy# Copy subject details# issuerAltName=issuer:copy#nsCaRevocationUrl= http://www.domain.dom/ca-crl.pem#nsBaseUrl#nsRevocationUrl#nsRenewalUrl#nsCaPolicyUrl#nsSslServerName[ v3_req ]# Extensions to add to a certificate requestbasicConstraints = CA:FALSEkeyUsage = nonRepudiation, digitalSignature, keyEncipherment[ v3_ca ]# Extensions for a typical CA# PKIX recommendation.subjectKeyIdentifier=hashauthorityKeyIdentifier=keyid:always,issuer:always# This is what PKIX recommends but some broken software chokes on critical# extensions.#basicConstraints = critical,CA:true# So we do this instead.basicConstraints = CA:true# Key usage: this is typical for a CA certificate. However since it will# prevent it being used as an test self-signed certificate it is best# left out by default.# keyUsage = cRLSign, keyCertSign# Some might want this also# nsCertType = sslCA, emailCA# Include email address in subject alt name: another PKIX recommendation# subjectAltName=email:copy# Copy issuer details# issuerAltName=issuer:copy# DER hex encoding of an extension: beware experts only!# obj=DER:02:03# Where 'obj' is a standard or added object# You can even override a supported extension:# basicConstraints= critical, DER:30:03:01:01:FF[ crl_ext ]# CRL extensions.# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL.# issuerAltName=issuer:copyauthorityKeyIdentifier=keyid:always,issuer:always
根据配置文件还需要当前文件夹下创建目录certs和private,创建文件index.txt和serial文件,并且serial文件要写入01,该文件签名其他文件也还有用
有了配置文件,可以使用该命令对ca.key自签名得到CA根证书
openssl req -new -x509 -days 365 -key ca.key -out ca.crt
req用于生成证书,-days 365表示证书时效为365天,从生成开始算起,如果没输入该值,默认为30天,-x509生成自签名证书,没有该项时表示生成csr。生成证书时需要输入相关信息,主要相关信息及解释如下所示:
DN字段名
缩写说明(我的信息)填写要求Country NameC证书持有者所在国家(CN)*要求填写国家代码,用2个字母表示State or Province NameST证书持有者所在州或省份(zhejiang)填写全称,可省略不填Locality NameL证书持有者所在城市(hangzhou)可省略不填Organization NameO证书持有者所属组织或公司(xxx)*最好还是填一下Organizational Unit NameOU证书持有者所属部门(no)可省略不填Common NameCN证书持有者的通用名(XXX.com)*必填。
对于非应用证书,它应该在一定程度上具有惟一性;
对于应用证书,一般填写服务器域名或通配符样式的域名。Email Address 证书持有者的通信邮箱(xxx@xxx.com)可省略不填 

步骤四:创建server的私匙,在当前目录下即可,具体操作为
openssl genrsa -des3 -out server.key 1024
具体操作跟ca.key生成步骤一样,这边是测试用,用1024强度即可

步骤五:去除key文件口令,不然每次读取key文件都要输入口令,安全场合需要
openssl rsa -in server.key -out server.key

步骤六:生成生成一个csr证书,具体操作为:
openssl req -new -key server.key -out server.csr
此时,在common name中填入网站域名,如blog.xxx.net即可生成该站点的证书,同时也可以使用泛域名如*.xxx.net来生成所有二级域名可用的网站证书.多域名证书可通过修改openssl.cnf生成。

步骤七:为 csr 文件签名,生成证书
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cnf
按照以上步骤就大功告成了,可能中间会遇到一些问题,只要上网搜索一下即可解决。

再次生成证书遇到的问题及解决方法

对于出现下列问题yfailed to update databaseTXT_DB error number 2解决方法:
1.修改目录下的index.txt.attr文件,把unique_subject = yes改为unique_subject = no  
2.删除目录下的index.txt文件,然后再生成一个

参考资料:
http://my.oschina.net/meilihao/blog/337087
《openssl编程》
《NetworkSecuritywithOpenSSL》








0 0
原创粉丝点击