環境:ubuntu
バージョン:GmSSL 2.4.2-OpenSSL 1.1.0d 2018年12月19日
1.GmSSLをコンパイルしてインストールします
最初にGmSSL-master.zipを解凍し、次に解凍したGmSSL-masterディレクトリに入ります。
次に、次の手順でコンパイルしてインストールします。
./config
作る
インストールする
注(Θ0Θ●):-prefixなどはここでは設定されていません(つまり、コンパイルおよびインストール中のプログラムストレージパスは指定されていません)。インストールディレクトリが指定されているため、コンパイルしてインストールした後、直接gmsslコマンドを入力すると実行できません。いくつかの構成が必要であると推定されますが、私は常にそれを誤って構成します(。•ˇ‸ˇ•。)。何回か失敗した後、私はあきらめてデフォルトのインストールを直接使用しました( ̄ ^  ̄)。(興味のある子供靴は自分で実験することができます、ヽ(^ _−)ノ結局のところ、インストールディレクトリを指定すると、アンインストール、移植、およびメンテナンスに役立ちます)
2. CA構成ファイル(つまり、/ usr / local / ssl / openssl.cnfファイル)を変更します。
[CA_default]アイテムのディレクトリを変更します。デフォルトは次のとおりです。
……。
[CA_default]
dir = ./demoCA#すべてが保存される場所
……。
自分で指定したCAルートパスに変更します(たとえば、ここでは/ home / lt / demoCAをCAルートパスと見なします)。
[CA_default]
DIR = /ホーム/ LT / demoCA #。/ demoCA#すべてが保たれています
3.CAディレクトリを初期化します
ルートディレクトリを作成しますmkdir-p / home / lt / demoCA
cd /home/lt/demoCA
このパスの下にnewcerts、private、certs、crlサブディレクトリを作成し、index.txtファイルとシリアルファイルを同時に作成します。
mkdir newcerts private certs crl touch index.txt
シリアルを作成し、01などの初期化シリアル番号を書き込みます
vi serial
作成されたサブディレクトリとファイルの意味:
- certs:発行された証明書を保存します。
- newcerts:CA命令によって生成された新しい証明書を保存します。
- 秘密:秘密鍵を保存します。
- crl:取り消された整数を格納します。
- index.txt:penSSLによって定義された発行済み証明書のテキストデータベースファイル。このファイルは通常、初期化中は空です。
- serial:証明書の発行時に使用されるシリアル番号参照ファイル。ファイルのシリアル番号は16進形式で保存されます。ファイルは提供され、有効なシリアル番号が含まれている必要があります。
/usr/local/ssl/openssl.cnfファイル(σ°∀°)σ..:*☆のca関連項目から表示できます。
####################################################################
[ ca ]
default_ca = CA_default /*The default ca section*/
####################################################################
[ CA_default ]
dir = /home/lt/demoCA /* Where everything is kept */
/* #### 这是第一个openssl目录结构中的目录 */
certs = $dir/certs /* Where the issued certs are kept(已颁发的证书路径,即CA或自签的) */
/* #### 这是第二个openssl目录结构中的目录,但非必须 */
crl_dir = $dir/crl /* Where the issued crl are kept(已颁发的crl存放目录) */
/* #### 这是第三个openssl目录结构中的目录*/
database = $dir/index.txt /* database index file */
#unique_subject = no /* 设置为yes则database文件中的subject列不能出现重复值 */
/* 即不能为subject相同的证书或证书请求签名*/
/* 建议设置为no,但为了保持老版本的兼容性默认是yes */
new_certs_dir = $dir/newcerts /* default place for new certs(将来颁发的证书存放路径) */
/* #### 这是第四个openssl目录结构中的目录 */
certificate = $dir/cacert.pem /* The A certificate(CA自己的证书文件) */
serial = $dir/serial /* The current serial number(提供序列号的文件)*/
crlnumber = $dir/crlnumber /* the current crl number(当前crl序列号) */
crl = $dir/crl.pem /* The current CRL(当前CRL) */
private_key = $dir/private/cakey.pem /* The private key(签名时需要的私钥,即CA自己的私钥) */
RANDFILE = $dir/private/.rand /* private random number file(提供随机数种子的文件) */
x509_extensions = usr_cert /* The extentions to add to the cert(添加到证书中的扩展项) */
/* 以下两行是关于证书展示格式的,虽非必须项,但推荐设置。一般就如下格式不用修改 */
name_opt = ca_default /* Subject Name options*/
cert_opt = ca_default /* Certificate field options */
/* 以下是copy_extensions扩展项,需谨慎使用 */
# copy_extensions = copy /* 生成证书时扩展项的copy行为,可设置为none/copy/copyall */
/* 不设置该name时默认为none */
/* 建议简单使用时设置为none或不设置,且强烈建议不要设置为copyall */
# crl_extensions = crl_ext
default_days = 365 /* how long to certify for(默认的证书有效期) */
default_crl_days= 30 /* how long before next CRL(CRL的有效期) */
default_md = default /* use public key default MD(默认摘要算法) */
preserve = no /* keep passed DN ordering(Distinguished Name顺序,一般设置为no */
/* 设置为yes仅为了和老版本的IE兼容)*/
policy = policy_match /* 证书匹配策略,此处表示引用[ policy_match ]的策略 */
/* 证书匹配策略定义了证书请求的DN字段(field)被CA签署时和CA证书的匹配规则 */
/* 对于CA证书请求,这些匹配规则必须要和父CA完全相同 */
[ policy_match ]
countryName = match /* match表示请求中填写的该字段信息要和CA证书中的匹配 */
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional /* optional表示该字段信息可提供可不提供 */
commonName = supplied /* supplied表示该字段信息必须提供 */
emailAddress = optional
/* For the 'anything' policy*/
/* At this point in time, you must list all acceptable 'object' types. */
/* 以下是没被引用的策略扩展,只要是没被引用的都是被忽略的 */
[ policy_anything ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
/* 以下是添加的扩展项usr_cert的内容*/
[ usr_cert ]
basicConstraints=CA:FALSE /* 基本约束,CA:FALSE表示该证书不能作为CA证书,即不能给其他人颁发证书*/
/* keyUsage = critical,keyCertSign,cRLSign # 指定证书的目的,也就是限制证书的用法*/
/* 除了上面两个扩展项可能会修改下,其余的扩展项别管了,如下面的 */
nsComment = "OpenSSL Generated Certificate"
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
####################################################################
4.証明書を生成する手順
a)CAルートパスを入力します
cd /home/lt/demoCA
b)キーペア(秘密キー)を生成します
gmssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:sm2p256v1 -pkeyopt ec_param_enc:named_curve -out private/cakey.pem
注(Θ0Θ●):
- ここで生成される秘密鍵の名前は、openssl.cnf構成ファイルの名前と一致している必要があります。他の名前として出力することもできますが、openssl.cnf構成ファイルで指定されているCA秘密鍵を変更する必要がありますprivate_key = $ dir / private / cakey.pem
- 署名時に秘密鍵を秘密ディレクトリから取得する必要があるため、生成された秘密鍵は秘密ディレクトリに配置する必要があります。
c)CA証明書を生成する
gmssl req -new -x509 -key private/cakey.pem -out cacert.pem
注(Θ0Θ●):
- 生成された証明書名は、openssl.cnfファイルの構成とも一致している必要があります。
- 証明書を生成するときは、国名、州名、組織名、ホスト名、電子メール名など、署名する人または会社に関する情報を入力する必要があります。一部の情報は空白のままにして使用できます。
d)ユーザー証明書要求を生成する
gmssl req -new -key private/cakey.pem -out serverreq.pem
注(Θ0Θ●):
- openssl.cnfファイルのcaセクションのポリシーで指定された一致ルールで一致が指定されている場合、CA証明書要求に入力されたフィールド情報はCA証明書と一致する必要があることに注意してください。
- テストを簡単にするために、証明書要求を生成するときに署名する人または会社に関する情報は、CA証明書の生成と一致しています。
e)CA証明書の署名を使用してユーザー証明書を生成する
gmssl ca -in serverreq.pem -out servercert.pem
署名証明書が正常に生成されたら、ディレクトリを確認します。
証明書ファイル(servercert.pem)を生成するためのディレクトリを確認できます。
わかりました。CAは自己署名証明書の生成を完了しました。[]〜( ̄▽ ̄)〜*
参照文書:
https://blog.csdn.net/gw85047034/article/details/78811486
https://www.cnblogs.com/f-ck-need-u/p/6091027.html