conan使用记录

Conan是一个C++的包管理工具,使用了它有一段时间了,记录一下它的安装和使用的一些关键步骤。下面主要记录了服务器的部署和客户端添加CA证书的步骤,服务器的版本的是6.16.0,最新的7.x版本增加了一些图表统计功能,阉割了一些设置的功能如http设置。这是我部署好的服务器: https://home.xuexuesoft.com:8081/artifactory/webapp/#/home

1.安装软件

客户端

使用pip安装即可。

服务器

服务器端是Artifactory社区版。安装见: https://www.jfrog.com/confluence/display/JFROG/Installing+Artifactory
服务器端的conan-remote仓库可以有缓存conan-center的作用,见: https://www.jfrog.com/confluence/display/JFROG/Conan+Repositories
服务器端安装好之后,可以看到它是自带一个tomcat的。它实际上是运行了artifactory.bat文件启动,为了防止和系统的一些环境变量相冲突,在这个文件里手动添加一些环境变量的指定。

set JFROG_HOME=C:\Soft\artifactory-cpp-ce-6.16.0
set JRE_HOME=C:\JDK\jdk-12
set JAVA_HOME=C:\JDK\jdk-12
set CATALINA_BASE=C:\Soft\artifactory-cpp-ce-6.16.0\bin\..\tomcat
set CATALINA_HOME=C:\Soft\artifactory-cpp-ce-6.16.0\bin\..\tomcat
set CATALINA_TMPDIR=C:\Soft\artifactory-cpp-ce-6.16.0\bin\..\tomcat\temp
set JAVA_HOME=C:\JDK\jdk-12

在*/artifactory-cpp-ce-6.16.0/tomcat/conf/server.xml文件中可以看到服务器相关信息,安装好了之后在本地的8081端口可以访问网页控制台。里面可以创建用户配置仓库权限等等。

一些重要的设置

有一些基本设置主要是关于网站位置,可能影响代理设置的,这里记录一下我的设置:

  • Configuration->General Configuration:
  • Security->Permissions:
    • 用户的权限主要是在这里面设置。
  • Services->Backups:
    • 里面可以设置自动备份,后面的导入导出功能的导出文件看起来和自动备份实际一样的。

试着把http改成https

作为一个GFW PTSD患者,看到http的连接我就心里发慌。刚刚搭建好的私人库的默认的访问端口是http的,既然能看到tomcat的server.xml配置文件,那么能不能把它改成https的呢。首先已经有了home.xuexuesoft.com.cer证书文件。

查到tomcat设置https的证书的过程大致是cer->pkcs12->keystore文件,然后在配置文件中写入即可。
合并PFX(PKCS12)文件:

将csr文件交给CA签名后,获得cer文件,为了提供给IIS,TOMCAT,RESIN等服务器使用,需要将Key+Cer文件转换PKCS12格式的文件,如果CA签发的是单根证书(Single Root Certificate:由CA内置浏览器的根证书直接签发服务器证书的)请用如下命令:

openssl pkcs12 -export -out server.pfx -inkey server.key -in server.cer

如果CA签发出的是级联证书(Chained SSL Certificate: 在CA和服务器正式之间,还有1张或多张的中间证书,为了保证客户验证的完整性,必须在PFX,安装全部的中间证书),请用如下命令:

openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt -certfile chain.cer

chain.cer 包含了所有中间证书的内容,可以不包含根证书和服务器证书,如果有多个中间证书,可直接用记事本将各个证书打开(都必须是Base64的),然后粘帖到一个文件里就可以了。 举例,GeoTrust EV证书在IE5下的证书链格式如下:
–Equifax Sevure Certificate Authority
–GeoTrust Primary Certification Authority
–GeoTrust Extended Validation SSL CA
www.domain.com
则chain.cer应该包含了GeoTrust Primary Certification Authority和GeoTrust Extended Validation SSL CA两个中间证书。

使用openssl从PFX(PKCS12)文件中,分解出KEY和CER文件

openssl pkcs12 -in myssl.pfx -nodes -out server.pem
openssl rsa -in server.pem -out server.key
openssl x509 -in server.pem -out server.crt

记录下导出keystore的实操步骤:

# 首先在文件夹里准备好证书文件
dx@VirtualBox:/mnt/d/Test/home.xuexuesoft.com$ ll
总用量 26
drwxrwx--- 1 root vboxsf 4096 3月   6 17:55 ./
drwxrwx--- 1 root vboxsf    0 3月   6 17:55 ../
-rwxrwx--- 1 root vboxsf 1648 3月   5 18:12 ca.cer*
-rwxrwx--- 1 root vboxsf 3567 3月   5 18:12 fullchain.cer*
-rwxrwx--- 1 root vboxsf 1919 3月   5 18:12 home.xuexuesoft.com.cer*
-rwxrwx--- 1 root vboxsf  573 3月   5 18:12 home.xuexuesoft.com.conf*
-rwxrwx--- 1 root vboxsf  989 3月   5 18:12 home.xuexuesoft.com.csr*
-rwxrwx--- 1 root vboxsf  214 3月   5 18:12 home.xuexuesoft.com.csr.conf*
-rwxrwx--- 1 root vboxsf 1675 3月   5 18:12 home.xuexuesoft.com.key*
# 先转为p12格式,会提示输入一个导出密码,应该也可以不要,估计是从pkcs12导出证书和key的时候需要的,我输入了xxxxxxxxx
dx@VirtualBox:/mnt/d/Test/home.xuexuesoft.com$ openssl pkcs12 -export -out ./server.pfx -in ./home.xuexuesoft.com.cer -inkey ./home.xuexuesoft.com.key  -certfile fullchain.cer
Enter Export Password:
Verifying - Enter Export Password:
# 生成一个keystore文件
dx@VirtualBox:/mnt/d/Test/home.xuexuesoft.com$ openssl pkcs12 -export -out ./server.pfx -in ./home.xuexuesoft.com.cer -inkey ./home.xuexuesoft.com.key  -certfile fullchain.cer
Enter Export Password:
Verifying - Enter Export Password:
# 将p12转为keystore文件,deststoretype是jks,提示要输入密码,我还是两次都输入了xxxxxxxxx
dx@VirtualBox:/mnt/d/Test/home.xuexuesoft.com$ keytool -importkeystore -srckeystore ./server.pfx -srcstoretype pkcs12 -deststoretype jks -destkeystore ./server.jks
正在将密钥库 ./server.pfx 导入到 ./server.jks...
输入目标密钥库口令:
再次输入新口令:
输入源密钥库口令:
已成功导入别名 1 的条目。
已完成导入命令: 1 个条目成功导入, 0 个条目失败或取消

Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore ./server.jks -destkeystore ./server.jks -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。

生成成功了,修改tomcat的设置server.xml

<Server port="8015" shutdown="SHUTDOWN">
    <Service name="Catalina">
        <Connector port="8081" sendReasonPhrase="true" relaxedPathChars='[]' relaxedQueryChars='[]' maxThreads="200"
        scheme="https" secure="true" keystoreFile="C:\Soft\artifactory-cpp-ce-6.16.0\tomcat\conf\server.jks" keystorePass="xxxxxxxx"
        clientAuth="false" sslProtocol="TLSv1.2"/>

        <!-- Must be at least the value of artifactory.access.client.max.connections -->
        <Connector port="8040" sendReasonPhrase="true" maxThreads="50"/>

        <Engine name="Catalina" defaultHost="localhost">
            <Host name="localhost" appBase="webapps" startStopThreads="2"/>
        </Engine>
    </Service>
</Server>

重启服务,但是没有成功…https访问没反应,但是用http访问能成功,等于这一番设置跟没设一样。。
算了懒得折腾他内置的Tomcat了,直接用Nginx反代了一个https的连接,网页访问成功233333

2.conan基本命令

pip安装好之后

# 列出现在所有源,第一次调用会创建一个配置文件夹
conan remote list

# 添加自己的源
conan remote add conan-local https://home.xuexuesoft.com:8081/artifactory/api/conan/conan-local
conan remote add conan-remote https://home.xuexuesoft.com:8081/artifactory/api/conan/conan-remote
conan remote add xuexue https://home.xuexuesoft.com:8081/artifactory/api/conan/xuexue
conan remote add conan-center https://conan.bintray.com

# 直接列出仓库conan-local上的所有的项目
conan search "*" --remote=conan-local
# 上面这句命令,因为是私有源,所以会提示需要登录,之后直接输入用户名和密码就行了
# Please log in to "conan-local" to perform this action. Execute "conan user" command.
# Remote 'conan-local' username: 

在conan.conf配置文件中要加一行 revisions_enabled = 1 ,不加在上传的时候也会提示加上。

3.CA证书问题

使用https之后,使用上面的仓库搜索命令之类的,会遇到证书问题:[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)
我猜测conan调用了python,这是python的问题,于是我开始给python加证书。
在certifi模块下会有一个cacert.pem文件,里面有记录很多根证书.

该Requests模块使用certifi软件包中的证书。Certifi是精心挑选的根证书的集合,用于在验证TLS主机的身份的同时验证SSL证书的可信赖性。它已从“请求”项目中提取。Certifi根据Mozilla certdata.txt更新其列表。

调试过程如下:

  • 首先安装模块

      pip3 install certifi
      pip3 install pyOpenSSL
  • 可以使用这样的python脚本来调试错误,一开始requests.get()确实是失败的,添加证书之后可以执行成功。

      import certifi
      import requests
      #给certifi添加证书
      try:
          print('Checking connection to server...')
          test = requests.get('https://home.xuexuesoft.com:8081/artifactory/webapp/#/home')
          print('Connection to server OK.')
      except requests.exceptions.SSLError as err:
          print('SSL Error. Adding custom certs to Certifi store...')
          #得到当前使用的cacert.pem文件的位置,就是在certifi模块的位置
          cafile = certifi.where()
          #把整个fullchain.cer里的证书全无脑贴进去了就完了,也可以手动操作
          with open(R"C:\Users\surface\OneDrive\Work\home.xuexuesoft.com\fullchain.cer", 'rb') as infile:
              customca = infile.read()
          with open(cafile, 'ab') as outfile:
              outfile.write(customca)
          print('That might have worked.')
  • 虽然上面这段python代码能访问服务器了。但是。。。打命令连服务器,还是有ca错误。然后google了一番。结果居然在conan的用户目录下也看到了一个pem文件。原来conan在用户文件夹下有自己的一个证书存储。而且这个文件里比python的那里存的证书貌似还多…啥也不说了,直接把刚才的fullchain.cer里的两个证书往里一粘。成功。


   转载规则


《conan使用记录》 daixian 采用 知识共享署名 4.0 国际许可协议 进行许可。
 本篇
conan使用记录 conan使用记录
Conan是一个C++的包管理工具,使用了它有一段时间了,记录一下它的安装和使用的一些关键步骤。下面主要记录了服务器的部署和客户端添加CA证书的步骤,服务器的版本的是6.16.0,最新的7.x版本增加了一些图表统计功能,阉割了一些设置的功能
2020-03-06
下一篇 
バレンタインデー バレンタインデー
バレンタインデー因为肺炎,全国封路,躺尸在家里。在朋友圈看到一去了日本的妹子发了个DIY情人节巧克力,突然一下想起了很多年前差不多快忘记的东西,感慨万千。。想起白色相簿的剧情,2月14日是雪菜生日,反正一直就没过好。。剧情快记不清了,只记得
2020-02-14
  目录