精华内容
下载资源
问答
  • docker-nginx-auto-ssl:使用Let's Encrypt和Open Resty自动生成SSL证书的Docker映像
  • 自动生成SSL证书的脚本

    千次阅读 2018-10-30 18:56:28
    生成https证书脚本 基于Lnux系统下的openssl和jdkkeytool工具 1. 生成https证书脚本 #! /bin/bash FILE_PREFIX=tls RSA_BITS_NUM=2048 VALID_DAYS=3650 PASS_RSA=jeasoon PASS_P12=jeasoon PASS_JKS=jeasoon CRT_...

    自动生成SSL证书的脚本


    基于Lnux系统下的 openssl和jdk keytool工具

    1. 脚本和配置

    1.1 生成https证书脚本

    #! /bin/bash
    
    FILE_PREFIX=tls
    RSA_BITS_NUM=2048
    VALID_DAYS=3650
    
    PASS_RSA=jeasoon
    PASS_P12=jeasoon
    PASS_JKS=jeasoon
    
    CRT_ALIAS=jeasoon
    CRT_COUNTRY_NAME=CN
    CRT_PROVINCE_NAME=Beijing
    CRT_CITY_NAME=Beijing
    CRT_ORGANIZATION_NAME=jeasoon
    CRT_ORGANIZATION_UNIT_NAME=jeasoon
    CRT_DOMAIN=*.jeasoon.com
    CRT_EMAIL=jeasoon@jeasoon.com
    CRT_EXTRA_CHALLENGE_PASSWD=jeasoon
    CRT_EXTRA_OPTINAL_COMPANY_NAME=Jeasoon
    
    # 2.1 生成私钥
    echo -e "\n----------------------------------------------------------\n生成私钥\n"
    openssl genrsa -des3 -passout pass:$PASS_RSA -out $FILE_PREFIX.pem $RSA_BITS_NUM
    
    # 2.2 除去密码口令
    echo -e "\n----------------------------------------------------------\n除去密码口令\n"
    openssl rsa -in $FILE_PREFIX.pem -out $FILE_PREFIX.key -passin pass:$PASS_RSA
    
    # 2.3 生成证书请求
    echo -e "\n----------------------------------------------------------\n生成证书请求\n"
    openssl req -new -days $VALID_DAYS -key $FILE_PREFIX.key -out $FILE_PREFIX.csr << EOF
    $CRT_COUNTRY_NAME
    $CRT_PROVINCE_NAME
    $CRT_CITY_NAME
    $CRT_ORGANIZATION_NAME
    $CRT_ORGANIZATION_UNIT_NAME
    $CRT_DOMAIN
    $CRT_EMAIL
    $CRT_EXTRA_CHALLENGE_PASSWD
    $CRT_EXTRA_OPTINAL_COMPANY_NAME
    EOF
    
    # 2.4 生成证书
    echo -e "\n\n----------------------------------------------------------\n生成证书\n"
    openssl x509 -req -days $VALID_DAYS -signkey $FILE_PREFIX.key -in $FILE_PREFIX.csr -out $FILE_PREFIX.crt
    
    # 2.5 crt转为p12证书
    echo -e "\n----------------------------------------------------------\ncrt转为p12证书\n"
    openssl pkcs12 -export -in $FILE_PREFIX.crt -inkey $FILE_PREFIX.key -name $CRT_ALIAS -passout pass:$PASS_P12 -out $FILE_PREFIX.p12
    
    # 2.6 p12和jks证书互转
    echo -e "\n----------------------------------------------------------\np12和jks证书互转\n"
    keytool -importkeystore -srckeystore $FILE_PREFIX.p12 -srcstoretype PKCS12 -deststoretype JKS -srcstorepass $PASS_P12 -deststorepass $PASS_JKS -destkeystore $FILE_PREFIX.jks
    
    # 2.7 证书查看
    echo -e "\n----------------------------------------------------------\n证书查看\n"
    keytool -list -v -storepass $PASS_JKS -keystore $FILE_PREFIX.jks
    echo
    
    

    1.2 Tomcat配置

    修改tomcat根目录/conf/server.xml

    <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true" >
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="tls/tls.jks"
                         certificateKeystorePassword="jeasoon"
                         certificateKeyPassword="jeasoon"
                         certificateKeyAlias="jeasoon"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>
    

    2. 脚本步骤详解

    2.1 生成私钥

    openssl genrsa -des3 -passout pass:密码口令 -out tls.pem 2048
    

    选项:

    • genrsa: genrsa相关命令
    • -des3: 加密方式, encrypt the generated key with DES in ede cbc mode (168 bit key)
    • -passout: 输出密码口令, 后接 pass:密码口令, 如果省略, 需要手动输入密码口令
    • -out: 输出文件路径, 后接文件路径; 生成的tls.pem内容为文本
    • 1024/2048: 1024/2048位私钥, numbits

    2.2 除去密码口令

    openssl rsa -in tls.pem -out tls.key -passin pass:密码口令
    

    选项:

    • rsa: rsa相关命令
    • -in: 第一步生成的pem私钥, 后接私钥文件路径
    • -out: 输出文件路径, 后接文件路径; 生成的tls.key内容为文本
    • -passin: 输入密码口令, 后接 pass:密码口令, 如果省略, 需要手动输入密码口令

    2.3 生成证书请求

    openssl req -new -days 3650 -key tls.key -out tls.csr
    

    选项:

    • req: req相关命令
    • -new: 生成新的证书签名请求
    • -days: 有效天数, 后接数字, 天数
    • -key: 私钥key路径, 后接第二步生成的key路径
    • -out: 输出文件路径, 后接文件路径; 生成的tls.csr内容为文本

    交互输入:

    国家代码(可空): Country Name (2 letter code) [AU]:
    CN
    省份代码(可空): State or Province Name (full name) [Some-State]:
    Beijing
    城市代码(可空): Locality Name (eg, city) []:
    Beijing
    公司名称(可空): Organization Name (eg, company) [Internet Widgits Pty Ltd]:
    Jeasoon
    部门名称(可空): Organizational Unit Name (eg, section) []:
    Jeasoon
    授权域名: Common Name (e.g. server FQDN or YOUR name) []:
    *.jeasoon.com
    邮件地址(可空): Email Address []:
    jeasoon@jeasoon.com
    Extra信息(可空): A challenge password []:
    jeasoon
    Extra信息(可空): An optional company name []:
    jeasoon
    

    2.4 生成证书

    openssl x509 -req -days 3650 -signkey tls.key -in tls.csr -out tls.crt
    

    选项:

    • x509: x509相关命令
    • -req: 输入一个证书请求, 签名并输出
    • -days: 有效天数, 后接数字, 天数
    • -signkey: 输入私钥, 后接第二步生成的key文件路径
    • -in: 输入csr证书, 后接第三步生成的csr证书请求路径
    • -out: 输出文件路径, 后接文件路径; 生成的tls.crt内容为文本

    2.5 crt转为p12证书

    openssl pkcs12 -export -in tls.crt -inkey tls.key -name vixtel -passout pass:密码口令 -out tls.p12
    

    选项:

    • pkcs12: pkcs12相关命令
    • -export: 导出操作
    • -in: 输入证书, 后接第四步生成的crt证书路径
    • -days: 有效天数, 后接数字, 天数
    • -signkey: 输入私钥, 后接第二步生成的key文件路径
    • -name: 别名
    • -passout: 输出密码口令, 后接 pass:密码口令, 如果省略, 需要手动输入密码口令
    • -out: 输出文件路径, 后接文件路径; 生成的tls.p12内容为二进制

    2.6 p12和jks证书互转

    keytool为jdk工具

    p12 转为 jks:

    keytool -importkeystore -srckeystore tls.p12 -srcstoretype PKCS12 -deststoretype JKS -srcstorepass 输入密码口令 -deststorepass 输出密码口令 -destkeystore tls.jks
    

    jks 转为 p12:

    keytool -importkeystore -srckeystore tls.jks -srcstoretype JKS -deststoretype PKCS12 -srcstorepass 输入密码口令 -deststorepass 输出密码口令 -destkeystore tls.p12
    

    选项:

    • -importkeystore: 导入证书并输出指定证书
    • -srckeystore: 输入证书路径, 后跟输入证书路径
    • -destkeystore: 输出证书路径, 后跟输出证书路径
    • -srcstoretype: 输入证书类型, 后跟输入证书类型, PKCS12/JKS
    • -deststoretype: 输出证书类型, 后跟输出证书类型, JKS/PKCS12
    • -srcstorepass: 输入密码口令, 后接输入证书的密码口令
    • -deststorepass: 输出密码口令, 后接输出证书的密码口令

    2.7 证书查看

    keytool -list -v -storepass 密码口令 -keystore tls.jks
    

    选项:

    • -list: 证书更改或查看操作
    • -v: 详细输出
    • -storepass: 证书密码口令
    • -keystore: 证书路径, 后跟要查看的证书路径

    交互输出:

    Keystore type: jks
    Keystore provider: SUN
    
    Your keystore contains 1 entry
    
    Alias name: jeasoon
    Creation date: Oct 30, 2018
    Entry type: PrivateKeyEntry
    Certificate chain length: 1
    Certificate[1]:
    Owner: EMAILADDRESS=jeasoon@jeasoon.com, CN=*.jeasoon.com, O=Vixtel, L=Beijing, ST=Beijing, C=CN
    Issuer: EMAILADDRESS=jeasoon@jeasoon.com, CN=*.jeasoon.com, O=Vixtel, L=Beijing, ST=Beijing, C=CN
    Serial number: d561956d9762442a
    Valid from: Tue Oct 30 17:18:37 CST 2018 until: Fri Oct 27 17:18:37 CST 2028
    Certificate fingerprints:
             MD5:  28:82:FC:F2:05:DB:BD:7F:9A:30:3B:DC:92:0A:AF:BE
             SHA1: 62:EC:7A:D5:7A:4B:1C:67:A9:04:FD:8B:B7:4C:5E:9F:D4:7B:0A:8F
             SHA256: 15:20:DA:E2:0D:07:05:99:4F:5F:9C:AA:CF:8F:B3:68:E2:79:27:52:2E:34:52:7C:D5:F6:0E:5E:55:A6:5B:0F
    Signature algorithm name: SHA256withRSA
    Subject Public Key Algorithm: 2048-bit RSA key
    Version: 1
    
    
    *******************************************
    *******************************************
    
    
    
    展开全文
  • linux下,私有ssl证书生成器,通过提示的方式,自动根据域名生成私有ssl证书,包括crt,key
  • 使用Docker生成SSL证书

    2017-10-11 14:07:00
    本文讲的是使用Docker生成SSL证书【编者的话】学习如何使用Docker生成SSL证书,而不是在主机上生成。当听到“Docker”和“SSL”这两个词的时候,你很可能会认为是在说创建SSL证书来保护Docker daemon本身。这很重要...
    本文讲的是使用Docker生成SSL证书【编者的话】学习如何使用Docker生成SSL证书,而不是在主机上生成。

    当听到“Docker”和“SSL”这两个词的时候,你很可能会认为是在说创建SSL证书来保护Docker daemon本身。这很重要但是已经有很多文章详细介绍过了。或者你可能认为我们在讨论创建SSL证书供容器化的应用程序使用。如果你使用第三方工具(比如 这种 这种工具 )这也很简单。但是你知道吗,还可以使用Docker容器来为主机创建SSL证书?

    使用Docker生成SSL证书

    使用Docker生成SSL证书大多数开发人员并没有想这么做过。但是这么做很简洁也很方便。你可能会问为什么会想用Docker容器来为主机生成SSL证书呢。为什么不能在主机上完成呢?

    是的,可以在主机上完成。但是你必须已经在主机上安装了正确的工具(比如OpenSSL)。并且如果你想让Docker服务器尽可能简洁的话,你很可能不想安装类似OpenSSl这样的工具。另外,你可能并不是使用的生产环境Docker服务器,而是使用的Docker测试环境。如果你和我一样,那么这个测试环境实际上就是你的个人笔记本,很可能没有安装OpenSSL或者其他服务器工具。

    的确,我也可以apt-get来安装openssl包(或者apache2-utils),但是我不想把我的笔记本变成服务器。最重要的是,我想让事情尽可能简洁。这也正是容器一开始就这么吸引人的主要原因。

    从Docker容器生成SSL证书

    不在主机上生成证书,而是使用Docker容器生成SSL证书,这对我来说很好。也很简单,按照如下步骤即可。

    首先,使用Docker Hub  Nginx 镜像拉取一个支持SSL证书创建的容器镜像。该镜像已经内建安装了OpenSSL。(如果你的镜像没有包含OpenSSL,可以自行安装到镜像里,或者更简单地在启动容器时进行安装)。

    示例命令:
    docker pull nginx
    

    接下来,需要创建私钥和证书签署请求:
    docker run -v $PWD:/work -it nginx openssl req -out /work/CSR.csr -new 
    -newkey rsa:2048 -nodes -keyout /work/privateKey.key
    

    现在可以看到主机上的working目录包含文件privateKey.key和CSR.csr。如果想要使用它们创建自签名的证书,运行如下命令:
    docker run -v $PWD:/work -it nginx openssl req -x509 -sha256 -nodes 
    -days 365 -newkey rsa:2048 -keyout privateKey.key -out 
    /work/certificate.crt
    

    现在主机的working目录已经有了签名的证书, certificate.crt。

    好啦。我们已经使用OpenSSL创建出了SSL证书,而实际上并没有在主机系统上运行OpenSSL。

    更进一步

    使用上述命令还可以做更多事情。实际上,如果想要为Docker主机或者容器自动化SSL证书的创建,可以将这些命令集成进Dockerfile,然后使用它在使用Codefresh创建的容器化应用里构建SSL证书的创建。

    原文链接:Using Docker to Generate SSL Certificates(翻译:崔婧雯)  
    ===========================
    译者介绍

    崔婧雯,现就职于IBM,高级软件工程师,负责IBM WebSphere业务流程管理软件的系统测试工作。曾就职于VMware从事桌面虚拟化产品的质量保证工作。对虚拟化,中间件技术,业务流程管理有浓厚的兴趣。

    原文发布时间为:2016-10-30

    本文作者:崔婧雯

    本文来自云栖社区合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。

    原文标题:使用Docker生成SSL证书

    展开全文
  • Certbot 生成 ssl 证书

    千次阅读 2019-06-17 20:45:27
    certbot 是用来申请 Let's Encrypt 免费 SSL 证书 一般的免费 SSL 证书,好像都是使用 Let's Encrypt 颁发的证书。官网地址: https://letsencrypt.org/ Let's Encrypt 使用 ACME 协议来认证我们域名,并颁发证书...
    certbot 是用来申请 Let's Encrypt 免费 SSL 证书
    
    一般的免费 SSL 证书,好像都是使用 Let's Encrypt 颁发的证书。官网地址:
    	https://letsencrypt.org/
    
    Let's Encrypt 使用 ACME 协议来认证我们域名,并颁发证书。要获取 Let's Encrypt 证书,我们需要选择一个 ACME 客户端软件。官方推荐的是 Certbot。
    
    Certbot 官网地址:
    	https://certbot.eff.org
    
    安装 certbot,我们可以查看官方文档:
    	https://certbot.eff.org/docs/install.html
    
    简述下安装步骤:
    	最好的方式是:
    		使用官方给我们提供的 Certbot 包,在官网首页可以下载,选择对应的 web 服务和系统。例如,我的是:
    			Nginx + CentOS 7
    
    		然后下方就会给出我们详细的安装步骤:
    
    		/*
    			下面主要是官网的一些翻译
    		 */
    
    		安装
    			Certbot 是打包在 EPEL(Extra Packages for Enterprise Linux)。要使用 Certbot,我们必须首先启用 EPEL 仓库。在 RHEL 或 Oracle Linux,我们还必须开启可选的通道。
    				注意:
    					如果我们正在 EC2 上使用 EHEL,我们可以通过运行下面的命令来启用可选通道:
    						$ yum -y install yum-utils
    						$ yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional
    
    			之后,我们可以运行下面的命令来安装 Certbot:
    				$ sudo yum install certbot python2-certbot-nginx
    
    			安装 DNS 插件
    				Certbot 的 DNS 插件可用于我们的系统。这些插件可用于自动从 Let's Encrypt 的 ACMEv2 服务器获取通配符证书。要使用其中一个插件,我们必须为要获取证书的域名配置 DNS,该证书适用于 Certbot 具有插件的 DNS 提供程序。可以在链接('https://certbot.eff.org/docs/using.html#dns-plugins')找到插件列表,以及关于使用它们的更多信息。要安装插件,运行上面的安装命令,但需要将命令中 certbot python2-certbot-nginx 替换为 python2-certbot-dns-PLUGIN,其中 PLUGIN 是要安装的插件的名称。例如,对于 RFC2136 插件,命令应该是 python2-certbot-dns-rfc2136。
    
    		开始使用
    			Certbot 有一个 Nginx 插件, 在许多平台上都支持, 并自动进行证书安装。
    				$ sudo certbot --nginx
    
    			运行该命令,可以让我们获得一个证书, 而且 Certbot 会自动编辑我们的 Nginx 配置来提供服务。如果我们希望自己手动来配置 Nginx,可以使用 certonly 子命令:
    				$ sudo certbot --nginx certonly
    
    			如果我们想要使用 Let's Encrypt 新的 ACMEv2 服务,来获取一个 '通配符' 证书,我们还需要安装 Certbot 的 DNS 插件。确保我们已经通过上面的 '安装 DNS 插件' 说明,安装了 DNS 服务,并运行下面的命令:
    				$ sudo certbot -a DNS插件名 -i nginx -d "*.example.com" -d example.com --server https://acme-v02.api.letsencrypt.org/directory
    
    			自动续订
    				Certbot 可以配置为,在证书过期之前自动续订。因为 Let's Encrypt 证书的有效期是 90 天,因此我们需要在过期前,重新续订。可以运行下面的命令来测试证书的自动续订:
    					$ sudo certbot renew --dry-run
    
    				如果上面命令没有报错,我们可以通过添加一个 cron job 或 systemd timer 运行下面的命令,来支持自动续订:
    					certbot renew
    
    					注意:
    						如果我们配置了一个 cron 或 systemd job,建议每天运行2次(在我们的证书续订或撤销之前,它不会执行任何操作。但定期运行,将使我们的网站有机会保持在线状态,以防 Let's Encrypt 由于某种原因异常触发了撤销)。
    
    				下面是一个 cron job 示例,每天的中午和半夜运行:
    					0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew 
    
    		DNS 插件
    			如果想要从 Let's Encrypt 上获取通配符证书,或在目标 Web 服务器以外的计算机上运行 certbot,可以使用 Certbot 的 DNS 插件之一。
    
    			这些插件不包含在默认的 Certbot 安装中,必须单独安装。虽然 DNS 插件当前不能与 certbot-auto 一起使用,但它们在许多 OS 包管理器和 Docker 镜像中都可以使用。访问 https://certbot.eff.org,了解我们系统上使用 DNS 插件的最佳方法。
    
    			安装完成后,我们可以在下方的链接中,找到关于如何使用每个插件的文档:
    				...
    				文档列表
    				...
    
    			手动插件(manual)
    				如果想要在目标 web 服务器以外的机器上运行 certbot 来获取证书,或者自己执行域名验证步骤,我们可以使用 'manual' 插件。没有图形化界面,我们可以通过在命令行上指定 certbot 和 --manual,使用该插件来获取证书。这要求我们复制和粘贴命令到另一个终端会话,该会话可能在另一台机器上。
    
    				manual 插件可以使用 http 或 dns challenge(挑战)。我们可以使用 --preferred-challenges 选项来指定我们想要的 challenge
    
    				http challenge 要求我们,将包含指定名称和指定内容的文件,直接放到顶级目录(web 根目录)下的 '/.well-known/acme-challenge/' 目录。本质上,同 webroot 插件一样,但是不是自动的。
    
    				当使用 dns challenge 时,certbot 将要求我们在域名下,放置一条包含了指定内容的 TXT DNS 记录。包含我们希望颁发证书的主机名,由 '_acme-challenge' 预先设置。
    
    				例如,对于 example.com 域名,文件条目如下所示:
    					_acme-challenge.example.com. 300 IN TXT "gfj9Xq...Rg85nM"
    
    				此外,我们可以通过使用 --manual-auth-hook 和 --manual-cleanup-hook 标志,指定脚本,用于准备验证&执行身份认证程序,和(/或)在其后进行清理。这在钩子部分中有更深入的描述。
    
    			结合插件
    				有时候我们可能想要将不同的身份认证程序和安装器程序结合起来。为此,我们可以使用 --authenticator 或 -a 来指定身份认证插件,使用 --installer 或 -i 来指定安装器插件
    
    				例如,我们可以使用,用于身份认证的 webroot 插件,和用于安装的 apache 插件,来生成证书。
    					certbot run -a webroot -i apache -w /var/www/html -d example.com
    
    				或者,我们可以使用,用于身份认证的 manual 插件,和用于安装的 nginx 插件,来生成证书。
    					certbot run -a manual -i nginx -d example.com
    
    			第三方插件
    				其他开发人员也提供了许多针对客户端的第三方插件。许多是测试/实验版本,但有些已经广泛使用
    					...
    					第三方插件列表
    					...
    	certbot-auto(简单了解下)
    		安装 certbot-auto
    			https://certbot.eff.org/docs/install.html#id6
    
    		如果上面安装 certbot 的方法不可用,才使用 certbot-auto,它会在我们的系统上自动安装 Certbot:
    			系统要求:
    				Python 2.7 或 3.4+,运行在类 unix 系统					
    
    				默认需要 root 权限,因为要写入到 /etc/letsencrypt, /var/log/letsencrypt, /var/lib/letsencrypt。绑定到 80 和 443 端口(如果使用 standalone 插件),读取并修改 web 服务器配置(如果使用 apache 或 nginx 插件)。
    
    				如果避免用 root 用户来运行 ACME 客户端,可以选择 letsencrypt-nosudo(https://github.com/diafygi/letsencrypt-nosudo) 或 simp_le(https://github.com/zenhack/simp_le)
    
    				Apache 插件当前需要 augeas 1.0 版本的操作系统;当前支持基于 Debian, Fedora, SUSE, Gentoo 和 Darwin 的现代操作系统.
    
    				此外,可以通过验证 certbot-auto 脚本的数字签名来验证它是否完整。这需要安装 gpg2,在许多 Linux 分发版中存在,以 gnupg 或 gnupg2 命名。
    
    				使用 certbot-auto 安装,需要 512MB 的 RAM,来构建依赖。通过预构建的系统包来安装,可以避免该问题。我们也可以临时设置一个交换文件(swap file)。查看下面的 'Python 虚拟环境问题' 获取更多信息。
    
    			安装 certbot-auto:
    				wget https://dl.eff.org/certbot-auto
    				sudo mv certbot-auto /usr/local/bin/certbot-auto
    				sudo chown root /usr/local/bin/certbot-auto
    				chmod 0755 /usr/local/bin/certbot-auto
    				/usr/local/bin/certbot-auto --help
    
    					
    			检查脚本完整性:
    				wget -N https://dl.eff.org/certbot-auto.asc
    				gpg2 --keyserver pool.sks-keyservers.net --recv-key A2CFB51FA275A7286234E7B24D17C995CD9775F2
    				gpg2 --trusted-key 4D17C995CD9775F2 --verify certbot-auto.asc /usr/local/bin/certbot-auto
    
    			certbot-auto 命令自动更新到最新的客户端版本。由于 certbot-auto 是 certbot 的包装器,它接受与 certbot 完全一样的标志和参数。更多信息,查看 certbot 命令行选项(https://certbot.eff.org/docs/using.html#command-line-options)
    
    			要获得完整的命令行帮助,可以输入:
    				./certbot-auto --help all
    
    	看文档,外加查找资料,最终配置成功。这里记录下每一个步骤,以后按照这个步骤安装、配置即可:
    		1.安装 certbot
    			访问首页:https://certbot.eff.org,选择我们使用的 web 服务和操作系统,然后会给出默认的安装命令
    
    			这里以 'nginx' 和 'centos7' 为例:
    				yum -y install yum-utils
    
    				在 RHEL 或 Oracle Linux 上,还需要执行(我们使用的 centos 不需要):
    					yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional
    					yum install certbot python2-certbot-nginx
    
    				// 注意,这里安装的是 nginx 插件
    				yum install certbot python2-certbot-nginx
    
    		2.通过 certbot 生成证书
    			certbot --nginx certonly [-d 域名1,域名2]
    
    			1>参数解析,很重要:
    				--nginx - 表示我们之前选择的 nginx 服务
    
    				certonly - 默认 certbot 会自动修改我们 nginx 的配置,添加上 ssl 配置,我们想要手动配置 ssl,就需要设置该选项
    
    				-d - 指定域名,可以同时指定多个,以 ',' 分隔
    
    			2>此外,直接运行上述命令,可能会报错:
    				Error while running nginx -c /usr/local/nginx/nginx.conf -t
    
    				原因:
    					找不到 nginx 配置文件,默认 certbot 会找 /etc/nginx/nginx.conf 配置文件
    					我们配置的 nginx 位置可能不同,需要改成自己的 nginx 路径
    
    				解决方法:
    					查看 certbot 帮助,应该提供了修改路径的选项
    
    					certbot -h 			// certbot 命令帮助
    
    					certbot -h nginx 	// nginx 插件帮助
    						提供了2个选项:
    							--nginx-server-root
    								nginx 服务根目录,默认是 '/etc/nginx'
    
    								/*
    									这里还是个坑,因为 certbot 好像只是找 nginx.conf,所以,当我们的配置文件,不是放在 nginx 的根目录,仍然找不到
    
    									所以,这里应该是 'nginx 配置文件所在的目录'
    
    									例如,我的 nginx 配置路径是:
    										/usr/local/nginx/conf/
    								 */
    
    							--nginx-ctl
    								nginx 命令二进制文件名,默认是 'nginx'
    
    				所以,我们最终的命令是:
    					certbot --nginx certbot --nginx-server-root /usr/local/nginx/conf/
    
    
    			3>执行可能还会报错:
    				ImportError: No module named 'requests.packages.urllib3'
    
    				原因:
    					requests库版本问题
    
    				解决方法:
    					sudo pip install requests urllib3 pyOpenSSL --force --upgrade
    					sudo pip install --upgrade --force-reinstall 'requests==2.6.0'
    
    			4>期间可能还会发生报错:
    				UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 1: ordinal not in range(128)
    
    				原因:
    					nginx.conf 出现特殊字符
    
    				解决方法:
    					参考:https://github.com/certbot/certbot/issues/5236
    					grep -r -P '[^\x00-\x7f]' /usr/local/nginx/conf/nginx.conf
    					或
    					grep -r -P '[^\x00-\x7f]' /usr/local/nginx/conf/vhosts/xxx.conf(虚拟主机配置)
    
    					上面的命令是,查看有没有 \x00-\x7f 的特殊字符,有的话,将特殊字符删除(中文就是一种特殊字符)
    
    		3.续订证书
    			certbot renew 						// 续订所有证书
    			certbot renew --cert-name 证书名 	// 续订 '指定证书'
    
    			// 查看 renew 子命令
    			certbot -h renew 
    
    		4.自动续订证书
    			因为 Let's Encrypt 证书有效期为 3 个月,我们不可能实时查看,需要配置一个计划任务,在过期前,自动续订:
    				0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew
    
    		5.申请 '通配符' 证书
    			上面的流程,只能申请指定域名的证书。如果我们想要申请 '通配符' 证书,还需要安装额外的 ' DNS 插件'。
    
    			插件列表在 'https://certbot.eff.org/docs/using.html#dns-plugins' 可以查看到
    
    			里面列出的插件基本都是国外的,我们可能都不适用。
    
    			官方也提供了一个 'manual - 手动认证插件'(这个我没自己测试)
    				certbot certonly --nginx -d 通配符域名(*.xxx.com) --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory
    
    			但是手动的方式,有问题,就是自动续订,过期了,还需要 '手动认证'...,没法做到自动生成
    
    			但是,官方提供了 '--manual-auth-hook' 和 '--manual-cleanup-hook' 2个钩子,我们可以写脚本来实现自动生成(参考下方笔记 6)
    
    		6.在网上找了个文章,写的非常好,推荐下:
    			https://www.cnblogs.com/redirect/p/10140248.html
    
    			它里面提到了一个 'manual' dns 插件脚本,可以帮我们自动订阅 '通配符' 证书,地址:
    				https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au
    
    			里面需要注意的是
    				1>文档使用的是 certbot-auto,我们安装的是 certbot,两者命令是一致的。certbot-auto 是对 certbot 的封装。
    
    				2>au.sh 脚本,我们需要配置下
    					1>我服务器是 '腾讯云',需要配置 '腾讯云' 的 APP_KEY(key) 和 APP_SECRET(token)
    					2>我使用的是 php 脚本,配置下 php 命令路径
    
    			列出所有命令:
    				1>安装
    					cd ~ && mkdir src && cd src
    					git clone https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au
    					cd certbot-letencrypt-wildcardcertificates-alydns-au
    					chmod 0777 au.sh 
    
    				2.配置 DNS API 秘钥
    					需要在不同的云平台申请(见文档)
    
    				3.配置 au.sh
    					key
    					token
    					php_cmd
    
    				4.测试申请证书(有 --dry-run 选项)
    					certbot certonly  -d *.xxx.com --manual --preferred-challenges dns --dry-run --manual-auth-hook "/root/src/certbot-letencrypt-wildcardcertificates-alydns-au/au.sh php txy add" --manual-cleanup-hook "/root/src/certbot-letencrypt-wildcardcertificates-alydns-au/au.sh php txy clean"
    
    				5.测试无误,正式申请证书(去除 --dry-run 选项)
    					certbot certonly  -d *.xxx.com --manual --preferred-challenges dns --manual-auth-hook "/root/src/certbot-letencrypt-wildcardcertificates-alydns-au/au.sh php txy add" --manual-cleanup-hook "/root/src/certbot-letencrypt-wildcardcertificates-alydns-au/au.sh php txy clean"
    
    				6.配置自动续订,加入命令到 crontab
    					# 注意只有成功renew证书,才会重新启动nginx
    					1 1 */1 * * root certbot renew --manual --preferred-challenges dns --deploy-hook "service nginx restart" --manual-auth-hook "/root/src/certbot-letencrypt-wildcardcertificates-alydns-au/au.sh php txy add" --manual-cleanup-hook "/root/src/certbot-letencrypt-wildcardcertificates-alydns-au/au.sh php txy clean" 
    
    参考文章:
    	https://www.cnblogs.com/redirect/p/10140248.html(非常不错)
    	https://www.seanzhao.me/2018/06/21/certbot-manual.html#%E4%BF%AE%E6%94%B9%E6%9B%B4%E6%96%B0%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6					
    	https://blog.csdn.net/diyiday/article/details/82791663
    	https://www.seanzhao.me/2018/06/21/certbot-manual.html#%E4%BF%AE%E6%94%B9%E6%9B%B4%E6%96%B0%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6
    

     

    展开全文
  • openssl 生成 SSL证书

    千次阅读 2017-02-22 16:57:41
    openssl 生成 SSL证书 x509证书一般会用到三类文,key,csr,crt。 Key 是私用密钥openssl格,通常是rsa算法。 Csr 是证书请求文件,用于申请证书。在制作csr文件的时,必须使用自己的私钥来签署申,还可以设定一...

    openssl 生成 SSL证书

    x509证书一般会用到三类文,key,csr,crt。

    Key 是私用密钥openssl格,通常是rsa算法。

    Csr 是证书请求文件,用于申请证书。在制作csr文件的时,必须使用自己的私钥来签署申,还可以设定一个密钥。

    crt是CA认证后的证书文,(windows下面的,其实是crt),签署人用自己的key给你签署的凭证。

     

    1.key的生成

    openssl genrsa-des3 -out server.key 2048

    这样是生成rsa私钥,des3算法,openssl格式,2048位强度。server.key是密钥文件名。为了生成这样的密钥,需要一个至少四位的密码。可以通过以下方法生成没有密码的key:

    openssl rsa -inserver.key -out server.key

     

    server.key就是没有密码的版本了。

     

    2. 生成CAcrt

    openssl req -new-x509 -key server.key -out ca.crt -days 3650

    生成的ca.crt文件是用来签署下面的server.csr文件。

     

    3. csr的生成方法

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

    需要依次输入国家,地区,组织,email。最重要的是有一个common name,可以写你的名字或者域名。如果为了https申请,这个必须和域名吻合,否则会引发浏览器警报。生成的csr文件交给CA签名后形成服务端自己的证书。

     

    4. crt生成方法

    CSR文件必须有CA的签名才可形成证书,可将此文件发送到verisign等地方由它验证,要交一大笔钱,何不自己做CA呢。

    openssl x509 -req-days 3650 -in server.csr -CA ca.crt -CAkey server.key -CAcreateserial -outserver.crt

    输入key的密钥后,完成证书生成。-CA选项指明用于被签名的csr证书,-CAkey选项指明用于签名的密钥,-CAserial指明序列号文件,而-CAcreateserial指明文件不存在时自动生成。

    最后生成了私用密钥:server.key和自己认证的SSL证书:server.crt

    证书合并:

    cat server.keyserver.crt > server.pem

    展开全文
  • JDK自带工具keytool生成ssl证书

    万次阅读 2016-11-16 15:05:49
    JDK自带工具keytool生成ssl证书   前言: 因为公司项目客户要求使用HTTPS的方式来保证数据的安全,所以木有办法研究了下怎么生成ssl证书来使用https以保证数据安全。 百度了不少资料,看到JAVA的JDK自带生成SSL证书...
  • Shell脚本一键生成SSL证书

    千次阅读 2020-07-07 15:19:13
    这几天做EMQ的SSL认证,ssl证书一条一条执行创建命令太麻烦,写个Shell脚本,一键生成ssl证书。 创建脚本文件 sudo vim create.sh 脚本内容 #!/bin/bash client_ip=192.168.1.3 # 生成文件目标路径 dir=/var/...
  • 它通过ACME协议为代理的Docker容器处理SSL证书自动创建,更新和使用。 如果使用latest版本,则必读:此项目的v2.0.0版本标记了Docker镜像所使用的ACME客户端从到 此开关会导致某些向后不兼容的更改,因此在更新...
  • linux 生成ssl证书

    千次阅读 2017-04-07 14:26:26
    证书文件生成: 一.服务器端 1.生成服务器端的私钥(key文件); openssl genrsa -des3 -out server.key 1024 运行时会提示输入密码,此密码用于加密key文件(参数des3是加密算法,也可以选用其他安全的算法),以后每当...
  • Openssl生成ssl证书

    2019-02-22 09:23:43
    x509证书一般会用到三类文,key,csr,crt。 Key 是私用密钥openssl格,通常是rsa算法。 Csr 是证书请求文件,用于申请证书。在制作csr文件的时,必须使用自己的私钥来...key的生成 openssl genrsa -des3 -out s...
  • 使用JDK自带工具keytool生成ssl证书

    万次阅读 多人点赞 2018-05-17 14:36:39
    使用JDK自带工具keytool生成ssl证书 HTTPS简介 超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩写:HTTPS,常称为HTTP over TLS,HTTP over SSL或HTTP Secure)是一种网络安全传输协议。...
  • JDK自带工具keytool生成ssl证书 前言: 因为公司项目客户要求使用HTTPS的方式来保证数据的安全,所以木有办法研究了下怎么生成ssl证书来使用https以保证数据安全。 百度了不少资料,看到JAVA的JDK自带生成SSL...
  • ssl-proxy通过单个命令自动生成SSL证书和代理HTTPS流量到现有HTTP服务器。 用法 带有自动自签名证书 ssl-proxy -from 0.0.0.0:4430 -to 127.0.0.1:8000 这将立即生成自签名证书,并开始将HTTPS流量从代理到 。 ...
  • k8s dashboard 一键生成ssl证书脚本

    千次阅读 2019-01-25 19:36:45
    k8s dashboard 一键生成ssl证书脚本 #!/bin/bash openssl genrsa -out ca.key 2048 openssl req -new -x509 -key ca.key -out ca.crt -days 3650 -subj &quot;/C=CN/ST=HB/L=WH/O=DM/OU=YPT/CN=CA&quot; ...
  • 生成SSL证书的方法

    千次阅读 2017-06-02 14:24:52
    #!/bin/sh #================================生成CA=============================== #生成ca和私钥 openssl genrsa -aes256 -passout pass:*****...#生成ca证书请求and自签名 openssl req -new -x509 -sha256 -day...
  • 【51CTO.com快译】在今天的文章中,我们将突破依靠主机实现SSL证书的局限,了解如何利用Docker生成此类证书。 当说起“Docker”与“SSL”,很多朋友首先想到的可能是利用SSL证书以保护Docker守护程序自身。没错,这...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 37,682
精华内容 15,072
关键字:

自动生成ssl证书