专注于前端开发, 追求更好的用户体验, 更好的开发体验 [长沙前端QQ群:234746733]

https

  • Mac自签名ssl证书, 绑定域名启用https

    / 分类: 工具,实践 / No Comments

    生成root CA(仅需一次)

    自签名证书, IOS 13/macOS 10.15有了新规定, 所以需要按如下方式生成.

    1. # 多个域名都可以用root CA签名
    2. mkdir ~/.ssl; cd ~/.ssl;
    3. openssl genrsa -out rootca.key 2048;
    4. openssl req -new -key rootca.key -out rootca.csr -sha256 -subj "/CN=Dev Root CA"
    5. echo "basicConstraints=CA:true" > rootca.cnf;
    6. openssl x509 -req -in rootca.csr -signkey rootca.key -out rootca.crt -extfile rootca.cnf -sha256 -days 825;
    7. open rootca.crt; # Mac钥匙串 打开(或, 双击文件名)
    8. # 钥匙串: 搜索 Dev Root CA, 双击证书, 设置始终信任 (Trust - When using this certificate: Always Trust).
    9. # for Android:
    10. # openssl x509 -inform PEM -outform DER -in rootca.crt -out rootca.der.crt

    创建本地ssl证书(使用lvh.me域名)

    1. openssl req -new -newkey rsa:2048 -nodes -keyout lvh.me.key -out lvh.me.csr -sha256 -subj "/CN=lvh.me"
    2. cat > domain.cnf <<-EOF
    3. authorityKeyIdentifier=keyid,issuer
    4. basicConstraints=CA:false
    5. keyUsage=digitalSignature,keyEncipherment,dataEncipherment
    6. extendedKeyUsage=serverAuth,clientAuth
    7. subjectAltName=@alt_names
    8. [alt_names]
    9. DNS.1=lvh.me
    10. DNS.2=*.lvh.me
    11. DNS.3=*.test.lvh.me
    12. EOF
    13. # 使用root CA签名
    14. openssl x509 -req -in lvh.me.csr -out lvh.me.crt -extfile domain.cnf -CA rootca.crt -CAkey rootca.key -CAcreateserial -sha256 -days 825

    lvh.me 是一个指向127.0.0.1的泛域名服务, 优点: 不需要改DNS/hosts, 各项目使用不同的域名方便隔离(比如cookies/密码管理器). 类似的还有xip.io, nip.io, localtest.me, fuf.me, vcap.me等.

    使用Apache或Nginx 绑定域名

    • 使用Apache

      1. # 1. 编辑 `/etc/apache2/httpd.conf`
      2. # 注释掉 这些行:
      3. LoadModule mpm_prefork_module libexec/apache2/mod_mpm_prefork.so
      4. Include /private/etc/apache2/extra/httpd-ssl.conf
      5. # 最下面添加:
      6. Listen 443
      7. ServerName localhost
      8. LoadModule mpm_event_module libexec/apache2/mod_mpm_event.so
      9. LoadModule proxy_module libexec/apache2/mod_proxy.so
      10. LoadModule proxy_http_module libexec/apache2/mod_proxy_http.so
      11. LoadModule macro_module libexec/apache2/mod_macro.so
      12. LoadModule ssl_module libexec/apache2/mod_ssl.so
      13. LoadModule socache_shmcb_module libexec/apache2/mod_socache_shmcb.so
      14. LoadModule http2_module libexec/apache2/mod_http2.so
      15. Include /Users/leon/.ssl/httpd-vhosts.conf

      16. # 2. 编辑 ~/.ssl/httpd-vhosts.conf, 增加:
      17. <Macro SSLLvh>
      18.   SSLEngine on
      19.   SSLCertificateFile /Users/leon/.ssl/lvh.me.crt
      20.   SSLCertificateKeyFile /Users/leon/.ssl/lvh.me.key
      21.   Protocols h2 http/1.1
      22. </Macro>
      23. <Macro Test>
      24.   ServerName test.lvh.me
      25.   ProxyRequests off
      26.   <Location />
      27.     ProxyPass http://localhost:3000/
      28.     ProxyPassReverse http://localhost:3000/
      29.   </Location>
      30. </Macro>
      31. <VirtualHost *:80>
      32.   Use Test
      33. </VirtualHost>
      34. <VirtualHost *:443>
      35.   Use SSLLvh
      36.   Use Test
      37. </VirtualHost>
      38. <Macro Demo>
      39. # ...
      40. </Macro>
      41. <VirtualHost *:443>
      42.   Use SSLLvh
      43.   Use Demo
      44. </VirtualHost>

      45. # 3. 启动Apache
      46. # sudo apachectl configtest # test
      47. sudo apachectl -k restart # 启动
      48. # sudo apachectl -e debug # print errors
      49. # sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist # 开机启动

    查看全文 »

  • 使用letsencrypt自动生成和续期HTTPS证书

    / 分类: 工具,实践 / No Comments

    相信一些同学注意到了, 本站启用了https, 域名改成了xhl.me, 服务也早就全都改用docker了.
    顺带介绍下之前搞的两个个docker项目: alpine-tengine, docker-backup.

    *本文主要介绍letsencrypt证书的创建和通配符HTTPS证书生成, 还有基于letsencrypt docker镜像实现证书自动续期.

    Let's Encrypt 是一个自动签发免费HTTPS证书的非营利机构, 生成的证书有3个月有效期, 到期可以免费续期.
    Certbot 是 Let's Encrypt 官方推荐的生成证书的客户端工具, 文档.

    使用dnsrobocert生成证书(支持通配符域名证书), 并自动续期

    这个项目, 集成了certbot(证书生成命令行工具), Lexicon(DNS记录修改工具, 主流DNS服务商都支持).
    另外还自带了crontab 定时任务, 只要服务启动, 就会自动续期域名了.

    1. 创建, /etc/dnsrobocert/config.yml, 内容类似这样:
    1. # https://git.io/JL1cD
    2. draft: false
    3. acme:
    4.   email_account: <youremail>
    5.   staging: false
    6. profiles:
    7. - name: cloudflare
    8.   provider: cloudflare
    9.   provider_options:
    10.     auth_username: <cloudflare_email>
    11.     auth_token: <cloudflare_token>
    12. - name: dnspod
    13.   provider: dnspod
    14.   provider_options:
    15.     auth_username: <dnspod_id>
    16.     auth_token: <dnspod_token>
    17. certificates:
    18. - domains:
    19.   - "*.xhl.me"
    20.   -  xhl.me
    21.   profile: cloudflare
    22.   # autorestart:
    23.   #   - containers:
    24.   #     - nginx
    25.   autocmd: # 自动重启
    26.     - cmd: nginx -s reload
    27.       containers:
    28.       - nginx
    29. # - domains:
    30. #   - "*.test.com"
    31. #   profile: dnspod
    32. #   ...
    2. 根据DNS PROVIDER信息验证, 并自动创建和续期证书
    1. docker run -it --rm --name letsencrypt2 \
    2.   -v /etc/dnsrobocert:/etc/dnsrobocert \
    3.   -v /etc/letsencrypt:/etc/letsencrypt \
    4.   -v /var/run/docker.sock:/var/run/docker.sock \
    5.   adferrand/dnsrobocert

    LEXICON_PROVIDER 主流的DNS服务都支持, 比如:

    查看全文 »