IceDream's Blog
RSS Feed

Articles

  • JFrog Artifactory Pro 部署

    MariaDB 安装

    Artifactory 支持多种数据库,这里选择 MariaDB。

    官方下载页面有安装包的下载及安装说明:https://downloads.mariadb.org/mariadb/10.3.10/

    例如基于 yum 的自动安装:

    /etc/yum.repos.d/ 下添加 MariaDB.repo,内容为:

    [mariadb]
    name = MariaDB
    baseurl = http://yum.mariadb.org/10.1/centos7-amd64
    gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
    gpgcheck=1
    

    接着再安装服务器和客户端:

    sudo yum install MariaDB-server MariaDB-client
    

    Artifactory Pro 安装

    管网上可以申请到 Pro 版的试用授权,并会提供下载地址。

    包的安装见管网,已经讲的很清楚了:https://jfrog.com/download-artifactory-pro/

    安装完之后,Artifactory 的安装目录位于/opt/jfrog/artifactory,后面说明都将基于这个目录。另外,它的数据及备份是保存于/var/opt/jfrog/artifactory;所以,如果有单独的用于保存数据的分区,要记得把这个目录符号链接到数据分区。

    misc/db/createdb/createdb_mariadb.sql用于创建 artifactory 数据库及用户。里面的密码虽然使用的是默认的password,但没关系,Artifactory 会自动将该用户的密码改成高复杂度密码。

    接着将misc/db/mariadb.properties文件复制到etc目录,并改名为db.properties。注意,这里的etc不是根目录下的etc,而是位于安装目录,如果不存在etc目录,则自行新建。

    启动 Artifactory:

    CentOS: sudo /etc/init.d/artifactory start

    Ubuntu: sudo service artifactory start

    管理员初始密码为:password

    针对 docker 的修改

    默认的配置是不能用于 docker 的。 操作步骤如下:

    1. 以管理身份登录 Artifactory,并打开HTTP Settings
    2. Docker Access Method改为Port
    3. Server Provider改为Nginx
    4. 其他设置,看着改。一定要勾选Use HTTPS,因为 docker 会自动转到 HTTPS;SSL 证书生成可以参考用于 Web 服务器的 SSL 证书生成
    5. 以上设置好之后,点Save
    6. Download,下载 Nginx 的配置文件。
    7. 在配置文件中增加rewrite ^/(v1|v2)/(.*) /artifactory/api/docker/docker/$1/$2;
    8. 将配置文件复制到/etc/nginx/conf.d/下。
    9. 重启 Nginx。

    Read More »

  • 用于 Web 服务器的 SSL 证书生成

    简介

    用于 Web 服务器的 SSL 证书需要包含 SAN 信息;如果没有包含 SAN 信息,则有些客户端会提示错误: x509: cannot validate certificate for x.x.x.x because it doesn't contain any IP SANs

    用 keytool 生成

    keytool 工具是 Java 提供的用于生成证书的工具,位于 $JAVA_HOME/bin 下。 证书生成命令:

    # keytool -genkey -alias tomcat -keyalg RSA -ext SAN=IP:x.x.x.x
    

    如果不是 IP,而是域名的话:

    # keytool -genkey -alias tomcat -keyalg RSA -ext SAN=DNS:test.example.com
    

    用 openssl 生成

    参考 基于 OpenSSL 自建 CA 和颁发 SSL 证书 。 在 openssl.conf 中添加:

    [SAN]
    subjectAltName=@alt_names
    
    [alt_names]
    IP.1 = x.x.x.x
    IP.2 = x.x.x.x
    DNS.3 = xxx.xxx.xxx
    DNS.4 = xxx.xxx.xxx
    

    生成证书签署请求

    # openssl req -new -key tomcat.key -out tomcat.csr -reqexts SAN
    

    根据请求来签署证书

    # openssl ca -in tomcat.csr -out tomcat.crt -extensions SAN
    

    参考

    SSL/TLS Configuration HOW-TO

    基于 OpenSSL 自建 CA 和颁发 SSL 证书

    OpenSSL SAN 证书

    Read More »

  • (转,改) 基于 OpenSSL 自建 CA 和颁发 SSL 证书

    转载并修改自:http://seanlook.com/2015/01/18/openssl-self-sign-ca/

    关于 SSL/TLS 介绍见文章 SSL/TLS原理详解

    关于证书授权中心CA以及数字证书等概念,请移步 OpenSSL 与 SSL 数字证书概念贴

    openssl 是一个开源程序的套件、这个套件有三个部分组成:一是libcryto,这是一个具有通用功能的加密库,里面实现了众多的加密库;二是libssl,这个是实现 ssl 机制的,它是用于实现 TLS/SSL 的功能;三是 openssl,是个多功能命令行工具,它可以实现加密解密,甚至还可以当 CA 来用,可以让你创建证书、吊销证书。

    默认情况 ubuntu 和 CentOS 上都已安装好 openssl。CentOS 6.x 上有关 ssl 证书的目录结构:

    /etc/pki/CA/
                newcerts    存放CA签署(颁发)过的数字证书(证书备份目录)
                private     用于存放CA的私钥
                crl         吊销的证书
    
    /etc/pki/tls/
                 cert.pem    软链接到certs/ca-bundle.crt
                 certs/      该服务器上的证书存放目录,可以房子自己的证书和内置证书
                 ca-bundle.crt    内置信任的证书
                 private    证书密钥存放目录
                 openssl.cnf    openssl的CA主配置文件
    

    Read More »

  • Windows 下不污染环境安装 Rust 编译器

    如果你用 CI (持续集成系统) 自动构建你的程序,又由于历史原因要使用不同版本的 Rust 编译,那么就不希望环境受污染,Docker 是一种不错的选择,这里提供另一种选择。

    Rust 对 Windows 提供了 rustup-init.exe、xxx-pc-windows-msvc.msi、xxx-pc-windows-msvc.tar.gz 三种安装方式。rustup-init.exe 会自动安装到 %USERPROFILE%\.cargo,并配置了环境变量。xxx-pc-windows-msvc.msi 可以指定安装目录,但会自动配置环境变量、需要管理员身份运行、用命令行又不能指定安装路径。最后只有 xxx-pc-windows-msvc.tar.gz 是可行的。

    xxx-pc-windows-msvc.tar.gz 是通过执行 install.sh 的 Shell 脚本来进行安装,因此,需要一个能执行 Shell 脚本的环境,可以选择 MSYS、Cygwin、WSL 等。执行 install.sh 时,通过 --prefix 参数设定安装目录。假设 Rust 根目录为 D:\rust。安装命令如下:

    $ cd D:
    $ mkdir rust
    $ mkdir rust\bin
    $ mkdir rust\toolchains
    bash -c "./install.sh --prefix=/d/rust/toolchains/xxx-pc-windows-msvc"
    

    下载 rustup-init.exe 并将其重命名成 cargo.execargo-clippy.execargo-fmt.execlippy-driver.exerls.exerustc.exerustdoc.exerustfmt.exerustup.exe 到 D:\rust\bin 。

    这样子安装就可以了,不会污染环境。

    使用时,将安装目录下的 bin 目录设置到 PATH 环境变量中,设置 RUSTUP_HOMECARGO_HOME 环境变量为安装目录,就可以了。

    Read More »

  • restbed 自定义 Header 控制接口版本

    自定义 Header 方式控制 Restful 接口版本是一种常用的做法,restbed 可以通过过滤器来实现。

    restbed 的过滤器有个设定,如果不存在相应的 Header,则自动使用第一个 handler。所以,则个设定可以用于默认版本;如果不想要默认版本,那可以将第一个 handler 设为错误处理函数,或添加个 Rule 来处理。

    例子:

    #include <memory>
    #include <cstdlib>
    #include <restbed>
    
    using namespace std;
    using namespace restbed;
    
    void get_method_handler_v1(const shared_ptr<Session> session)
    {
    	const auto request = session->get_request();
    	printf("%s\n", __FUNCTION__);
    	session->close(OK, __FUNCTION__);
    }
    
    void get_method_handler_v2(const shared_ptr<Session> session)
    {
    	const auto request = session->get_request();
    	printf("%s\n", __FUNCTION__);
    	session->close(OK, __FUNCTION__);
    }
    
    void failed_filter_validation_handler(const shared_ptr<Session> session)
    {
    	session->close(400);
    }
    
    int main(const int, const char**)
    {
    	auto resource = make_shared<Resource>();
    	resource->set_path("/resource");
    	resource->set_failed_filter_validation_handler(&failed_filter_validation_handler);
    	resource->set_method_handler("GET", { { "X-Api-Version", "v1" } }, &get_method_handler_v1);
    	resource->set_method_handler("GET", { { "X-Api-Version", "v2" } }, &get_method_handler_v2);
    
    	auto settings = make_shared<Settings>();
    	settings->set_port(1984);
    	settings->set_default_header("Connection", "close");
    
    	Service service;
    	service.publish(resource);
    	service.start(settings);
    
    	return EXIT_SUCCESS;
    }
    

    Read More »